URL跳转漏洞挖掘

admin 2023年12月23日10:40:21评论18 views字数 4478阅读14分55秒阅读模式

1、概念

开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转URL变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信站点跳转出去,用户会比较信任。

URL跳转漏洞挖掘

注:本文中www.xxx.com和www.evil.com均非真实网站,只是举个例子

2、漏洞原理

URL跳转三种实现方式:

  • META标签内跳转
  • javascript跳转
  • header头跳转

观察响应包,每种跳转方式对应的漏洞和利用方法也不同。

漏洞产生原因:

  1. 代码层忽视URL跳转漏洞,或不知道/不认为这是个漏洞;
  2. 代码层过滤不严,用取子串、取后缀等方法简单判断,代码逻辑可被绕过;
  3. 对传入参数操作(域名剪切/拼接/重组)和判断不当,导致绕过;
  4. 原始语言自带的解析URL、判断域名的函数库出现逻辑漏洞或者意外特性;
  5. 服务器/容器特性、浏览器等对标准URL协议解析处理等差异性导致被绕过;

3、漏洞危害

URL跳转漏洞本身属于低危漏洞,但可以结合其他漏洞加以深入利用,主要的利用方式不仅限于钓鱼攻击,包括:

  • xss漏洞:通过javascript:alert(0)CRLF
  • 获取用户权限(伪造钓鱼网站、窃取登录凭证token);
  • 绕过检测(窃取CSRF token,绕过SSRF、RCE黑名单);
  • 高级利用方法(配合其他功能/漏洞)。

利用姿势不局限于上述几种。

如何挖掘url跳转漏洞-业务场景

1、登录退出授权认证

2、业务完成处(注册找回密码充值绑定银行卡某业务办理404跳转)

3、用户交互处(评论问卷分享收藏点击站内链接或其他用户)

4、漏洞构造漏洞 (任意上传后的html,引用其跳转)

5、跨站点认证、授权后,会跳转

6、浏览器或页面的返回,基于referer,可以尝试修改

7、登录处小技巧
1登录:http://www.xxx.com/login/?url=http://www.evil.com
2退出:http://www.xxx.com/logout/?url=http://www.evil.com
3尝试把 login 改为 logout

8、跳转目录的,
1https://www.xxx.com/?redirect=/user/info.php
2修改为
3https://www.xxx.com/[email protected]

这种情况通常@也可以跳转,大胆的去尝试


9、点击触发达到绕过URL跳转限制
1https://www.xxx.com/?redirect=/user/info.php
2修改为
3https://www.xxx.com/[email protected]

这种情况通常@也可以跳转,大胆的去尝试 1234

比如很多登陆页面的地方,其URL是一个跳转的URL 如:
http://www.xxx.com/acb?Url=http://www.evil.com
你直接修改了后面为任意URL,但是还是停留在原地,似乎没什么问题,但是,当你输入账号和密码后点击登陆按钮后,就会触发跳转。

当然,这个账户和密码不一定要对的,随便都可以,但得视系统而定吧。这个我遇到了很多,比如你修改了域名,然后点击登陆,登陆成功后便可触发跳转,这也是一个比较隐蔽的绕过URL限制的跳转。


10、POST参数中的URL跳转

当然,这个影响就很小了,比如当你填什么表格或者需要填写什么的
当你上传图片,点击下一步的时候,通常下一步就是预览你填写的信息,最后才是提交。

举个例子,当你上传了图片后点击下一步抓包,如果过滤不严,你会
看到图片的完整地址包含在POST参数里,你就可以直接修改这个地址为任意URL,然后到达下一步。这时是确定信息也就是预览自己填写的信息的正确还是不正确,由于你刚刚修改了图片地址,这里是没有显示出来的,图像会是一个小XX。
(当点击图片右键选择查看图像时,就会触发URL跳转问题,其实这个也可以利用来进行钓鱼,钓后台审核员的信息。)
为什么呢,比如审核看到图片无法加载,一般都会点击查看图片,然后跳转,如果安全意识不知就会造成安全影响。当然,如果POST参数里就只是URL跳转参数,那么你可以给它转成GET方式,然后进行跳转就可以了,只要网站支持这样的GET方式就行。在Burp Suite里可以一键转换提交方式,右键选择Change request method就可以!

Fuzz

根据这些点我们可以考虑利用fuzz来对其进行探查出跳转漏洞
fuzz中理解为分 2 种

  1. 盲 fuzz 来找跳转参数
  2. 针对性找跳转参数

常见的参数名

收集了一些常见的跳转参数名

 1redirect
 2url
 3redirectUrl
 4callback
 5return_url
 6toUrl
 7ReturnUrl
 8fromUrl
 9redUrl
