前言
挺早之前就已经看到这个漏洞了,一直拖到现在才学,本人菜鸡一只,如有错误欢迎各位师傅批评指正
漏洞简介
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.使用白名单
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