一、SSRF概念
服务端请求伪造(Server-Side Request Forgery),是一种有攻击者构造形成有服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片、文档等等。
二、SSRF用途
1.内外网的端口和服务扫描
2.主机本地敏感数据的读取
3.内外网主机应用程序漏洞的利用
4.内外网web站点漏洞的利用
三、漏洞影响版本
weblogic 10.0.2 -- 10.3.6
四、漏洞复现环境搭建
进入目标目录
启动容器
docker-compose up -d
端口查询
docker ps -a
五、漏洞复现
访问http://192.168.0.116:7001/uddiexplorer/,查看uddiexplorer应用
SSRF漏洞存在于`/uddiexplorer/SearchPublicRegistries.jsp中
随便提交一个内容,通过burp抓包
发现如下图存在operator参数,参数的值是url,怀疑可能存在SSRF漏洞
测试是否存在SSRF漏洞,在url后跟端口,修改post请求为get并修改operator参数,发现返回如下信息
修改operator参数为不存在的端口时,报错如下:
根据报错的不同,可以进行内网探测。
此时通过ssrf探测内网中的redis服务器,发现’172.18.0.2:6379’可以连通
六、SSRF漏洞的寻找
1.分享,通过URL地址分享网页内容
2.转码服务
3.在线翻译
4.图片加载与下载:通过URL地址加载或者下载图片
5.图片、文章收藏功能
6.未公开的api实现以及其他调用URL的功能
7.从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、display、sourceURI、imageURL、domain……
七、SSRF漏洞的验证方法
1.因为SSRF漏洞是构造服务器发送请求的安全漏洞,所以我们可以通过抓包分析发送的请求是否是由服务器端发送的来判断是否存在SSRF漏洞
2.在页面源码中查找访问的资源地址,如果该资源地址类型为http://www.xxx.com/a.php?image=(地址)的可能存在SSRF漏洞
八、SSRF绕过技巧
1.添加端口号 http://127.0.0.1:8080
2.短网址绕过 http://dwz.cn/11SMa
3.IP限制绕过 十进制转换、八进制转换、十六进制转换、不同进制组合转换
4.协议限制绕过 当url协议限制只为http(s)时,可以利用follow redirect特性,构造302跳转服务,结合dict://,file://,gopher://
5.可以指向任意ip的域名:xip.io
6.@ http://abc@127.0.0.1
九、SSRF防御
1.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2.统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3.限制请求的端口为http常用的端口,比如80,443,8080,8090
4.黑名单内网ip。避免应用被用来获取内网数据,攻击内网
5.禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题