🔍 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")publicvoidgo(@RequestParam String url, HttpServletResponse response)throws IOException { response.sendRedirect(url); // ⚠️ 高危}
🛡️ 防御建议:
-
加白名单验证:
if (!url.startsWith("/")) thrownew 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++:记录跳转响应变化
📌 渗透案例:
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)) thrownew SecurityException("非法跳转!");
-
✅ 使用 URL 签名机制
-
为跳转参数添加 HMAC 校验 -
防止用户伪造外部跳转地址 -
✅ 中转确认页
-
用户跳转前显示提示页面,引导确认 -
提高用户可感知性 -
✅ 避免用户直接控制 URL
-
可通过枚举跳转目标、绑定 ID 的方式替代动态 URL
原文始发于微信公众号(季升安全):深入解析 URL 跳转漏洞:审计方法与渗透实战全攻略
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论