1. 漏洞描述#
SSRF (Server-Side Request Forgery, 服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统 (正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)
2. 漏洞原理#
SSRF 漏洞的形成原因大多是因为:
服务端提供了从其他服务器应用获取数据的功能且未对目标地址做过滤或限制处理
如:攻击者操作服务端从指定 URL 地址获取网站内容
3. 利用方式#
- 对内网或本地进行端口扫描,获取端口服务的 banner 信息
- 攻击运行在内网或本地的应用程序
- 对内网 web 应用进行指纹扫描,获取企业单位内部的资产信息
- 利用 file 协议读取敏感文件
4. SSRF 支持的协议#
1. http 协议:#
通过 HTTP 协议进行内网端口探测,通过返回的时间和长度来判断端口是否开放
https://ip/ssrf.php?url=http://127.0.0.1:3389
2. file 协议#
通过 file 协议来读取文件信息
https://ip/ssrf.php?url=file:///etc/passwd
3. dict 协议#
通过 dict 协议来探测服务信息
https://ip/ssrf.php?url=dict://127.0.0.1:3306
4. gopher 协议#
通过 gopher 协议探测端口,发送 get 请求和攻击 redis 服务
https://ip/ssrf.php?url=gopher://127.0.0.1:3306
5. 漏洞防御#
- 禁止跳转
- 过滤返回信息
- 禁止不需要的协议
- 设置 URL 白名单
- 统一错误信息