URL 重定向漏洞介绍
1. 概念
开放重定向(Open Redirect),也叫 URL 跳转漏洞,是指服务端未对传入的 URL 变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。
URL重定向的触发点常见于一些跳转参数处,例如:http://www.aaa.com/bbb?url=https://baidu.com
,如果成功跳转百度(或其他涉黄涉赌网站),说明url参数存在URL跳转漏洞。
2.URL跳转有四种实现方式
- a 标签跳转
- meta 标签内跳转
- JavaScript 跳转
- header 头跳转
3.漏洞产生原因
- 代码层忽视 URL 跳转漏洞,或不知道/不认为这是个漏洞。
- 代码层过滤不严,用去取子串、取后缀等方法简单判断,代码逻辑可以被绕过。
- 对传入参数操作(域名剪切/拼接/重组)和判断不当,导致绕过
- 原始语言自带的解析 URL,判断域名的函数库出现逻辑漏洞或者意外特性
- 服务器/容器特性、浏览器登对标准 URL 协议解析处理等差异性导致被绕过
4.漏洞等级
该漏洞本身是无法直接危害系统和用户安全的,按照通用漏洞定级标准: URL 跳转漏洞属于低危漏洞,但该漏洞可以结合其他漏洞加以深入利用,主要的利用方式不限于钓鱼攻击,在工信部远程检测工作中,该漏洞定义为高危。
5.漏洞危害
- 钓鱼攻击:攻击者可以利用URL重定向漏洞,在看似官方的网站上诱导用户访问涉黄涉赌非法网站、下载恶意软件或执行其他恶意操作等。
- 窃取用户信息:攻击者可以伪造一个看起来和原网站相似的假冒网站,诱使用户输入敏感信息,如用户名、密码、银行账户等,从而窃取用户的信息。
- XSS漏洞: 通过
javascript:alert(0)
或 CRLF; - 获取用户权限:伪造钓鱼网站、窃取登录凭证 token;
- 绕过检测:窃取 CSRF token, 绕过 SSRF, RCE 和名单
- 高级利用方法:配合其他功能 / 漏洞
6.URL重定向漏洞认定标准
- 可成功跳转至非法网站、白名单外网站或其他可实行钓鱼攻击、窃取信息等高危行为的仿冒网站。
- 是否需要做出除点击链接外的其他操作(如是否存在跳转确认页面等)实现URL重定向。
- 可以成功显示跳转页面内容。
- 数据包中响应状态码为301、302、307或308。
7.常见的URL跳转代码
Java:
response.sendRedirect(request.getParameter("url"))
PHP:
$redirect_url = $_GET\['url']; header("Location: " . $redirect_url)
.NET:
string redirect_url = request.QueryString["url"]; Response.Redirect(redirect_url);
Django:
redirect_url = request.GET.get("url") HttpResponseRedirect(redirect_url)
Flask:
redirect_url = request.form['url'] redirect(redirect_url)
Rails:
redirect_to params[:url\]
常见的路由参数名:
redirect
redirect_to
redirect_url
url
jump
jump_to
target
to
8.绕过方式
绕过是针对某些开发对有漏洞的参数未完全过滤或控制而进行的,绕过的原理是程序或浏览器对这些特殊符号的解析,可以让URL重定向到我们指定的地址。绕过方式包括不限于:
@ 绕过
http://xxx.com/?url=http://xxx.com@baidu.com
? 绕过
http://xxx.com/?url=http://baidu.com?xxx.com
. 绕过
http://xxx.com/?url=http://xxx.com.baidu.com
# 绕过
http://xxx.com/?url=http://baidu.com#xxx.com
/ 绕过,可以尝试多个正斜杠一起用,如/、//、///
http://xxx.com/?url=http://baidu.com/xxx.com
\ 绕过
http://xxx.com/?url=http://baidu.com\xxx.com
双写参数 绕过
http://xxx.com/?url=http://xxx.com&url=http://baidu.com
进制 绕过
http://xxx.com/?url=http://3232235777
(3232235777为IP地址192.168.1.1的十进制值 以192.168.1.1为例,
把它转为10进制数的公式是:192 * 256^3 + 168 * 256^2 +1 * 256 + 1 * 1 = 3232235777)
9. 前端可能造成漏洞的原因
这个漏洞主要是针对后端 URL 跳转及请求头跳转问题造成的。
- 在前端中,如果涉及 redirct=xxxx 的路由(内部实现为 window.open),也会造成这类问题
- 前端涉及 富文本/markdown 解析,会解析用户输入的不受信连接 为 a 标签
- 前端路由中允许用户创建外链类型的动态路由
本文来自博客园,作者:子洋丶,转载请注明原文链接:https://www.cnblogs.com/zi-yang/p/17586273.html