0x00 URL重定向漏洞危害

借鉴某个师傅的文章,让我学到很多知识,整理自己的知识点
当web应用程序接受不受信任的输入时,可能会导致web应用程序将请求重定向到包含在不受信任的输入中的URL,此时可以进行未经验证的重定向和转发。

通过修改恶意站点的不可信URL输入,攻击者可能成功地启动钓鱼骗局并窃取用户凭证。

简单点的说他的危害: 我打开腾讯的一个页面结果它有URL重定向漏洞导致跳转过去的用户被精心设置的钓鱼页面骗走自己的个人信息和登录口令。

0x01 漏洞发生场景

  1. 用户登录、Oss单点登录(认证完后会跳转)
  2. 用户退出、Oss登录退出(退出时会跳转到之前的页面)
  3. 用户分享(分享内容以后会跳转)
  4. 用户点击广告页面(点击广告链接,可能先跳转到一个接口记录日志在跳转至广告界面)
  5. 注册用户处(注册成功以后跳转至原界面)
  6. 网站404倒计时跳转

总的来说就是一切存在着301/302协议以及存在参数可控情况下,那么就有可能造成url重定向漏洞

0x02 测试代码

  1. # Java
  2. response.sendRedirect(request.getParameter("url"));
  1. # PHP
  2. <?php
  3. $redirect_url = $_GET['url'];
  4. header("Location: " . $redirect_url);
  1. # .NET
  2. string redirect_url = request.QueryString["url"];
  3. Response.Redirect(redirect_url);
  1. # Django
  2. redirect_url = request.GET.get("url")
  3. HttpResponseRedirect(redirect_url)

可利用这些简单的代码自行搭建测试

0x02.1 简单例子

  1. # redirect_url.php
  2. <?php
  3. $redirect_url = $_GET['url'];
  4. header("Location: " . $redirect_url);

http://aphp.test/redirect_url.php?url=https://github.com/phpooop

0x02.1.1 跳转请求包

  1. # Request:
  2. GET http://aphp.test/redirect_url.php?url=https://github.com/phpooop HTTP/1.1
  3. Host: aphp.test
  4. Connection: keep-alive
  5. Upgrade-Insecure-Requests: 1
  6. User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
  7. DNT: 1
  8. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  9. Accept-Encoding: gzip, deflate
  10. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  1. # Response:
  2. HTTP/1.1 302 Moved Temporarily
  3. Server: nginx/1.11.9
  4. Date: Tue, 09 Apr 2019 11:16:36 GMT
  5. Content-Type: text/html; charset=UTF-8
  6. Connection: keep-alive
  7. Location: https://github.com/phpooop
  8. Content-Length: 0

假设http://aphp.test是一个用户量很高的界面,我发QQ群之类的地方用户一点击就会跳转到我的github

0x02.2 例子2: 腾讯重定向漏洞

http://htdata2.qq.com/cgi-bin/httpconn?htcmd=0x6ff0080&u=https://github.com/phpooop&wd=&eqid=c1558f51000079ee0000000555c103aa

0x02.2.1 跳转请求包

  1. # Request:
  2. GET http://htdata2.qq.com/cgi-bin/httpconn?htcmd=0x6ff0080&u=https://github.com/phpooop&wd=&eqid=c1558f51000079ee0000000555c103aa HTTP/1.1
  3. Host: htdata2.qq.com
  4. Connection: keep-alive
  5. Upgrade-Insecure-Requests: 1
  6. User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
  7. DNT: 1
  8. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  9. Accept-Encoding: gzip, deflate
  10. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  11. Cookie: 不给你
  1. # Response:
  2. HTTP/1.1 302 Found
  3. Cache-Control: private
  4. Content-Type: text/html
  5. Server: QZHTTP-2.37.5
  6. Location: https://github.com/phpooop
  7. Content-Length: 26
  8. <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 绕过过滤方法

  1. http://auth.app.com.evil.com
  2. http://evil.com?http://auth.app.com
  3. http://auth.app.com@evil.com
  4. http://evil.com?@http://auth.app.com
  5. http://auth.app.com@evil.com
  6. http://evil.com[http://auth.app.com](http://auth.app.com)
  7. http://evil.com:[http://auth.app.com](http://auth.app.com)
  8. http://evil.com.auth.app.com
  9. http://evil.com:@http://auth.app.com
  10. http://evil.com#http://auth.app.com
  11. http://evil.com\auth.app.com
  12. /evil.com?http://auth.app.com
  13. //evil.com?http://auth.app.com
  14. 输入IPV6地址绕过用10进制、8进制、16进制形式表示
  15. http://auth.app.com%evil.com (苹果浏览器跟QQ浏览器中可以跳转)
  16. http://auth.app.com~evil.com (苹果浏览器跟QQ浏览器中可以跳转)