SSRF 攻击模拟

模拟服务端请求伪造(SSRF),体验如何探测内网服务、获取云元数据

[X] 漏洞代码
// 危险:直接请求用户输入的 URL
$url = $_GET['url'];
$content = file_get_contents($url);
echo $content;
[OK] 安全代码
// 安全:黑名单验证
$blocked = ['127.','localhost',
    '169.254.','file://','dict://'];
foreach ($blocked as $b) {
    if (stripos($url, $b) !== false) {
        die('SSRF blocked');
    }
}
$content = file_get_contents($url);
[TIP] 注入提示:切换到漏洞模式,尝试这些 Payload:
  • http://127.0.0.1:80/ — 探测本地 Web 服务
  • http://127.0.0.1:6379/ — 探测内网 Redis
  • http://169.254.169.254/latest/meta-data/ — AWS 元数据
  • file:///etc/passwd — 读取本地文件(file 协议)
  • dict://127.0.0.1:6379/info — Redis 信息(dict 协议)

[DEFENSE] 防御措施

  • URL 黑名单:禁止内网 IP 段(127.*, 10.*, 192.168.*, 172.16-31.*)
  • 协议白名单:只允许 http/https,禁止 file://、dict://、gopher://
  • DNS 重绑定防护:解析域名后验证 IP 是否为内网地址
  • 云元数据防护:禁止访问 169.254.169.254(AWS/GCP 元数据地址)
  • 网络隔离:限制应用服务器的出站网络访问
  • 使用专用代理:通过安全的 HTTP 客户端库请求外部资源

← 返回攻击模拟首页