Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >浅谈url跳转漏洞与示例

浅谈url跳转漏洞与示例

作者头像
用户11001086
发布于 2024-08-26 14:22:24
发布于 2024-08-26 14:22:24
22200
代码可运行
举报
运行总次数:0
代码可运行

文章源自【字节脉搏社区】-字节脉搏实验室

作者-Beginners

0x01 浅谈Url跳转漏洞

第一步,Url跳转漏洞是怎么产生的:

由于越来越多的需要和其他第三方应用交互,以及在自身应用内部根据不同的逻辑将用户引向到不同的页面,譬如一个典型的登录接口就经常需要在认证成功之后将用户引导到登录之前的页面,整个过程中如果实现不好就可能导致一些安全问题,该漏洞像XSS一样有多种绕过方式,防御过程中也常出现意想不到的情况,特定条件下可能引起严重的安全漏洞。

0x02 Url跳转漏洞的危害:

1.常被用黑产利用进行钓鱼、诈骗等目的。

2.突破常见的基于“白名单方式”的一些安全限制。

3.通过跳转收集数据之后再进一步挖掘更深层的漏洞。

0x03 Url跳转漏洞常见出现点:

1.用户登录、统一身份认证处,认证完后会跳转。

2.用户分享、收藏内容过后,会跳转。

3.跨站点认证、授权后,会跳转。

4.站内点击其它网址链接时,会跳转。

0x04 Url跳转漏洞常见的参数名:

代码语言:javascript

复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url=
login=
redirect_to=
qurl=
logout=
data=
ext=
clickurl=
jump_to=
next=
to=
goto=
callback_url=
jump=
jump_url=
return=
click?u=
originUrl=
Redirect=
sp_url=
service=
redirect_url=
redirect=
rit_url=
forward_url=
callback=
forward=
success=
recurl=
j?url=
uri=
u=
allinurl=
q=
link=
src=
tc?src=
linkAddress=
location=
go=
pic=
burl=
request=
backurl=
RedirectUrl=
ReturnUrl=
origin=
Url=
desturl=
page=
u1=
action=
action_url=
target=
linkto=
domain=
dest=

0x05 Url跳转漏洞绕过:

1.利用问号绕过限制:

http://www.aaa.com/?url=http://www.baidu.com?http://login.aaa.com

2.利用@符号绕过限制:

http://www.aaa.com/?url=http://login.aaa.com@www.baidu.com

3.利用#符号绕过限制:

http://www.aaa.com/?url=http://www.baidu.com#login.aaa.com

4.利用/绕过限制:

http://www.aaa.com/?url=http://www.baidu.com/login.aaa.com

5.利用\绕过限制:

http://www.aaa.com/?url=http://www.baidu.com\login.aaa.com

(不允许超链 自行复制)

6.利用\\绕过限制

http://www.aaa.com/?url=http://www.baidu.com\\login.aaa.com

不允许超链 自行复制)

7.利用\.绕过限制:

http://www.aaa.com/?url=http://www.baidu.com\.login.aaa.com

不允许超链 自行复制)

8.利用缺失协议绕过限制:

http://www.aaa.com/?url=/www.baidu.com

http://www.aaa.com/?url=//www.baidu.com

9.利用”.”绕过限制:

http://www.aaa.com/?url=.www.baidu.com

10.利用跳转文件绕过

http://axomlfz.cn:81/tz.html

0x06 修复方式

1.我们需要对传入的URL做有效性的验证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括。

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

防止url篡改

Web项目聚集地

图文教程,技术交流

如图,是我们模拟的一个从浏览器发送给服务器端的转账请求。久一的ID是 web_resource,正在操作100元的转账。

再如图,因为是通过浏览器 `url` 访问服务,这个时候金额被篡改成了 200,那么服务器接受到了200,直接扣除了200怎么解决?这就是本文要讲解的内容。

防止url被篡改的方式有很多种,本文就讲述最简单的一种,通过 secret 加密验证。

道理很简单,服务器接收到了 price 和 id,如果有办法校验一下他们是否被修改过不就就可以了吗?

那么我们传递的时候增加一个参数,叫做sign,sign是使用用户不可见的一个secret和price、id组合加密获得,然后传递给服务器端。当服务器端接收到请求的时候,获取到price、id,通过同样的secret加密和sign比较如果相同就通过校验,不同则被篡改过。

那么问题来了,如果参数特别多怎么办?

