深入解析 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 跳转漏洞利用方式详解:不仅仅是钓鱼这么简单!

🛡️ 四、安全加固建议(推荐措施)

  1. ✅ 跳转目标白名单
List<String> whitelist = List.of("/home", "/dashboard");if (!whitelist.contains(url)) throw new SecurityException("非法跳转!");
  1. ✅ 使用 URL 签名机制

  2. 为跳转参数添加 HMAC 校验

  3. 防止用户伪造外部跳转地址

  4. ✅ 中转确认页

  5. 用户跳转前显示提示页面,引导确认

  6. 提高用户可感知性

  7. ✅ 避免用户直接控制 URL

  8. 可通过枚举跳转目标、绑定 ID 的方式替代动态 URL