Files
Sec-Interview/Chapter10/10-2.md
T
2025-09-25 03:52:44 +08:00

54 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### SSRF 漏洞绕过方法
**1. IP 地址绕过**
服务器为了防止内网探测,通常会限制请求的目标IP,比如禁止访问私有IP地址(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1)。我们可以尝试一些技巧来绕过这些限制
- **十进制、八进制、十六进制等进制转换:**
- **十进制:** `http://127.0.0.1` 可以转换为 `http://2130706433`
- **八进制:** `http://127.0.0.1` 可以转换为 `http://0177.0.0.1``http://017700000001`
- **十六进制:** `http://127.0.0.1` 可以转换为 `http://0x7f000001`
- **混合进制:** 例如 `http://0x7f.0.0.1`
- **域名解析:** `localhost` 可以解析为 `127.0.0.1`
- **不完整 IP:** 某些系统会把 `127.1` 当作 `127.0.0.1` 处理
- **短地址服务或域名重定向:**
- 攻击者可以利用短地址服务(如 bit.ly)或自己搭建一个网站,设置 302/307 重定向,将请求从白名单域名重定向到内网地址。例如,设置一个 `http://trusted.com/redirect`,当服务器请求此地址时,会自动跳转到 `http://192.168.1.1`
- 这种方法常用于目标服务器只允许访问特定白名单域名的情况
- **利用 IPV6 地址绕过:**
- 如果目标系统没有对 IPv6 地址进行过滤,那么 `::1` 就可以指向 `127.0.0.1`
- **利用 `xip.io` 或类似服务:**
- `xip.io` 是一个将 IP 地址嵌入域名的服务。例如,`10.0.0.1.xip.io` 会解析为 `10.0.0.1`。如果服务器只限制了 IP,但未限制域名解析,这会是有效的绕过方法
**2. 协议绕过**
除了 HTTP/HTTPS 协议,许多库还支持其他协议。如果服务器没有对这些协议进行过滤,我们可以利用它们来访问服务器的本地文件或服务
- **`file://` 协议:**
- `file:///etc/passwd` 可以读取 `/etc/passwd` 文件
- `file:///C:/Windows/win.ini` 可以读取 Windows 系统的 `win.ini` 文件
- **`dict://` 协议:**
- `dict://127.0.0.1:6379/info` 可以查询 Redis 服务的信息
- `dict://127.0.0.1:6379/config:set:dbfilename:evil.php` 可以用于写入恶意文件
- **`gopher://` 协议:**
- 这是最强大的协议之一,可以发送任意 TCP 请求。攻击者可以利用它来攻击内网的各种服务,如 MySQL、Redis、FastCGI 等
- 例如,攻击 Redis 服务:`gopher://127.0.0.1:6379/_*2%0D%0A$4%0D%0Ainfo%0D%0A`
- **`ftp://` 协议:**
- 可以利用 FTP 协议在某些情况下进行端口扫描,或者发送自定义命令
**3. URL 解析绕过**
不同的URL解析器(如 PHP、Python、CURL 等)对 URL 的解析规则可能存在差异。利用这种差异,可以绕过基于正则表达式的过滤
- **利用特殊字符:**
- `@` 符号:`http://example.com@127.0.0.1`,在一些解析器中,会忽略 `@` 前的内容,导致请求发往 `127.0.0.1`
- `#` 符号:`http://127.0.0.1#example.com` `#` 后面的内容通常被认为是片段标识符,会被忽略,从而请求 `127.0.0.1`
- **利用 URL 编码:**
- 对 IP 地址进行URL编码,例如 `127.0.0.1` 编码为 `%31%32%37%2E%30%2E%30%2E%31`
-`.` 进行 URL 编码,例如 `http://127%2E0%2E0%2E1`
- **利用 DNS Rebinding**
- 这是高级且难以防范的技巧。攻击者控制一个域名,该域名在短时间内第一次解析为一个非内网 IP(通过白名单检查),第二次解析为内网 IP
- **步骤:**
1. 攻击者设置一个恶意域名 `evil.com`,其 DNS 记录 TTL(生存时间)设置为很低
2. 第一次 DNS 解析,`evil.com` 解析为一个公网 IP,服务器通过白名单检查
3. 服务器发起请求,但由于请求需要时间,在第二次DNS解析时,攻击者将 `evil.com` 的 DNS 记录修改为 `127.0.0.1`
4. 服务器再次请求 `evil.com` 时,会请求到 `127.0.0.1`,从而绕过过滤