漏洞简介
URL跳转漏洞,也叫开放重定向漏洞(open redirect) 。CWE-601对该漏洞的描述为:http 参数可能包含一个 URL 值,并可能导致 Web 应用程序将请求重定向到指定的 URL。通过修改恶意站点的 URL 值,攻击者可能成功发起网络钓鱼诈骗并窃取用户凭据。简单说来就是参数可控导致的漏洞产生。
重定向的相关知识
首先需要了解重定向的类型
1.永久重定向
这种方式表示原URL不应再被使用,应该优先选用新的URL。相关的状态码为301(Moved Permanently)、308(Permanent Redirect)
2.临时重定向
有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。相关状态码为302(Found)、303(See Other)、307(Temporary Redirect)
3.特殊重定向
这种方式的状态码为300(Multiple Choice)、304(Not Modified)。
300是手工重定向,用户自行选择web页面展示的重定向链接列表。
304会使页面跳转到本地陈旧的缓存版本当中。
重定向的方法
1.HTTP协议的重定向
也就是上面所说的那些状态码
2.使用HTMl的meta元素进行重定向
<head>
<meta http-equiv="Refresh" content="0; URL=http://example.com/" />
</head>
这个方式仅适用于html页面
3.借助DOM的js重定向
window.location = "http://example.com/";
这种方法只能在支持js的客户端使用
漏洞原理
说完了重定向的相关知识,现在来说说漏洞的原理。简单来说就是在网页进行重定向的时候,将重定向的目的url修改为攻击者构造的恶意页面,达到钓鱼或者窃取敏感信息等目的。
漏洞产生原因
先贴一张图,网上各篇文章对这个漏洞的原因基本都是这么说的
但我觉得最主要的原因还是参数可控,然后服务端又没有对用户输入进行过滤和验证。
那么以下是我收集到的一些可能存在漏洞的参数名称:
redirect
redirect_to
redirect_url
redirectUrl
callback
toUrl
fromUrl
request
oauth_callback
url
go
jump
jump_to
target
service
to
returnUrl
goTo
link
linkto
domain
return
locationUrl
r_url
漏洞危害
1.获取用户权限(伪造钓鱼网站、窃取登录凭证token)
2.绕过检测(窃取CSRF token,绕过SSRF、RCE黑名单)
3.和xss、csrf等漏洞组合扩大危害
挖掘技巧
1.谷歌语法
用inurl:{参数名},可以找出可能存在漏洞的页面,然后进行进一步测试。
2.黑盒测试
黑盒测试的话,除了用上面的谷歌语法,还需要我们留意网站跳转的地方。那么根据常识经验以及我的一些收集整理,这里给出可能存在漏洞的一些功能点:
- 用户登录、统一身份认证处
- 用户分享、收藏内容处
- 跨站点认证、授权后
- 站内点击其它网址链接时
- 注册、注销、修改密码处
- 账号切换、保存设置处
3.白盒审计
如果是审计代码,那么下面给出的是我收集的不同语言可能产生漏洞的地方
java
response.sendRedirect(request.getParameter("url"));
PHP
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);
.NET
string url = request.QueryString["url"];
Response.Redirect(url);
Rails
redirect_to params[:url]
Django
redirect_url = request.GET.get("url")HttpResponseRedirect(redirect_url)
Flask
redirect\_url = request.form\['url'\] redirect(redirect\_url)
4.fuzz测试
可以用下面提供的payload进行测试,注意使用的时候需要修改一下相关url
https://github.com/cujanovic/Open-Redirect-Payloads/blob/master/Open-Redirect-payloads.txt
绕过方式
转载自https://www.cnblogs.com/gorillalee/p/14351069.html
1.问号绕过
格式:http://www.aaa.com/bbb?url=http://ccc.com?aaa.com
注意:一定要带上aaa.com
跳转后的url是http://ccc.com?aaa.com
2.利用反斜杠和正斜杠和点绕过
正斜杠
格式1:http://www.aaa.com/bbb?url=http://ccc.com/aaa.com
反斜杠
格式2:http://www.aaa.com/bbb?url=http://ccc.com\aaa.com
" . ":
格式3:http://www.aaa.com/bbb?url=http://ccc.com.aaa.com
3.利用@绕过
格式:http://www.aaa.com/bbb?url=http://aaa.com@ccc.com
4.利用白名单缺陷绕过
白名单的限制往往是不全面的。
例如该网站想跳转到自己的内部页面,而只检查跳转url中有没有白名单的内容。那么:http://www.aaa.com/bbb?url=http://cccaaa.com
购买cccaaa.com的域名,这样也是可以绕过的。
5.多重验证&跳转绕过
现在很多网站都有多重验证,比如你登陆账户后会出现另一个验证页面,输入手机验证码进行验证,此时这上面的URL很可能存在任意跳转的问题。
比如http://www.aaa.com/acb?Url=http: … ttp://login.aaa.com
当然,还有多重的,结构的多重跳转你修改最后面的URL就可以达到任意URL跳转,中间的URL就没必要动了。
6.点击触发实现绕过
很多登陆页面的地方,其URL是一个跳转的URL
如某一个登录页面,修改url:http://www.aaa.com/bbb?url=http://ccc.com
登录用户,有可能触发。
7.利用xip.io绕过
格式:http://www.aaa.com/bbb?url=http://www.aaa.com.ccc.com.xip.io
但是没有成功,暂且保留。
8.利用超链接绕过可信站点限制
比如一个URL,它是可以直接跳转的,但是一般测试跳转时大家习惯用www.baidu.com或qq.com这样的可信站点进行测试,但是有些网站是可以跳转这些网站的。
只要是可信站点且常用,基本都可以跳转,那么这就属于正常的业务逻辑了,难度就这样错失一个URL跳转漏洞了?
其实不然,只要你的URL被百度收录过,那么直接搜索你的域名,site:xxx.xxx
因为你在百度里点击你的域名,它会先是一个302跳转,而这个302跳转就是百度下的302跳转,那么这样就可以绕过可信站点的限制,从而达到跳转到指定URL。
当然,百度这个302有点长,你给它进行加密就行。
利用百度缓存链接,在其上再进行跳转
9.POST参数中的URL跳转
常见于上传图片、头像处。如果过滤不严,将会把图片的完整地址包含在POST参数里,这里我们修改其地址为ccc.com。
由于修改了地址,图片就会显示不出来,右键查看图片,就会触发URL跳转(可以配合其他绕过方式)
如果POST参数里就只是URL跳转参数,那么你可以给它转成GET方式,然后进行跳转就可以了,只要网站支持这样的GET方式就行。在Burp Suite里可以一键转换提交方式,右键选择Change request method就可以!
10.利用#号绕过
格式:http://www.aaa.com/bbb?url=http://ccc.com#aaa.com
11.其他绕过思路
1. 跳转到IP地址,而不是域名;
2. 跳转到IPV6地址,而不是IPv4地址;
3. 将要跳转到的IP地址用10进制、8进制、16进制形式表示;
4. 更换协议,使用ftp、gopher协议等;
5. 借鉴SSRF漏洞绕过的tricks;
6. CRLF注入不能xss时,转向利用任意URL跳转漏洞;
修复方式
1.使用白名单
2.在可能的情况下,让用户提供在服务器端映射到完整目标 URL 的短名称、ID 或令牌
3.不允许将 URL 作为目标的用户输入
4.如果无法避免用户输入,请确保提供的值有效、适用于应用程序,并且已为用户授权
5.从应用程序中删除重定向功能,并将指向它的链接替换为指向相关目标 URL 的直接链接
总结
以上就是关于url跳转漏洞的一些相关内容。这个漏洞是属于比较好理解的,适合刚入门的新手学习。这个漏洞本身是低危的,当在渗透测试时如果发现存在这个漏洞的时候,不妨看看有没有机会和其他漏洞配合扩大攻击。
参考链接
- https://cwe.mitre.org/data/definitions/601.html
- https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections
- https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html
- https://landgrey.me/open-redirect-bypass/
- https://portswigger.net/kb/issues/00500100_open-redirection-reflected
- https://cloud.tencent.com/developer/article/1516344
- https://www.cnblogs.com/gorillalee/p/14351069.html