Web笔记 | URL跳转漏洞(开放重定向)

URL跳转漏洞(也叫--开放重定向 Open Redirection), 出现在应用程序未对传入的跳转URL变量进行校验的时候,会导致用户被诱导跳转到恶意网站,或与XSS、SSRF、CSRF漏洞进行组合利用,绕过站点的安全防护。

URL 形如:https://example.com/login?return=https://PotentiallyEvil.com/

后端代码形如 (Java) :response.sendRedirect(request.getParameter("url"))

*可以理解为,要访问的网址本身设计了从 URL 的参数中跳转到另一个地址,如果这个跳转的参数可以为用户构造的参数值,那么会存在钓鱼的风险。当用户在已登录的状态下访问该链接时,可以绕过 Referrer 字段对 CSRF token 的校验(跳转时请求的 Referrer 携带当前站点信息),组合实现对 CSRF 漏洞的利用。

📍漏洞危害与影响

  1. 钓鱼、隐藏反射XSS Payload(因为URL的前部分是信任站点);
  2. 结合实现CSRF漏洞的利用,绕过对安全策略对Referrer的校验;
  3. 敏感信息泄露:根据Referrer Policy和URL所携带的参数,跳转后携带的Referrer信息可能会导致信息泄露。

有可能泄露的敏感信息类型示例(从 URL、Referrer 中泄露):

  • CSRF Token:如果Token放在URL中(GET请求),或通过Referrer传递;
  • OAuth2.0的授权码如果在URL中,且跳转目标不受控,可通过Referrer劫持授权码;
  • Authorization Token:Bearer Token或JWT如果放在URL参数中(如?token=xxx),会在Referrer中暴露;
  • URL 中出现的个人身份信息、地理位置/经纬度信息;

📍漏洞存在的场景、功能点

  1. 用户注册、登录、统一身份认证;
  2. 用户转发、分享、评论、收藏内容;
  3. 通过单击链接的方式返回上一页的位置;
  4. 站内单击其他网址链接时发生的跳转;

📍 **漏洞修复:**通过白名单的方式设置跳转域名或者 IP

其他防御建议

  • 服务端 :对跳转 URL 进行严格的白名单校验,禁止携带内网 IP 或javascript: 协议;
  • 客户端 :不要将不可信数据直接赋值给 window.location,使用 URL 构造函数进行解析和白名单匹配;
  • OAuth :严格校验 redirect_uri 的完整性,并强制使用 state 参数防御 CSRF。

验证与绕过技巧

状态码302的响应包

验证思路: 观察哪些功能需要进行跳转,并关注任何涉及跳转操作的URL,常见的参数值有 return、redirect、redirect_to、redirect_url、url、jump、goto、target、link、callback、link、domain、checkout_url 等,输入任意URL地址看是否可以任意跳转

绕过技巧:https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet

组合利用:csrf, ssrf, xss

思路:

  1. 什么场景下进行组合利用

  2. 如何进行组合利用

1. 与CSRF的组合:窃取凭证

  • 场景 A:绕过 CSRF 的 Referrer 校验
  • 场景 B:劫持 OAuth 2.0 /SSO 的 redirect_uri 获取授权码

A. 站点在防御CSRF的时候,会校验 Referrer 头是否为本域。如果网站存在 Open Redirection,会被当做"跳板"。

  • 构造示例:将构造的表单放在存在URL跳转漏洞(开放重定向)页面路径下,https://trusted-site.com/redirect?url=https://evil.com/callback,由于 Referrer 头通常只包含域名和路径,不包含参数。
  • 效果:此时,发起 CSRF 请求时,Referrer 的值为 https://trusted-site.com/redirect,属于同源。服务端校验通过。

B. 在 OAuth 流程中,redirect_uri 参数用于指定登录成功后的回调地址 。如果该参数存在 Open Redirect,且缺乏 state 参数的严格校验(或存在 CSRF),会导致登录的授权码authorization_code 被劫持。

2. 与SSRF的组合:突破限制策略

站点为了防止 SSRF 时会采取策略,只允许请求白名单内的域名。此时,如果白名单内的某个域名存在 URL 跳转漏洞,则可以通过构造的请求绕过 SSRF 防护。

3. 与XSS的组合:绕过XSS的过滤

一些 WAF 或网站在过滤 XSS 时,只检测请求参数中是否包含 <script>alert等关键字,但忽略了 Location 跳转。如果网站存在一个基于 window.location 的跳转漏洞,可以利用跳转执行 XSS。

参考引用

1\] 《Web漏洞解析与攻防实战》 \[2\] OWASP Cheat Sheet Series: [https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html "https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html") \[3\] **URL validation bypass cheat shee**t \*\*\*\*\*(绕过技巧): [https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet "https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet") \[4\] [https://cloud.tencent.com/developer/article/2183251](https://cloud.tencent.com/developer/article/2183251?policyId=1003 "https://cloud.tencent.com/developer/article/2183251") (基础实例) \[5\] [https://cloud.tencent.com/developer/article/1516344​​​​​​](https://cloud.tencent.com/developer/article/1516344 "https://cloud.tencent.com/developer/article/1516344​​​​​​") (进阶实例) ### 附:白盒代码审计参考 [https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html "https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html") ![](https://i-blog.csdnimg.cn/direct/1c1ee45c001c443ab9f0001a38e07350.png) ### 附:基于 DOM 的 URL 跳转 > 参考自: > > - 《Web漏洞解析与攻防实战》,P213 > > - https://portswigger.net/web-security/dom-based/open-redirection 类似于反射型 XSS 和 DOM 型 XSS 的区别,URL 跳转漏洞也有**服务器端跳转** 和 **DOM 前端跳转**。DOM 类型的前端跳转不经过服务器。用户发送的跳转参数并未到达服务器,而是被前端的 JS 所解析,解析后引发跳转。 基于 DOM 的 URL 跳转漏洞挖掘需要关注网页前端 JS 代码中的关键字: * location * location.host * location.hostname * location.href * location.pathname * location.search * location.protocol * location.assign() * location.replace() * open() * element.srcdoc * XMLHttpRequest.open() * XMLHttpRequest.send() * jQuery.ajax() * $.ajax()

相关推荐
N12 小时前
拒绝被 “瘫痪”!DDoS 一体化防护攻略
安全
xixixi777772 小时前
从SQL注入到XSS:实战Web安全渗透测试
人工智能·安全·web安全·网络安全·卫星通信
NaclarbCSDN2 小时前
How Web servers work
安全
未知鱼3 小时前
Python安全开发之简易whois查询
java·python·安全
十月南城3 小时前
安全与合规检查表——隐私、审计与日志合规的关键条款与落地建议
安全
NaclarbCSDN3 小时前
How website works
安全
鹅天帝3 小时前
20230319网安学习日志——XSS漏洞
前端·学习·web安全·网络安全·xss
智塑未来3 小时前
浙江润鑫STW-18汽车轮重测量仪 稳定可靠守护车辆运行安全
安全·汽车
科技圈快讯3 小时前
浙江润鑫轴线车超载汽车检测秤:高精度检测,守护道路与车辆安全
安全·汽车