SSRF 中 localhost 的常见替代形式

整理 SSRF 场景下 localhost、127.0.0.1 和 IPv6 回环地址的常见表示方式。

  • #CTF
  • #SSRF
  • #内网探测
  • #URL 解析

一、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

核心原理

  1. 127.0.0.0/8 都属于 IPv4 loopback 网段。
  2. 某些解析器会把 127.1 解释成 127.0.0.1。
  3. 2130706433 是 127.0.0.1 的 32 位整数表示。
  4. 0x7f000001 是 127.0.0.1 的十六进制整数表示。
  5. ::1 是 IPv6 的 loopback 地址。
  6. 编码绕过利用的是过滤器和后续 URL 解析器看到的内容不同。
  7. 双重编码可能利用不同组件解码次数不一致的问题。

复盘提示

这些形式并不是在所有框架和网络库中都等价。分析 SSRF 时,应重点确认:过滤发生在哪一层、实际请求由哪个解析器发出,以及中间经过了几次 URL 解码。