URL跳转漏洞学习

本文详细介绍了开放重定向漏洞(CWE-601),包括漏洞的定义、重定向类型、漏洞原理、产生原因、危害、挖掘技巧、绕过方法和修复措施。重点强调了参数可控导致的安全风险,并列举了多种可能的绕过策略,如问号绕过、路径和点的利用、@符号绕过等。同时,提出了白名单限制、POST参数中的URL跳转等防御方法。
摘要由CSDN通过智能技术生成

漏洞简介


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修改为攻击者构造的恶意页面,达到钓鱼或者窃取敏感信息等目的。

漏洞产生原因


先贴一张图,网上各篇文章对这个漏洞的原因基本都是这么说的

img

但我觉得最主要的原因还是参数可控,然后服务端又没有对用户输入进行过滤和验证。

那么以下是我收集到的一些可能存在漏洞的参数名称:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Restart222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值