XXE漏洞:XML外部实体注入漏洞
XXE漏洞的定义
XXE漏洞(XML External Entity)是一种安全漏洞,它存在于应用程序对XML输入处理不当的情况下。XML外部实体(External Entity)允许在XML文档中引用外部资源,如文件系统、URL等。当应用程序未正确验证或过滤用户提供的XML输入时,攻击者可以通过构造恶意的XML文件,利用外部实体引用敏感文件、执行远程请求等操作,从而导致信息泄露、服务器端请求伪造(SSRF)、拒绝服务(DoS)等安全问题。
XXE漏洞的危害
信息泄露: 攻击者可以利用XXE漏洞访问服务器上的敏感文件,如配置文件、数据库凭据等,从而获取敏感信息。
服务器端请求伪造(SSRF): 攻击者可以利用XXE漏洞发起对内部网络的请求,可能导致服务器端请求伪造漏洞,从而进一步探测或攻击内部系统。
拒绝服务(DoS): 攻击者可以通过恶意构造的XML文件引发大量资源消耗,导致服务器性能下降或完全不可用,造成拒绝服务。
远程代码执行(RCE): 在某些情况下,XXE漏洞可能被利用以执行远程代码,导致服务器受到攻击者控制。
横向移动: 通过利用XXE漏洞,攻击者可能获取对服务器上其他应用程序或系统的访问权限,从而实现横向移动并扩大攻击范围。
XML的定义
可扩展标记语言(Extensible Markup Language,简称:XML)是一种用于标记电子文件结构和数据的语言。它是一种通用的标记语言,旨在传输和存储数据,尤其适用于Internet环境。XML的设计目标是使数据具有自描述性和可扩展性。
XML由一系列标签组成,每个标签用于标识数据的不同部分或属性。这些标签可以按照层次结构进行嵌套,从而创建复杂的数据结构。与HTML不同,XML没有预定义的标签集合,因此用户可以根据需要定义自己的标签。XML还允许用户定义数据类型、实体和命名空间,以增强数据的表现力和灵活性。
XML的主要应用包括数据交换、配置文件、Web服务通信、数据存储等领域。它被广泛用于各种场景中,如Web开发、企业应用集成、文档标记等。 XML的易读性和灵活性使其成为一种流行的数据格式,受到广泛应用和支持。
XML的特点
- XML 是一种很像 HTML 的标记语言,其设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义,需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
判断是否存在XXE漏洞
检测XML是否会被解析
1
2
3
4
5
6
7
8
9
10#测试1
<name>&shit;</name>
#测试2
<name>&hacker;</name>Dnslog方法-检测服务器是否支持外部实体(高匿)
1
2
3
4
5如果上面两步都支持,那么就看能否回显。如果能回显,就可以直接使用外部实体的方式进行攻击。当然有时候服务器会不支持一般实体的引用。这样的话,只能使用Blind XXE(DNSlog)攻击。
XXE的Payload
文件包含
1
2
3
4
5
6
7
<root>
<name>&xxe;</name>
</root>XXE炸弹:DOS攻击
1
2
3
4
5
6
7
8
9
10
11
12
13
<lolz>&lol9;</lolz>XXE-命令执行(需要一些配置开启才能执行,很小概率能用)
1
2
3
4
5
<x>&xxe;</x>端口扫描
1
2
3
4
5
6
7通过DTO读取文件(Blind XXE)
1
2
3
4
5
6
7DTO的内容
1
2
3
%all;在attack的服务器WEB日志当中可以查看内容
XML漏洞修复方法
- 使用开发语言提供的禁用外部实体的方法
1 | PHP: |
过滤用户提交的XML数据。过滤关键字:<!DOCTYPE和</!ENTITY,或者SYSTEM和PUBLIC
不允许XML中含有自己定义的DTD。

