网络安全防护:URL跳转漏洞

目录

1、概念

2、原理

3、漏洞类型与示例

3.1 服务端跳转

3.2 客户端跳转

3.3 伪协议跳转

4、攻击场景与危害

5、漏洞利用步骤

5.1 发现跳转点

5.2 绕过防御机制

6、防御措施

6.1 严格校验跳转目标

6.2 固定跳转路径

6.3 用户确认提示

6.4 技术层防护:白名单校验

6.5 其他建议

7、漏洞检测方法


1、概念

URL跳转漏洞(也称为开放重定向漏洞)是一种常见的Web安全漏洞,攻击者利用此漏洞诱使用户访问恶意网站,从而实施钓鱼攻击、恶意软件传播或窃取敏感信息。

2、原理

当Web应用将用户请求重定向到另一个URL时,若目标地址未经验证或未严格限制,攻击者可构造恶意URL,使应用将用户重定向至钓鱼网站或恶意页面。

关键点

  • 应用使用参数动态生成跳转目标(如 ?url=https://target.com)。

  • 跳转目标未校验来源或合法性(如未验证域名、协议)。

3、漏洞类型与示例

3.1 服务端跳转

302重定向:服务器返回302 Found + Location: 目标URL

GET /redirect?url=http://evil.com HTTP/1.1
Host: victim.com

服务器显示:

HTTP/1.1 302 Found
Location: http://evil.com

3.2 客户端跳转

JavaScript跳转:前端通过window.location<meta>标签跳转。

<script>
  window.location = "http://evil.com"; 
</script>

3.3 伪协议跳转

利用javascript:data:协议执行恶意代码(需用户交互)。

https://victim.com/redirect?url=javascript:alert(document.cookie)

4、攻击场景与危害

攻击类型危害描述
钓鱼攻击伪造登录页面窃取账号密码(如伪装成银行、邮箱登录页)。
恶意软件分发重定向至挂马页面,触发浏览器漏洞下载木马。
绕过安全策略利用受信任域名跳转至恶意站点,规避浏览器安全警告。
OAuth/SSO劫持在OAuth回调中注入恶意redirect_uri,窃取授权码或Token。
组合漏洞利用与XSS/CSRF结合,扩大攻击面(如通过跳转触发CSRF)。

使用场景举例

1> 登陆功能跳转

比如用户正在访问http://www.aaa.com/detail?sku=123456的商品,添加购物车时触发登录操作,跳转到统一登陆认证页面进行登录,这时的访问链接为http://login.aaa.com?returnUrl=http://www.aaa.com/detail?sku=123456,认证成功之后浏览器继续返回商品详情页面方便用户进行购买操作。若login.aaa.com对returnUrl参数检查不严格甚至未检查,通过该链接可跳转至任意网站。

常见的跳转场景:

1. 用户登录、统一身份认证处,认证完后会跳转
2. 用户分享、收藏内容过后,会跳转
3. 跨站点认证、授权后,会跳转
4. 站内点击其它网址链接时,会跳转
5. 业务完成后跳转
比如修改密码,修改完成后跳转登陆页面,绑定银行卡,绑定成功后返回银行卡充值等页面
比如评价系统,填写完问卷调查、客服评价等业务操作后跳转页面

2> 钓鱼链接

如果 aaa.com 下的某个 web 应用程序存在这个漏洞,恶意攻击者可以发送给用户一个 aaa.com 的链接,但是用户打开后,却来到钓鱼网站页面,将会导致用户被钓鱼攻击,账号被盗,或账号相关财产被盗。

5、漏洞利用步骤

5.1 发现跳转点

  • 查找包含 redirecturlnextreturn 等参数的URL。

  • 测试参数值修改为外部域名(如 ?url=http://attacker.com)。

高频跳转参数

参数名典型出现场景示例
redirect登录/退出后跳转?redirect=https://evil.com
url通用跳转参数?url=//attacker.com
next操作完成后跳转(如登录、支付)?next=/attacker-path
return返回原页面或指定页?return_url=http://phish.com
target指定跳转目标?target=javascript:alert(1)
to短路径跳转指示?to=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttps%2Fevil.com
rurlRedirect URL缩写&rurl=data:text/html,<h1>Malicious</h1>

易被忽略的隐藏参数

参数名特点绕过技巧
r缩写形式(常见于框架)?r=\\evil.com@victim.com
forward内部转发参数?forward=https:attacker.com
destDestination缩写?dest=%0d%0aLocation:http://evil.com
go短指令跳转?go=//evil.com/%23victim.com
jump前端跳转相关?jump=javascript:fetch('/steal-cookie')

5.2 绕过防御机制

# 域名白名单绕过
https://victim.com/redirect?url=https://attacker.com.victim.com  // 子域名欺骗
http://www.abc.com?returnUrl=http://www.evil.com/www.abc.com
http://www.aaa.com?returnUrl=http://www.evil.com?www.aaa.com    //利用问号?
http://www.aaa.com?returnUrl=http://www.evil.com\www.aaa.com    //利用反斜线
http://www.aaa.com?returnUrl=http://www.aaa.com@www.evil.com    //利用@符号
http://www.aaa.com?returnUrl=http://www.evil.com#www.aaa.com    //利用井号#

# 缺失协议
https://victim.com/redirect?url=//attacker.com
http://www.aaa.com?returnUrl=/www.evil.com

# 编码混淆
https://victim.com/redirect?url=%68%74%74%70%3a%2f%2f%65%76%69%6c%2e%63%6f%6d  // Hex编码

# 多次次跳转,即aaa公司信任ccc公司,ccc公司同样存在漏洞或者提供跳转服务
http://www.aaa.com?returnUrl=http://www.ccc.com?jumpto=http://www.evil.com

6、防御措施

6.1 严格校验跳转目标

  • 白名单机制:仅允许跳转至预定义的信任域名列表。

  • 拒绝外部域名:禁止重定向到非当前域名及其子域名。

6.2 固定跳转路径

  • 使用映射ID代替完整URL(如 ?page_id=2 → 映射到 /home)。

6.3 用户确认提示

6.4 技术层防护:白名单校验

// Java示例:白名单校验
private static final List<String> ALLOWED_DOMAINS = Arrays.asList("trusted.com", "victim.com");

public String safeRedirect(String url) {
    URI uri = new URI(url);
    if (!ALLOWED_DOMAINS.contains(uri.getHost())) {
        return "/error"; // 默认安全页面
    }
    return url;
}

6.5 其他建议

  • 避免前端跳转参数暴露(如通过Session存储目标URL)。

  • 使用Content-Security-Policy: frame-ancestors 'self'防止嵌套恶意页面。

7、漏洞检测方法

  • 手动测试

    • 修改跳转参数值为外部域名,观察是否成功跳转。

    • 尝试%00%0d%0a等特殊字符绕过校验。

TOP 3 危险参数redirecturlnext(占漏洞报告的70%+)

最易忽略参数rjumpdest(常见于老旧系统)

最高危值类型javascript:data://外部域名(可直接触发攻击)

  • 自动化工具

    • 使用Burp Suite、ZAP扫描包含跳转参数的请求。

    • 编写脚本批量测试参数(如使用ffufgolang工具)。

使用工具(如 Burp Intruder)对以下列表进行爆破:

["redirect", "url", "next", "return", "target", "rurl", "callback", "jump", "forward", "go", "to", "uri", "path", "page", "checkout_url", "success_path"]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熙客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值