url跳转漏洞

url跳转漏洞

URL跳转漏洞的本质是利用web应用中带有重定向功能的业务,将用户从一个网站重定向到另一个网站。其最简单的利用方式为诱导用户访问http://www.aaa.com?returnUrl=http://www.evil.com,借助www.aaa.com让用户访问www.evil.com。
当黑客构造www.evil.com 是钓鱼页面时,用户就会毫不犹豫的点击进去,中了陷阱。跳转链接再配合一些诱惑文字,就可以使用户轻松上当。

漏洞出现点

以下5个地方

  1. 用户登录、统一身份认证处,认证完后会跳转
  2. 用户分享、收藏内容过后,会跳转
  3. 跨站点认证、授权后,会跳转
  4. 站内点击其它网址链接时,会跳转
    寻找url跳转漏洞,要思考哪些功能需要跳转。
    登录功能一直是url跳转漏洞的突破口,用户访问网站某个业务,当涉及到账号角色权限的时候一定要跳转到登录界面,为了确保用户体验认证结束之后需要自动返回用户之前浏览的页面,这一去一回之间就产生了url跳转漏洞的危害
    例子
    比如用户正在访问http://www.aaa.com/shop?sku=123456,认证成功之后浏览器继续返回商品详情页面方便用户进行购买操作。若login.aaa.com对returnUrl参数检查不严格甚至未检查。通过该链接可跳转至任意网站。
    在这里插入图片描述
    比如上图Url后面就跟着是跳转链接 返回包响应的是302跳转,就可以成功跳转到百度首页
    此处returnUrl未进行任何检查,可任意跳转到第三方页面。与登录功能同理,网站的退出功能同样存在URL跳转漏洞的风险。其他类似的跳转功能还有短信验证码认证之后跳转、分享或者收藏之后跳转、给第三方授权之后跳转,他们的共同特点都是从一个页面为了某种操作进入另一个页面,操作之后返回原页面继续浏览。有的多步操作业务中,点击下一步按钮时会传递fromUrl参数,该参数会成为返回上一步的超链接
    一般的java代码实现重定向功能
    是在代码中判断是否为目标域名,通常是用字符串包含来判断
    String url = request.getParameter(“returnUrl”);if(url.indexOf(“www.aaa.com”) !=1){response.sendRedirect(url);}
    PHP:
    $redirect_url = $_GET[‘url’];
    header("Location: " . $redirect_url);
    .NET:
    string redirect_url = request.QueryString[“url”];
    Response.Redirect(redirect_url);
    Django:
    redirect_url = request.GET.get(“url”)
    HttpResponseRedirect(redirect_url)
    Flask:
    redirect_url = request.form[‘url’]
    redirect(redirect_url)

Bypass方法

像这种直接判断是否为目标域名的检测是比较好绕过的
http://www.aaa.com?returnUrl=http://www.aaa.com.evil.com
http://www.aaa.com?returnUrl=http://www.evil.com/www.aaa.com
http://www.aaa.com?returnUrl=http://www.xxxaaa.com
最常用的一条
@绕过
http://127.0.0.1/url.php?username=1&redict=http://www.xiaozhupeiqi.com@www.baidu.com
?绕过
http://127.0.0.1/url.php?username=1&redict=http://www.baidu.com?www.xiaozhupeiqi.com
缺失协议:
http://www.aaa.com?returnUrl=/www.evil.com
http://www.aaa.com?returnUrl=//www.evil.com
多次跳转,即aaa公司信任ccc公司,ccc公司同样存在漏洞或者提供跳转服务:
http://www.aaa.com?returnUrl=http://www.ccc.com?jumpto=http://www.evil.com
实际挖掘过程中还可以将上述方法混合使用,甚至使用URL编码、ip地址替代域名等手段。上述介绍的挖掘姿势以GET请求为例,但其在POST请求中也同样适用。

当白名单匹配绕过
比如匹配规则是必须跳转,xiaozhupeiqi.com 域名下,?#等都不行的时候,如果匹配规则为xiaozhupeiqi.com,可以尝试百度inurl:xiaozhupeiqi.com的域名,比如
aaaxiaozhupeiqi.com,这样同样可以绕过。接下来实战中会用到
xip.io绕过
http://127.0.0.1/url.php?username=1&password=1&password=1&redict=http://www.xiaozhupeiqi.com.220.181.57.217.xip.io
.白名单网站可信
如果url跳转点信任百度url,google url或者其他,则可以多次跳转达到自己的恶意界面。
理想化方法
如果有机会在自己的页面设置url跳转,比如目标网站的bbs论坛自己的资料页面设置url跳转,既然是服务器的网站,那么url是不会限制的,可以用一个漏洞去构造另一个漏洞。
漏洞案例 分享
漏洞url :

https://xx.xxx.com/User/Login?redirect=http://xxx.com/
在这里插入图片描述

为登陆页面,如果登陆成功那么跳转http://xxx.com/,但是所有方式都无法绕过,但是发现可以跳转aaxxx.com,也就是匹配规则为必须为xxx.com的网址,但是aaxxx.com同样也可以。
2.@绕过

@是最常见的一种绕过。

漏洞url

https://xx.xxx.com/user/goToLogin?toUrl=https://xx.xxx.com@www.baidu.com
这种跳转在chrome浏览器可以直接跳转,但是在火狐会弹框询问,但是并不影响它的危害。

火狐下@的跳转。
在这里插入图片描述
还有一些是跳转目录的,

如:

https://xx.xxx.com.cn/?redirect=/user/info.php
修改为

https://xx.xxx.com.cn/?redirect=@www.baidu.com

.漏洞构造漏洞

一次渗透测试中碰到一个任意文件上传漏洞,但是不幸的是没办法解析任何后端语言,没办法进一步利用,只能前端造成一点危害,但是存放文件的服务器一般比较偏远,此时可以利用我们任意文件上传的html,然后来进一步利用,绕过本来无法绕过的url跳转漏洞。因为存放文件的域名肯定是符合网站跳转范围。
在这里插入图片描述
在这里插入图片描述
参考:https://xz.aliyun.com/t/5189
https://www.secpulse.com/archives/102918.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值