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()

相关推荐
酿情师18 小时前
整数溢出漏洞详解:网络安全小白从零入门
安全·web安全
qq_2602412318 小时前
将盾CDN:威胁情报驱动的网络安全防御新范式
安全·web安全
黎阳之光19 小时前
黎阳之光:以视频孪生领跑全球,赋能数字孪生水利智能监测新征程
大数据·人工智能·算法·安全·数字孪生
qq_2602412320 小时前
将盾CDN:网络安全态势感知的建设与实践
安全·web安全
一袋米扛几楼9820 小时前
【网络安全】Splunk 是什么?
安全·web安全
一袋米扛几楼9821 小时前
【网络安全】SIEM -Security Information and Event Management 工具是什么?
前端·安全·web安全
AI_Claude_code21 小时前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
上海云盾-小余21 小时前
DDoS 攻击全解析:常见类型识别与分层防御思路
网络协议·tcp/ip·安全·ddos
www43921 小时前
Vulinbox(敏感信息与敏感文件泄露)
安全
智擎软件测评小祺21 小时前
渗透测试报告关键模块拆解
网络·web安全·渗透测试·测试·检测·cma·cnas