URL重定向漏洞(中风险)

URL重定向漏洞(中风险)

风险级别: 中风险
风险描述: 攻击者可以将参数中URL值引入任意开发者的URL或者钓鱼网站;
风险分析: 部分HTTP参数会保留URL值,这会导致Web应用程序将请求重定向到指定的URL,攻击者可以将URL改为恶意站点,从而启动钓鱼网站欺骗用户,窃取用户隐私;



钓鱼攻击:

模拟网站或者软件,几乎与官方的软件完全相同,连域名也十分相似。
网络钓鱼是互联网上流行已久且行之有效的黑客攻击机制之一。这种攻击,通过诱导用户去访问钓鱼网站,进而获取用户数据信息,或是用恶意软件感染用户系统。



使用场景:

如今Web 登录很多都接入了QQ、微信、微博,新浪等第三方服务登录,以 QQ 第三方服务授权登录为例,在我们调用 QQ 授权服务器进行授权时,将会在参数中传入redirect_url(重定向)地址,告知 QQ 授权服务器,授权成功之后页面会跳转到这个地址,然后进行站点登录操作。但是如果你的重定向地址在传输过程中被篡改成了一个钓鱼网址,那么就是导致用户的授权信息被非法获取。

当然,QQ 第三方登录,也有自己的策略,就是接入 QQ 第三方登录的应用,会在开发者平台,配置相关的跳转白名单(白名单限制),只有属于白名单中的域名,子域名或 url ,QQ授权服务器才跳转,如果发现 redirect_url 不合法,则跳转到非法页面。



漏洞分析:

1,成因:

对于URL跳转的实现一般会有以下几种实现方式:
<1>HTML内meta标签内跳转
<2>javascript跳转
<3>header头跳转

2,原理:

恶意用户借用URL跳转漏洞来欺骗安全意识低的用户,从而导致“中奖”,“游戏礼包”之类的欺诈,同时借助URL跳转,也可以突破常见的基于“白名单方式”的一些安全限制,对于大公司的域名及URL将直接允许通过并且显示会可信的URL,而一旦该URL里包含一些跳转漏洞将可能导致安全限制被绕过。



3. 常见的绕过手段:

3.1. 利用问号绕过限制:

在这里插入图片描述

3.2. 利用反斜杠和正斜杠绕过限制:

在这里插入图片描述

3.3. 利用@绕过URL限制:

如:http://www.aaa.com/acb?Url=http://login.aaa.com@test.com后面的test.com就是要跳转到的域名,前面的域名都是用来辅助以绕过限制的;

3.4. 利用#号绕过

如:http://www.aaa.com/acb?Url=http://test.com#login.aaa.com

3.5. 利用白名单缺陷绕过限制:

在这里插入图片描述

3.6. 多重验证&跳转绕过限制:
在这里插入图片描述

3.7. 点击触发绕过URL跳转限制(类似于点击劫持漏洞)
3.8. 利用超链接绕过可信站点限制:

在这里插入图片描述

3.9. POST参数中的URL跳转:

在这里插入图片描述

4. 防御方式:

在任何拼接重定向url的位置加入http://***/(附加绝对前缀)不将用户输入拼接入url尽量不要基于dom数据在客户端脚本进行重定向(类似dom型xss,避免数据不经服务器的安全验证)
检测域名结尾是不是当前域名,正确话才会跳转!!!

检测当前的域名字符串是否完整地存在要跳转过去的字符串中,是子字符串时才会跳转;

另一种类似,如果程序的跳转白名单限制比较严格,只能是自己域的地址,这时需要有一个目标其它域的任意跳转漏洞,比如在url中添加自己的域地址;https://auth.landgrey.me/jump.do?url=evil.com,然后测试时:

https://www.landgrey.me/redirect.php?url=https://auth.landgrey.me/jump.do?url=evil.com

中间部分加入自己要跳转的url地址,后缀仍然使用白名单限制的域名地址;
在这里插入图片描述




漏洞测试:pikachu漏洞练习平台

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

url没有任何限制策略,直接跳转目标地址;
在这里插入图片描述

5. 漏洞发生:

  1. 用户登录、统一身份认证处,认证后
  2. 用户分享、收藏内容
  3. 跨站点认证、授权
  4. 站内点击其它网址链接

防护方法:

  1. 代码固定跳转地址,不让用户控制变量
  2. 跳转目标地址采用白名单映射机制
    比如1代表auth.landgrey.me,2代表www.landgrey.me,其它不做任何动作
  3. 合理充分的校验校验跳转的目标地址,非己方地址时告知用户跳转风险之所以会出现跳转 URL 漏洞,就是因为服务端没有对客户端传递的跳转地址进行合法性校验;

所以,预防这种攻击的方式,就是对客户端传递过来的跳转 URL 进行校验。

常用的方式:(配置白名单)

服务端配置跳转白名单或域名白名单,只对合法的 URL 做跳转,所有跳转的URL都要加上一次验证参数,保证不会跳转到未授权的URL即可。


6. 漏洞总结:

理论上讲,url跳转属于CSRF的一种,我们需要对传入的URL做有效性的认证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括:

<1>referer的限制如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接。

<2> 加入有效性验证Token我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。



参考大佬博客:

https://blog.csdn.net/qq_35569814/article/details/100569909

https://blog.csdn.net/weixin_39157582/article/details/86682900

### 奇安信产品中的重定向漏洞及其修复方案 对于奇安信产品中存在的重定向漏洞,解决这一问题的核心在于严格控制和过滤用户输入的数据。当应用程序接收到用户的请求并准备执行重定向操作时,应当对目标URL进行全面的安全检查[^1]。 #### 输入验证与编码 为了防止恶意链接通过重定向功能传播,建议实施严格的输入验证机制。这不仅限于简单的黑名单匹配,更应该采用白名单的方式允许特定模式的URL通过。此外,在构建最终用于浏览器解析的实际URL之前,应利用`encodeURIComponent()`或其他合适的转义方法来处理所有动态部分,从而避免非法字符注入到地址栏中造成意外行为。 #### 配置安全策略 除了前端层面的努力外,服务器端也需要配置适当的安全措施。例如设置HTTP头部参数如`Content-Security-Policy` (CSP),它可以定义哪些资源是可以加载以及如何交互;启用HTTPS协议确保数据传输过程中的安全性;定期更新依赖库版本以修补已知的安全缺陷等[^2]。 #### 用户教育与意识培养 提高开发人员和技术支持团队成员对这类风的认识同样重要。他们需要了解最新的威胁趋势,并掌握有效的防御手段。同时也要提醒终端使用者警惕来自不可信任源点发出的链接邀请,即使这些看起来像是由合法网站产生的正常跳转动作也需谨慎对待[^3]。 ```python # Python 示例:使用 urllib.parse 对 URL 进行编码 from urllib.parse import quote_plus, urlparse def safe_redirect(url_param): parsed_url = urlparse(url_param) # 只接受 http 或 https 协议下的相对路径作为有效目的地 if not parsed_url.scheme or parsed_url.scheme in ['http', 'https']: encoded_path = quote_plus(parsed_url.path) return f"{parsed_url.scheme}://{parsed_url.netloc}{encoded_path}" else: raise ValueError("Invalid redirect target.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值