SSRF
服务端请求伪造(Server Side Request Forgery, SSRF)
攻击者构造形成以服务器的身份发送一条构造好的请求给服务器所在内网。因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统
危害
- 可以对服务器所在的内网环境进行端口扫描、资源访问
- 访问内部资源,如连接数据库等
- 若在云服务器可以利用云服务器元数据攻击云平台内其他组件或服务
- 利用Redis未授权访问getshell
场景
- XXE漏洞点
- 图片加载/下载:通过URL加载网络图片(头像上传等)
- 转码服务:适配手机屏幕大小并通过URL地址进行图片转码
- 分享功能:通过URL地址分享网页内容,通过URL获取目标页标题、页面、截图等内容
- 编辑器进行远程图片抓取
- 如: ueditor(ueditor的远程图片抓取的地址一般在
/ueditor/editor_config.js
中的catcherUrl
参数中)
- 如: ueditor(ueditor的远程图片抓取的地址一般在
利用
访问内网服务
伪协议利用
Redis利用
云主机
工具
Bypass
更改IP地址写法
解析到内网的域名
利用HTTP状态码跳转
协议替代
利用域名特殊字符标准化处理
利用IPv6
DNS Rebinding(DNS重绑定)
Fix
看到很多面试喜欢问这个,就顺手写一下
设置内网IP的黑名单,对于在黑名单内的IP,禁止访问
统一 IP 地址格式
过滤特殊字符,对URL规范化处理
禁止302跳转,设置不跟随跳转
对于域名来说,应先通过DNS解析IP,判断IP是否为内网黑名单中
检测协议,设置协议白名单,可以防止file://
,gopher://
,ftp://
等协议引起的问题。
对DNS Rebinding(DNS重绑定),考虑使用DNS缓存或者Host白名单