Web安全:XML外部实体注入

Posted 计算机与网络安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web安全:XML外部实体注入相关的知识,希望对你有一定的参考价值。

 一次性付费进群,长期免费索取资料

 教程列表  见微信公众号底部菜单 |   本文底部有推荐书籍 



ID:Computer-network


XML本身是一种文件类型,就像txt文件、Excel文件等一样。但是,当服务器程序在解析这种XML文件的时候,若XML文件里存在访问系统敏感文件的XML语句或者是执行系统命令的XML语句,这就非常危险了。


攻击者通过客户端注入一系列操纵敏感文件及执行系统命令的XML语句到服务器中的XML文件里。此刻,服务器程序一般会解析该XML文件并将解析的结果返回给用户。于是,攻击者就达到了获取服务器上敏感文件的内容及执行系统命令的目的。


例如攻击者在客户端构造并提交XML攻击测试用例:


<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [<!ELEMENT name ANY><!ENTITY xxe SYSTEM "file:///etc/passwd">]><root><name>&xxe;</name></root>


若该XML攻击测试用例已被攻击者注入服务器上的某个XML文件中,则当服务器程序在解析XML文件的时候,XML文件里面的system函数就会读取/etc/passwd文件的内容(当然也可以执行系统命令),从而达到攻击的目的。


这样我们可以简单理解上述XML攻击测试用例代码的基本含义。首先,在XML文件中定义一个变量xxe;然后,将变量xxe的值赋为SYSTEM"file:///etc/passwd";最后,通过&xxe输出变量xxe中的值。服务端程序解析XML文件的基本思路转化为如下代码(以php代码解析XML文件为例):


<?php$xml=simplexml_load_file("xxe.xml");print_r($xml);?>


某站存在XML外部实体注入漏洞,攻击者进入系统后单击登录,可使用Burp Suite截取登录数据包,修改该登录数据包(添加如下XML语句)并发送至Web服务器:<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [<!ELEMENT name ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><root><name>&xxe;</name></root>,修改以后的登录数据包如图1所示。

图1  截取并修改以后的登录数据包


接下来,Web服务器返回信息如图2所示。

图2  passwd文件内容


ID:Computer-network


【推荐书籍】