所以通用的做法是,把所有需要防止篡改的参数按照字母正序排序,然后顺序拼接到一起,再和secret组合加密得到 sign。具体的做法可以参照如下。

代码语言:javascript

复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public static String generateSign(Map<String, String> parameters) {
    try {
        List<String> names = new ArrayList<>();
        parameters.forEach((k, v) -> {
            if (v != null && !Objects.equals(v, "") 
                && !Objects.equals(k, "sign")) {
                names.add(k);
            }
        });

        List sortedNames = names.stream().sorted()
            .collect(Collectors.toList());
        StringBuffer sb = new StringBuffer();
        sortedNames.forEach(n -> 
            sb.append(String.format("%s=%s", n, parameters.get(n))));
        String sign = md5(sb.toString());
        return sign;
    } catch (Exception e) {
        return "";
    }
  }

  private static String md5(String inputString)
       throws NoSuchAlgorithmException, UnsupportedEncodingException {

    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(inputString.getBytes("UTF-8"));

    byte[] digest = md.digest();

    return convertByteToHex(digest);
  }

  private static String convertByteToHex(byte[] byteData) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < byteData.length; i++) {
        sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16)
        .substring(1));
    }
    return sb.toString();
  }

generateSign 就是所有需要加密的参数,包括secret

有的同学担心,那么他万一猜到了我的加密算法怎么办,这个不用担心,你的secret是保持在服务器端的,不会暴漏出去的,所以他知道了算法也不会知道具体加密的内容。

那么问题又来了,如果小明通过抓包工具获取到了URL,他是不是可以无限制的访问这个地址呢?那就出现了“久一”的钱被一百一百的转空了。

那可怎么办?这里涉及到了另一个话题,接口的幂等,我们后面会详细讲解怎么通过幂等控制重复扣款。这里我们要讲解的是怎么控制 URL 失效。

这里又有一个通用的做法,就是再添加一个参数 timestamp。对的,就是当前的时间戳。服务器获取到 timestamp 以后检验一下是否在5分钟以内,如果不是直接返回请求失效就可以了?那么如果timestamp 被篡改了呢?不会的,因为我们按照上面的做法同样对 timestamp 做了加密防止篡改。

