PortSwigger靶场之利用开放重定向漏洞绕过过滤器的 SSRF 攻击通关秘籍
这个实验的核心是利用开放重定向漏洞绕过 SSRF 的主机限制,最终访问内网管理界面并删除用户。以下是具体原理和解决步骤:
原理分析
SSRF 的主机限制:目标系统的库存检查功能(
stockApi参数)被限制为只能访问本地应用程序(不允许直接请求外部或内网其他主机),直接修改stockApi为http://192.168.0.12:8080/admin会被拦截。开放重定向漏洞的作用:应用程序中存在一个开放重定向 —— 当访问
/product/nextProduct?path=XXX时,服务器会返回Location: XXX的响应,导致浏览器(或本实验中的库存检查工具)自动跳转到XXX指定的地址。这个漏洞的关键是:库存检查工具会跟随重定向,而重定向的目标不受原 SSRF 的主机限制,因此可以通过它间接访问内网地址。
具体解决步骤
1. 确认 SSRF 的主机限制
- 访问任意产品页面,点击 “查看库存”,用 Burp 拦截请求(包含
stockApi参数,例如stockApi=/path/to/local/stock)。

- 在 Burp Repeater 中尝试修改
stockApi为内网管理地址http://192.168.0.12:8080/admin,发送后会被服务器拦截(因违反 “只能访问本地” 的限制)。
2. 发现开放重定向漏洞
- 点击页面中的 “下一个产品” 按钮,观察其请求 URL 为
/product/nextProduct?currentProductId=1&path=/product?productId=2(path参数指定跳转目标)。

- 拦截该请求并发送到 Repeater,修改
path参数为任意地址(如path=http://example.com),发送后发现响应头中Location: http://example.com,证明存在开放重定向(path参数的值被直接作为重定向目标,未做限制)。
3. 利用重定向绕过 SSRF 限制
构造重定向 URL:利用开放重定向,让
stockApi先请求本地的重定向接口,再通过重定向跳转到内网管理地址。构造stockApi的值为:/product/nextProduct?currentProductId=1&path=http://192.168.0.12:8080/admin含义:库存检查工具先访问本地的
/product/nextProduct,该接口返回重定向到内网管理界面的响应,工具跟随重定向后成功访问内网。
在 Repeater 中发送修改后的
stockApi请求,此时服务器会先处理本地重定向接口,再跟随到内网http://192.168.0.12:8080/admin,成功绕过主机限制,访问到管理界面。
4. 删除目标用户
基于上述逻辑,修改重定向的目标路径为删除用户的接口,构造最终
stockApi:/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos发送请求后,库存检查工具会跟随重定向执行删除操作,完成实验。

- 将
stockApi的值修改为你构造的重定向 URL:/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos。
当我们在
stockApi中填入开放重定向的 URL(如/product/nextProduct?path=内网地址)时: - 这个 URL 的域名 / 路径属于 “本地应用程序”(
/product/nextProduct是目标系统自身的接口),符合stockApi的访问限制,因此不会被拦截。 - 服务器会正常处理
stockApi的请求,访问自身的/product/nextProduct接口,此时触发开放重定向,返回Location: 内网地址。 - 由于库存检查功能会自动跟随重定向,服务器会继续访问重定向目标(内网地址),而这一步是服务器 “主动跟随” 的结果,不受最初的 “本地应用程序” 限制(过滤器只检查
stockApi的初始 URL,不检查重定向后的目标)。
总结
本实验的核心思路是 “借道” 开放重定向:
- 利用 SSRF 功能只能访问本地的限制,先让其请求本地存在开放重定向的接口;
- 通过开放重定向的
path参数,将目标偷偷改为内网管理地址,从而绕过 SSRF 的主机过滤; - 最终让服务器执行访问内网并删除用户的操作。
这是实战中绕过 SSRF 主机限制的经典方法 —— 当直接请求被拦截时,可寻找应用内的重定向功能作为 “跳板”。