10request
11redirect_to
12redirect_url
13jump jump_to
14target
15to
16goto
17link
18linkto
19domain
20oauth_callback
21Out
22Dout
23goreturn
24returnTo
25logout
26register
27login
28path
29redirectURI
30redir
31returl
32share
33wap
34src
35source
36u
37display
38sourceURl
39imageURL
40linkurl
41service
42redirect_uri
43destUrl
44oauth
45r_url
46returnUri
47locationUrl
48qurl
49data
50ext
51clickurl
52next
53callback_url
54jump_url
55click?u
56originUrl
57sp_url
58rit_url
59forward_url
60forward success
61recurl
62j?url
63uri
64allinurl
65q
66linkAddress
67location
68pic
69burl
70backurl
71origin
72page
73u1
74action
75action_url
76dest

白盒代码审计参考

几种语句和框架版本常见的URL跳转代码如下,可用作白盒代码审计参考:

Java:

1response.sendRedirect(request.getParameter("url"));

PHP:

1$redirect_url = $_GET['url'];
2header("Location: " . $redirect_url);

.NET:

1string redirect_url = request.QueryString["url"]; 
2Response.Redirect(redirect_url);

Django:

1redirect_url = request.GET.get("url")
2HttpResponseRedirect(redirect_url)
3Flask: redirect_url = request.form['url']
4redirect(redirect_url) Rails: redirect_to params[:url]

Flask:

1redirect_url = request.form['url']
2redirect(redirect_url)

Rails:

1redirect_to params[:url]

URL跳转漏洞bypass总结

tips:URL跳转绕过方式类似SSRF,可以参考SSRF的bypass方式

另外有两个小技巧

  1. 校验目录 可能会校验某个路径的目录
  2. 可能需要登录
 1|@www.evil.com
 2/www.evil.com
 3//www.evil.com
 4///www.evil.com
 5////www.evil.com
 6www.evil.com
 7\www.evil.com
 8\www.evil.com
 9\\www.evil.com
10/www.evil.com
11@www.evil.com
12?www.evil.com
0x01:利用"@"符号绕过
1http://[email protected]
0x02:利用"?"号绕过
1http://www.xxx.com?www.evil.com
0x03:利用"#"符号绕过
1http://www.xxx.com#www.evil.com
0x04
1http://www.xxx.com/www.evil.com
0x05
1http://www.baidu.comwww.evil.com
0x06:利用"."绕过
1http://www.xxx.com.evil.com
2http://xxx.com.evil.com
3
4https://www.xxx.com/redirect.php?url=.evil

(可能会跳转到evil.com域名,也可能会跳转到www.xxx.com.evil域名)

0x07:xip.io绕过
1http://www.xxx.com.<替换IP地址>.xip.io
0x08利用白名单缺陷绕过限制
1evil.com #百度找一个黄网跳转证明危害

或者比如,当跳转的域名包含这个网站下的所有域名,比如:http://www.xxx.com/acb?Url=http://login.xxx.com.这个login.xxx.com也可以改成xxx.com同样可以跳转对吧

因为白名单里只要有包含这个域名就直接成功跳转。那么当我在这个域名前面加上如testxxx.com,白名单里会检查是否包含xxx.com这个域名,如果包含,就直接跳转,而并没有检查这个域名的整个信息,然后可以利用这个问题,直接注册一个testxxx.com这个域名,就可以利用这个跳转。

0x09:利用超链接多重验证绕过可信站点限制

比如一个URL,它是可以直接跳转的,但是一般测试跳转时大家习惯用 www.baidu.comqq.com这样的可信站点进行测试,但是有些网站是可以跳转这些网站的。


只要是可信站点且常用,基本都可以跳转,那么这就属于正常的业务逻辑了,难道就这样错失一个URL跳转漏洞了?

其实不然,只要你的URL被百度收录过,那么直接搜索你的域名,site:xxx.xxx因为你在百度里点击你的域名,它会先是一个302跳转,而这个302跳转就是百度下的302跳转,那么这样就可以绕过可信站点的限制,从而达到跳转到指定URL。
当然,百度这个302有点长,你给它进行加密就行。

插入截断字符
1%00 &0a %0d %07

其它绕过思路

其他思路:使用IP地址、IPv6地址、更换ftp、gopher协议

  1. 跳转到IP地址,而不是域名;
  2. 跳转到IPV6地址,而不是IPv4地址;
  3. 将要跳转到的IP地址用10进制、8进制、16进制形式表示;
1例如,baidu IP:183.232.231.172
2转16进制:b7 e8 e7 ac
3再转8进制:026772163654

URL跳转漏洞挖掘

原文始发于微信公众号(梅苑安全学术):URL跳转漏洞挖掘

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月23日10:40:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   URL跳转漏洞挖掘https://cn-sec.com/archives/2230213.html

发表评论

匿名网友 填写信息