最简单的校验接口被篡改的方式,你学会了吗?

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅谈Url跳转漏洞
由于越来越多的需要和其他第三方应用交互,以及在自身应用内部根据不同的逻辑将用户引向到不同的页面,譬如一个典型的登录接口就经常需要在认证成功之后将用户引导到登录之前的页面,整个过程中如果实现不好就可能导致一些安全问题,该漏洞像XSS一样有多种绕过方式,防御过程中也常出现意想不到的情况,特定条件下可能引起严重的安全漏洞。
字节脉搏实验室
2020/04/14
1.5K0
如何防止请求的URL被篡改
如图,是我们模拟的一个从浏览器发送给服务器端的转账请求。久一的ID是 web_resource,正在操作100元的转账。
用户1093975
2018/12/05
3.1K0
url跳转漏洞原理及绕过方式
0x01 url跳转原理及利用 0x02 url跳转bypass 0x03 url跳转修复
黑白天安全
2020/03/19
2.3K0
url跳转漏洞原理及绕过方式
分享几个绕过URL跳转限制的思路
大家对URL任意跳转都肯定了解,也知道他的危害,这里我就不细说了,过~ 大家遇到的肯定都是很多基于这样的跳转格式 http://www.xxx.xxx/xxx?xxx=http://www.
奶糖味的代言
2018/04/16
4.5K0
任意URL跳转漏洞修复与JDK中getHost()方法之间的坑
漏洞简单介绍:服务端未对传入的跳转URL变量进行检查和控制,导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击,通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息,或欺骗用户进行金钱交易。
京东技术
2019/05/05
2.3K0
任意URL跳转漏洞修复与JDK中getHost()方法之间的坑
URL跳转(开放重定向)挖掘技巧及实战案例全汇总
开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。URL形如:
Jayway
2019/09/29
17.4K0
URL跳转(开放重定向)挖掘技巧及实战案例全汇总
漏洞挖掘 - Url重定向
URL重定向的定义是指把一个目录或文件的访问请求转发到另一个目录或文件上,当用户发出相应的访问请求的时候,网页能跳转到指定的位置。
Khan安全团队
2021/08/26
4.4K0
漏洞挖掘 - Url重定向
Redirect攻击原理介绍和利用
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
全栈工程师修炼指南
2020/10/23
5.9K2
Redirect攻击原理介绍和利用
Web安全之业务逻辑漏洞
URL跳转也叫做重定向,301和302状态码都表示重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取。 301跳转是指页面永久性移走,通常叫做301跳转,也叫301重定向(转向) 302重定向又称之为暂时性转移,也被称为是暂时重定向。 产生原因:服务端未对传入的跳转 url 变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到 恶意网站。
全栈程序员站长
2022/09/05
1.8K0
Web安全之业务逻辑漏洞
前后端分离 , 如何保证接口安全性 ?
用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。
Jensen_97
2023/07/20
2.5K0
前后端分离 , 如何保证接口安全性 ?
网站渗透测试服务 域名跳转劫持漏洞
网站渗透测试是指在没有获得网站源代码以及服务器的情况下,模拟入侵者的攻击手法对网站进行漏洞检测,以及渗透测试,可以很好的对网站安全进行全面的安全检测,把安全做到最大化。在挖掘网站漏洞的时候我们发现很多网站存在域名跳转的情况,下面我们来详细的讲解一下。
技术分享达人
2019/05/24
3.5K0
简记siteserver远程模板下载Getshell漏洞
小明同学在某个神清气朗的周六接到来自上级的应急任务,本次任务详情为对某个网站黑链安全攻击事件进行溯源,找到攻击路径,找出幕后真凶,然而,一场意外的事情才刚刚开始……
FB客服
2019/03/08
2.9K0
简记siteserver远程模板下载Getshell漏洞
URL 跳转漏洞的利用技巧
URL跳转漏洞仅是重定向到另一个网址,如: https://www.example.com/?go=https://www.google.com/ 当我们访问这个url时,将从example.com
HACK学习
2019/08/05
4.8K0
利用url跳转漏洞冒充公安局官网的骚操作
刚刚发现了一个漏洞素材,在这里和大家分享一下漏洞以及被利用的用途,这个漏洞乍一看风险不大,实际上被有心人利用起来,非常的可怕,毕竟很少有人会怀疑警察叔叔。
用户1631416
2020/01/15
1.3K0
利用url跳转漏洞冒充公安局官网的骚操作
漏洞挖掘 | 单点登录的网站通过Referer盗取用户授权
最近参加了一个赏金计划,然后在单点登录中发现了一个涉及比较多站点的漏洞,测试过程比较有意思,所以分享一下。
HACK学习
2019/12/17
2.3K0
漏洞挖掘 | 单点登录的网站通过Referer盗取用户授权
逻辑漏洞总结
本篇文章是博主个人在网络学习时收集整理总结的笔记,在文章末尾已经标明参考原文的链接,有问题可以私聊整改。
LuckySec
2022/11/02
1.8K0
逻辑漏洞总结
看我如何窃取Messenger.com用户登录认证随机数并获得15000美元漏洞赏金
www.messenger.com是Facebook旗下即时通讯软件Messenger官网,该网站中添加了基于随机数认证( nonce based login )的Facebook登录服务,如果用户当前是Facebook登录状态,则可以直接以Facebook身份登录messenger.com。然而,由于随机数为用户生成了访问messenger.com的会话cookie,这种机制可能会让当前已登入的Facebook用户构造恶意随机数(nonce)和URL,使访问发生跳转。另外,在此过程中,由于当前的fac
FB客服
2018/02/24
2.6K0
看我如何窃取Messenger.com用户登录认证随机数并获得15000美元漏洞赏金
一文快速实现微信公众号支付功能(详细版,建议收藏备用)
微信支付实际上有很多种不同的类型,具体要使用哪一种就需要根据不同的应用场景来选择,官方给出的参考例子: 刷卡支付:用户打开微信钱包的刷卡的界面,商户扫码后提交完成支付。 公众号支付:用户在微信内进入商家H5页面,页面内调用JSSDK完成支付 扫码支付:用户打开"微信扫一扫“,扫描商户的二维码后完成支付 APP支付:商户APP中集成微信SDK,用户点击后跳转到微信内完成支付 H5支付:用户在微信以外的手机浏览器请求微信支付的场景唤起微信支付 小程序支付:用户在微信小程序中使用微信支付的场景
java进阶架构师
2019/01/02
5.8K0
Spring Security OAuth2.0实现
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
兜兜转转
2023/03/29
2.9K0
Spring Security OAuth2.0实现
微信公众号开发——2、微信网页开发
在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。
全栈程序员站长
2022/09/01
7.5K0
推荐阅读
相关推荐
浅谈Url跳转漏洞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档