SSRF 中 localhost 的常见替代形式
整理 SSRF 场景下 localhost、127.0.0.1 和 IPv6 回环地址的常见表示方式。
一、IPv4 地址形式
127.0.0.1
127.1
127.0.1
127.0.0.01
127.00.0.1
127.000.000.001
127.0.0.0/8 都属于 IPv4 loopback 网段,因此不只有 127.0.0.1 这一种写法。不过不同语言和解析器对非标准形式的支持可能不同,需要结合目标环境验证。
二、IPv4 整数形式
2130706433
2130706433 是把 127.0.0.1 转换成 32 位整数后的结果。
三、十六进制 IPv4
0x7f000001
它同样表示 127.0.0.1 的十六进制整数形式。
四、八进制 IPv4
0177.0.0.1
0177.000.000.001
五、IPv6 回环地址
::1
0:0:0:0:0:0:0:1
::1 是 IPv6 的 loopback 地址,相当于 IPv4 的 127.0.0.1。
六、IPv4-mapped IPv6
::ffff:127.0.0.1
::ffff:7f00:1
七、localhost 域名
localhost
localhost.localdomain
八、DNS / 特殊域名
127.0.0.1.nip.io
127.0.0.1.sslip.io
这类域名会把 IP 地址放在域名中,由 DNS 解析到对应地址。实际使用时要确认目标环境能够正常进行 DNS 解析。
九、URL 编码
localhost → %6c%6f%63%61%6c%68%6f%73%74
127.0.0.1 → %31%32%37%2e%30%2e%30%2e%31
十、双重 URL 编码
%256c%256f%2563%2561%256c%2568%256f%2573%2574
第一层解码后:
%6c%6f%63%61%6c%68%6f%73%74
第二层解码后:
localhost
十一、混合形式
127.1
0x7f.0x0.0x0.0x1
0177.0.0.1
::1
::ffff:127.0.0.1
核心原理
127.0.0.0/8都属于 IPv4 loopback 网段。- 某些解析器会把
127.1解释成127.0.0.1。 2130706433是127.0.0.1的 32 位整数表示。0x7f000001是127.0.0.1的十六进制整数表示。::1是 IPv6 的 loopback 地址。- 编码绕过利用的是过滤器和后续 URL 解析器看到的内容不同。
- 双重编码可能利用不同组件解码次数不一致的问题。
复盘提示
这些形式并不是在所有框架和网络库中都等价。分析 SSRF 时,应重点确认:过滤发生在哪一层、实际请求由哪个解析器发出,以及中间经过了几次 URL 解码。