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.1http://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,从而绕过过滤
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:52

results matching ""

    No results matching ""