服务器端请求伪造中经常出现的另一种信任关系是,应用服务器能够与用户无法直接访问的其他后端系统交互。这些系统通常有不可路由的私有 IP 地址。由于后端系统通常受到网络拓扑的保护,因此它们通常具有较弱的安全性。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以在不进行身份验证的情况下访问这些功能。
在前面的例子中,假设在后端 URL https://192.168.0.68/admin 中有一个管理界面。在这里,攻击者可以通过提交以下请求,利用 SSRF 漏洞访问管理界面:
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://192.168.0.68/admin
地址:https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-backend-system
靶场介绍:
该靶场具有库存检查功能,可从内部系统获取数据。
要通关此靶场,请使用库存检查功能扫描内部192.168.0.X范围,以查找端口8080上的管理界面,然后使用它删除用户carlos。
靶场通关:
点击Access the lab进入靶场。
点击Check stock抓包,发送到Intruder
设置payload,跑192.168.0.0/24这个C段的8080端口
找到状态为200的响应包,即为管理界面
再点击删除carlos用户,抓包,得到删除目标用户的URL:
:8080/admin/delete?username=carlos
将stockApi参数修改为此URL即可
绕过常见的SSRF防御措施
包含 SSRF 行为的应用程序与旨在防止恶意利用的防御措施一起出现是很常见的。通常,这些防御措施可以被绕过。
SSRF攻击之绕过基于黑名单的输入过滤器 漏洞介绍一些应用程序阻止包含主机名(如127.0.0.1和 localhost)或敏感 url (如/admin)的输入。在这种情况下,我们通常可以使用各种技术来绕过过滤器:
(1) 使用127.0.0.1的替代IP表示,例如:2130706433(10进制ip)、017700000001(8进制ip)、127.1(短ip)
(2) 注册自己的域名,解析为127.0.0.1
(3) 使用URL编码或大小写变化绕过
Lab: SSRF with blacklist-based input filter地址:https://portswigger.net/web-security/ssrf/lab-ssrf-with-blacklist-filter
靶场介绍:
这个靶场有一个库存检查功能,可以从内部系统中获取数据。
要通关此靶场,请更改库存检查的URL以访问管理界面并删除用户carlos
开发人员已部署了两个弱的反SSRF防御,您需要绕过这些防御。
靶场通关:
点击Access the lab进入靶场。
点击Check stock抓包,发送到Repeater
将stockApi参数中的URL更改为,发现请求被阻止。
将127.0.0.1改为2130706433即可绕过
将URL更改为,发现再次被阻止。
将字符a进行两次url编码得到%2561,或者用A替代a,即可绕过