URL跳转漏洞
漏洞简介
**URL跳转:**目前很多Web应用因为业务需要,需要与内部的其他服务或者第三方的服务进行交互,这样就需要重定向的功能,由当前网页跳转到第三方网页。
比如Java中可通过Header的重定向功能实现url的跳转
|
|
使用的时候就是:
|
|
**URL跳转漏洞:**也叫URL重定向漏洞。由于服务端未对传入的跳转url变量进行检查和控制,可导致恶意用户构造一个恶意地址,诱导用户跳转到恶意网站。因为是从用户可信站点跳转出去的,用户会比较信任该站点,所以其常用于用于钓鱼攻击,通过跳转到恶意网站欺骗用户输入用户名和密码来盗取用户信息,或欺骗用户进行金钱交易;还可以造成xss漏洞。
例子:
|
|
恶意用户可以提交:http://www.aaa.com/login.php?...://www.bbb.com(钓鱼网站)
来生成自己的恶意链接,安全意识较低的用户很可能会以为该链接展现的内容是www.aaa.com从而可能产生欺诈行为
产生位置
-
用户登录(最常见)、统一身份认证处,认证完后会跳转(在登陆的时候建议多观察url参数)
-
用户分享、收藏内容过后,会跳转
-
跨站点认证、授权后,会跳转
-
站内点击其它网址链接时,会跳转
-
在一些用户交互页面也会出现跳转,如请填写对客服评价,评价成功跳转主页,填写问卷,等等业务,注意观察url
-
业务完成后跳转这可以归结为一类跳转,比如修改密码,修改完成后跳转登陆页面,绑定银行卡,绑定成功后返回银行卡充值等页面,或者说给定一个链接办理VIP,但是你需要认证身份才能访问这个业务,这个时候通常会给定一个链接,认证之后跳转到刚刚要办理VIP的页面。
实现方式
|
|
漏洞检测
检测方法
修改参数中合法的URL为非法URL,然后查看是否能正常跳转或者响应是否包含了任意的构造URL。
常见产生漏洞的参数名
在黑盒测试时,需多留意关注常见的可能产生漏洞的参数名,可以用来fuzz:
|
|
URL跳转Bypass
1.最常用的:@绕过
|
|
2.绕过一些匹配特定字符
2.1 ?问号绕过
|
|
2.2 #绕过
|
|
3.斜杠/
绕过
|
|
反斜线\
绕过
|
|
4.白名单匹配绕过
|
|
5.xip.io绕过
|
|
6.白名单网站可信
|
|
7.协议绕过
|
|
8.xss跳转
|
|
代码审计
在白盒审计中,我们则会重点关注可以进行URL跳转的相关方法。
Spring MVC中使用重定向常用的方法
1.使用ModelAndView方式
2.通过返回String方式
3.使用sendRedirect方式
4.通过设置Header来进行跳转
常用关键字
根据以上常用方法,可以提取如下关键字:
|
|
其他关键字补充:
相关的参数名:
|
|
在审计中,我们就可以先搜索url跳转中常见的关键字,定位到可能存在问题的代码区域,并查看前后逻辑及参数是否可控…
漏洞修复
- 最有效的是,严格控制要跳转的域名。若已知需要跳转URL,则可以直接在代码中写成固定值
- 也可以使其只根据路径跳转,而不是根据其URL参数跳转
- 若url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验:即控制url是否是你们公司授权的白名单或者是符合你们公司规则的url
- XSS漏洞的注意事项 :跳转url检测中也加入了CRLF头部注入漏洞的检测逻辑, 具体就是在请求参数中加入了
%0d%0a
这种测试代码,需要对这些参数进行删除处理(事实上:在判断到一个参数中包含%00 -> %1f
的控制字符时都是不合法的,需对其进行删除)。 - 设置二次提醒,提醒用户