URL跳转漏洞(URL重定向漏洞),跳转漏洞一般用于钓鱼攻击。
https://link.zhihu.com/?target=https://edu.lagou.com/
原理:
URL跳转漏洞本质上是利用Web应用中带有重定向功能的业务,将用户从一个网站重定向到另一个网站。其最简单的利用方式为诱导用户访问http://www.aaa.com?returnUrl=http://www.evil.com,借助www.aaa.com让用户访问www.evil.com,这种漏洞被利用了对用户和公司都是一种损失。
(1)登录功能一直是URL跳转漏洞的重灾区,用户访问网站某个业务,当涉及到账号角色权限的时候一定需要跳转到登陆界面,为了确保用户体验认证结束之后需要自动返回用户之前浏览的页面。这一去一回之间就产生了URL跳转漏洞的隐患。
举个例子,比如用户正在访问http://www.aaa.com/detail?sku=123456的商品,添加购物车时触发登录操作,跳转到统一登陆认证页面进行登录,这时的访问链接为http://login.aaa.com?returnUrl=http://www.aaa.com/detail?sku=123456,认证成功之后浏览器继续返回商品详情页面方便用户进行购买操作。若login.aaa.com对returnUrl参数检查不严格甚至未检查,通过该链接可跳转至任意网站。
登录之后302跳转到百度首页,此处returnUrl未进行任何检查,可任意跳转到第三方页面。与登录功能同理,网站的退出功能同样存在URL跳转漏洞的风险。其他类似的跳转功能还有短信验证码认证之后跳转、分享或者收藏之后跳转、给第三方授权之后跳转,他们的共同特点都是从一个页面为了某种操作进入另一个页面,操作之后返回原页面继续浏览。有的多步操作业务中,点击下一步按钮时会传递fromUrl参数,该参数会成为返回上一步的超链接,如下所示:
甚至有的业务中callback参数也存在URL跳转漏洞。常见的参数值有return、redirect、url、jump、goto、target、link等,平时挖漏洞的过程中不妨关注下请求中是否含有比较完整的URL地址,对该类参数进行下测试。
(2)如果 lagou.com 下的某个 web 应用程序存在这个漏洞,恶意攻击者可以发送给用户一个 lagou.com 的链接,但是用户打开后,却来到钓鱼网站页面,将会导致用户被钓鱼攻击,账号被盗,或账号相关财产被盗。
(3)漏洞发生的场景:
(4)漏洞出现的原因:
(5)常见的参数名
后面假设源域名为:www.abc.com 要跳转过去的域为:www.evil.com (钓鱼)
(1)无任何检查,直接跳转
- //获取参数
- String url = request.getParameter("returnUrl");
- //重定向
- response.sendRedirect(url);
(2)域名字符串检测欺骗,代码不完善,存在漏洞
- //获取参数
- String url = request.getParameter("returnUrl");
- //判断是否包含域名
- if (url.indexOf("www.abc.com ") !=-1){
- response.sendRedirect(url);
- }
http://www.abc.com?returnUrl=http://www.abc.com.evil.com
http://www.abc.com?returnUrl=http://www.evil.com/www.abc.com
(3)bypass方式
http://www.aaa.com?returnUrl=http://www.aaa.com.evil.com
http://www.aaa.com?returnUrl=http://www.evil.com/www.aaa.com
若再配合URL的各种特性符号,绕过姿势可是多种多样。比如
利用问号?:
http://www.aaa.com?returnUrl=http://www.evil.com?www.aaa.com
利用反斜线:
http://www.aaa.com?returnUrl=http://www.evil.comwww.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
http://www.aaa.com?returnUrl=http://www.evil.com#www.aaa.com?www.
aaa.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
限制referer、添加token,这样可以避免恶意用户构造跳转链接到处散播,修复该漏洞最根本的方法还是上述的严格检查跳转域名。