CORS 利用方式

1. 简单 CORS 配置不当

这是最常见、最基本的 CORS 漏洞,通常由于管理员或开发者为了方便,而设置了过于宽松的白名单

a. Access-Control-Allow-Origin: \*

这是最糟糕的配置。* 意味着服务器允许任何来源的域名进行跨域请求。攻击者可以利用这个漏洞,在自己的恶意网站上,发送带有受害者身份信息的请求到目标网站

  • 利用方式:

    • 攻击者在自己的恶意网站 evil.com 上,构造一个 JavaScript 请求
    • 该请求的目标是 target.com,并且带上了受害者的 cookie
    • 由于 target.com 允许所有来源,浏览器会发送请求,攻击者就可以获取到受害者的敏感信息,例如个人资料、账户余额等
  • PoC (Proof of Concept) 代码:

    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true; // 携带 cookie
    xhr.open('GET', 'https://target.com/api/user-info', true);
    xhr.onload = function () {
        console.log(xhr.responseText); // 获取受害者数据
    };
    xhr.send();
    

b. Access-Control-Allow-Origin 的动态配置

有些网站会根据请求头的 Origin 字段,动态地将其回显到响应头中

  • 原理:
    • 攻击者发送一个请求,其 Origin 头部被设置为 https://evil.com
    • 如果服务器响应头中包含 Access-Control-Allow-Origin: https://evil.com,则说明存在漏洞
  • 利用方式:
    • * 的情况类似,攻击者在 evil.com 上发起请求
    • 浏览器发送的请求头中包含 Origin: https://evil.com
    • 服务器将 Origin 的值原样返回,浏览器认为这是一个合法的跨域请求,从而执行
  • PoC 代码:
    • 使用 Burp Suite 等工具,修改请求头的 Origin 字段,查看服务器的响应。

2. 高级 CORS 漏洞利用

除了基本的配置错误,还有一些更复杂的场景,利用了协议或 URL 解析的差异

a. 协议绕过

某些网站可能只对 httphttps 协议的 Origin 做了严格限制,而忽略了其他协议

  • 利用方式:
    • 攻击者可以尝试将 Origin 设置为非标准的协议,例如 http:// 变为 httphttps:// 变为 https、或者尝试 file://
    • 如果服务器的正则匹配不严谨,就可能被绕过

b. 子域名或路径绕过

一些网站的白名单只允许特定的子域名,但正则匹配存在缺陷

  • 利用方式:
    • 假设白名单只允许 https://*.target.com,攻击者可以尝试构造 https://evil.com.target.comhttps://target.com.evil.com
    • 如果正则匹配不严谨,这些域名也可能被认为是合法的

c. 端口绕过

CORS 规范中,端口也是同源策略的一部分。但有些服务器在白名单中忽略了端口号

  • 利用方式:
    • 如果 target.com 允许 Origin: https://target.com,攻击者可以尝试使用 https://target.com:8080 作为 Origin
    • 如果服务器的白名单没有严格检查端口,这个请求可能会被通过
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:59

results matching ""

    No results matching ""