深入解析 URL 跳转漏洞:审计方法与渗透实战全攻略
深入解析 URL 跳转漏洞:审计方法与渗透实战全攻略
原创 火力猫 季升安全 2025-04-16 11:30
🔍 URL跳转漏洞审计与渗透分析手册
🧠 一、漏洞原理概述
URL跳转漏洞
发生在服务端根据用户可控输入进行跳转,却未对跳转目标地址进行有效验证
。
🔗 典型攻击场景:
https://example.com/go?url=https://evil.com
若后端直接使用:
response.sendRedirect(url);
攻击者即可构造合法页面诱导用户跳转到恶意地址。
🧪 二、常见跳转方式与源码审计点
跳转方式 | 所属层 | 示例代码 |
---|---|---|
ModelAndView("redirect:") |
Spring MVC | new ModelAndView("redirect:" + url) |
return "redirect:" + url |
Spring MVC | return "redirect:" + url |
sendRedirect(url) |
Servlet | response.sendRedirect(url) |
setHeader("Location", url) |
Servlet | response.setHeader("Location", url) |
RedirectAttributes |
Spring MVC | return "redirect:" + url |
🧬 示例:sendRedirect
@RequestMapping("/go")public void go(@RequestParam String url, HttpServletResponse response) throws IOException { response.sendRedirect(url); // ⚠️ 高危}
🛡️ 防御建议:
- 加白名单验证:
if (!url.startsWith("/")) throw new IllegalArgumentException("非法跳转");
- 或使用映射:
if ("home".equals(urlKey)) return "redirect:/home";
🕵️ 三、黑盒渗透实战技巧
🎯 参数枚举策略:
尝试以下参数名:
?redirect=?url=?next=?returnTo=?dest=?continue=?target=
🧪 实战 payload 构造:
类型 | 示例 Payload | 用途说明 |
---|---|---|
标准 URL | https://evil.com |
直接跳转测试 |
协议相对路径 | //evil.com |
绕过协议限制 |
编码绕过 | %2f%2fevil.com |
Bypass 路径限制 |
子域钓鱼 | https://example.com.evil.com |
欺骗用户混淆 |
内嵌@欺骗 | https://[email protected] |
用户以为是 example.com |
🧰 Burp Suite 实用插件:
-
Autorize
:测试跳转是否绕过权限控制 -
Turbo Intruder
:批量 fuzz 跳转参数 -
Redirect Tracker
:观察跳转链 -
Logger++:记录跳转响应变化
🎣应用实例:
👉一次 OAuth 登录背后的隐患:被忽略的 URL 跳转漏洞
📌 渗透案例:
GET /login?next=https://evil.com HTTP/1.1Host: secure.example.com
若返回:
HTTP/1.1 302 FoundLocation: https://evil.com
即为漏洞点,可用于社工钓鱼、OAuth 劫持、权限绕过。
详细介绍👉URL 跳转漏洞利用方式详解:不仅仅是钓鱼这么简单!
🛡️ 四、安全加固建议(推荐措施)
- ✅ 跳转目标白名单
List<String> whitelist = List.of("/home", "/dashboard");if (!whitelist.contains(url)) throw new SecurityException("非法跳转!");
-
✅ 使用 URL 签名机制
-
为跳转参数添加 HMAC 校验
-
防止用户伪造外部跳转地址
-
✅ 中转确认页
-
用户跳转前显示提示页面,引导确认
-
提高用户可感知性
-
✅ 避免用户直接控制 URL
-
可通过枚举跳转目标、绑定 ID 的方式替代动态 URL