1、概念:
开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。URL形如:
https://example.com/login?return=https://mysite.com/,后端代码形如:
response.sendRedirect(request.getParameter("url"))。
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黑名单);
高级利用方法(配合其他功能/漏洞)。
利用姿势不局限于上述几种,不要思维定势,具体看下面的实例。