URL 跳转漏洞是指后台服务器在告知浏览器跳转时,未对客户端传入的重定向地址进行合法性校验,导致用户浏览器跳转到钓鱼页面的一种漏洞。下面就是一些常见的url跳转漏洞以及绕过方法,各位站长可以根据这些制定响应策略。
inurl:go.php?q=http://
inurl:goto.php?q=http://
inurl:jump.php?url=http://
inurl:out.php?url=http://
inurl:redirect.php?q=http://
inurl:redirect.php?link=http://
redirect
redirect_to
redirect_url
url
jump
jump_to
target
to
link
linkto
domain

几种语句和框架版本常见的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]

对于上述的字符串检测操作,均可以用欺骗手法绕过判断。简单可用的payload如下所示:

http://www.aaa.com?returnUrl=http://www.aaa.com.evil.com

http://www.aaa.com?returnUrl=http://www.evil.com/www.aaa.com

http://www.aaa.com?returnUrl=http://www.xxxaaa.com

若再配合URL的各种特性符号,绕过姿势可是多种多样。比如

利用问号?:

http://www.aaa.com?returnUrl=http://www.evil.com?www.aaa.com

利用反斜线:

http://www.aaa.com?returnUrl=http://www.evil.comwww.aaa.com

http://www.aaa.com?returnUrl=http://www.evil.com\www.aaa.com

利用@符号:

http://www.aaa.com?returnUrl=http://www.aaa.com@www.evil.com

利用井号#:

http://www.aaa.com?returnUrl=http://www.evil.com#www.aaa.com

http://www.aaa.com?returnUrl=http://www.evil.com#www.aaa.com?www.aaa.com

缺失协议:

http://www.aaa.com?returnUrl=/www.evil.com

http://www.aaa.com?returnUrl=//www.evil.com

多次跳转,即aaa公司信任ccc公司,ccc公司同样存在漏洞或者提供跳转服务:

http://www.aaa.com?returnUrl=http://www.ccc.com?jumpto=http://www.evil.com