了解SSRF,这一篇就足够了
字数 2206 2025-08-29 08:32:00
SSRF(服务器端请求伪造)全面教学文档
0x00 定义与成因
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的安全漏洞。其核心特点是:
- 由服务端发起请求,而非客户端
- 能够访问与服务器相连但与外网隔离的内部系统
- 成因主要是服务端提供了从其他服务器获取数据的功能且未对目标地址做充分过滤与限制
常见触发场景:
- 从指定URL获取网页文本内容
- 加载指定地址的图片
- 文件下载功能
注:除HTTP/HTTPS外,TCP connect方式也可用于探测内网IP端口开放情况(危害较小)
0x01 常见存在位置
- 社交分享功能:获取超链接标题等内容进行显示
- 转码服务:通过URL调优网页内容适配移动设备
- 在线翻译:翻译指定URL的网页内容
- 图片处理:
- 富文本编辑器中的图片下载
- 通过URL加载/下载图片
- 收藏功能:获取URL中title和文本内容
- 云服务厂商:远程执行命令判断网站存活状态
- 网站采集/抓取:对输入URL进行信息采集
- 数据库功能:如MongoDB的copyDatabase函数
- 邮件系统:接收邮件服务器地址
- 文件处理:
- FFmpeg
- ImageMagick
- docx/pdf/xml处理器
- 未公开API:可通过Google语法搜索(关键字见下)
- 远程资源请求:
- 从URL上传(如Discuz!)
- RSS feed导入导出(如博客系统)
- XML引擎对象(如WordPress xmlrpc.php)
关键URL参数:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain等
0x02 漏洞验证方法
-
排除法:
- 检查浏览器F12源代码,确认请求是否由本地发起
- 观察资源地址格式(如
http://www.xxx.com/a.php?image=(地址))
-
DNSlog工具:
- 将准备请求的URI和参数编码为base64,便于追踪
-
抓包分析:
- 确认请求是否由服务器发出
- 从历史漏洞中寻找泄漏的内网地址
- 使用二级域名暴力猜解工具推测内网地址
-
直接信息反馈:
- 检查返回的Banner、title、content等信息
-
留意bool型SSRF:无回显但实际存在漏洞的情况
0x03 利用方式
-
基本利用:
- 使服务端访问指定网址
- 探测内网指纹文件判断CMS类型
-
协议利用:
- 使用file、dict、gopher、ftp等协议访问文件
- 示例:
file:///etc/passwd
-
内网攻击:
- 向内部任意主机的任意端口发送精心构造的payload
- 利用跨协议通信技术攻击应用程序
-
主机探测:
- 通过端口访问判断内网主机存活状态
-
DoS攻击:
- 请求大文件并保持长连接(keep-alive always)
0x04 绕过技巧
-
基础绕过:
http://baidu.com@www.baidu.com/等价于http://www.baidu.com/- IP地址进制转换(十进制、十六进制等)
-
URL跳转:
http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/
-
短网址:
http://t.cn/RwbLKDx
-
xip.io服务:
http://xxx.192.168.0.1.xip.io/解析为192.168.0.1
-
端口绕过:
- 当限制子网段时,添加
:80端口 - 示例:
http://10.42.7.78:80
- 当限制子网段时,添加
-
域名解析:
- 探测内网域名或将自己的域名解析到内网IP
-
host分割绕过:
- 当修复方案以
/分割确定host时,可使用http://abc@10.153.138.81/
- 当修复方案以
0x05 经典漏洞示例
-
WordPress 3.5.1以下版本:
- xmlrpc.php的pingback功能缺陷导致SSRF
-
Discuz!:
- 利用PHP的header函数实现302跳转和协议转换
-
WebLogic:
- 存在SSRF漏洞的历史案例
0x06 修复方案
-
禁止跳转:防止通过跳转绕过限制
-
响应验证:
- 验证远程服务器返回的信息是否符合预期格式
-
协议限制:
- 仅允许HTTP/HTTPS,禁用file、gopher、ftp等危险协议
-
访问控制:
- 设置URL白名单
- 使用gethostbyname()判断并限制内网IP访问
-
端口限制:
- 限制为常用Web端口(80、443、8080、8090等)
-
统一错误信息:
- 避免通过错误信息泄露端口状态
0x07 相关工具与技巧
-
系统命令:
crontab -l查看计划任务crontab -r清除计划任务
-
端口转发:
- 使用socat工具
-
Apache配置:
AddType application/x-httpd-php .jpg可将jpg文件当作PHP执行