三种对CORS错误配置的利用方法
字数 1885 2025-08-18 11:38:28

跨域资源共享(CORS)错误配置的利用方法详解

1. CORS基础概念

1.1 同源策略(SOP)的限制

  • 同源策略限制应用程序之间的信息共享
  • 仅允许在相同协议、域名和端口下的应用程序间共享信息
  • 防止系统机密信息泄露,但也带来了跨域通信的挑战

1.2 CORS的作用

  • W3C标准,全称"跨域资源共享"(Cross-origin resource sharing)
  • 允许浏览器向跨源服务器发出XMLHttpRequest请求
  • 克服AJAX只能同源使用的限制
  • 通信过程由浏览器自动完成,对用户透明

1.3 关键CORS响应头

  1. Access-Control-Allow-Origin

    • 指定哪些域可以访问资源
    • 例如:Access-Control-Allow-Origin: requester.com
  2. Access-Control-Allow-Credentials

    • 指定浏览器是否发送cookie
    • 仅当设置为true时发送cookie
    • 例如:Access-Control-Allow-Credentials: true
  3. Access-Control-Allow-Methods

    • 指定允许的HTTP请求方法(GET, PUT, DELETE等)
    • 例如:Access-Control-Allow-Methods: GET, POST

2. CORS错误配置的三种利用方法

2.1 利用通配符(*)配置错误

漏洞特征

  • 服务器响应中包含Access-Control-Allow-Origin: *
  • 同时Access-Control-Allow-Credentials: true

示例请求

GET /api/userinfo.php
Host: www.victim.com
Origin: www.victim.com

示例响应

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

利用方法

  1. 攻击者创建恶意域名(如https://testing.aaa.com)
  2. 在该域名下嵌入利用代码
  3. 当受害者访问恶意站点时,代码会:
    • 向目标站点发送请求
    • 获取敏感信息(用户名、ID、邮箱等)
    • 将信息发送到攻击者控制的服务器

防御措施

  • 避免使用通配符(*),特别是当需要发送凭据时
  • 明确指定允许的源域

2.2 信任域通配符作为Origin

漏洞特征

  • 服务器对Origin头部进行部分验证
  • 例如白名单仅验证域名结尾(如requester.com)

示例请求

GET /api/userinfo.php
Host: provider.com
Origin: attackerrequester.com

示例响应

HTTP/1.0 200 OK
Access-Control-Allow-Origin: attackerrequester.com
Access-Control-Allow-Credentials: true

后端错误配置示例

if ($_SERVER['HTTP_HOST'] == '*requester.com') {
    // 允许访问数据
} else {
    // 未授权访问
}

利用方法

  1. 攻击者注册包含白名单域名的子域(如attackerrequester.com)
  2. 创建恶意站点并嵌入利用代码
  3. 利用部分匹配的域名绕过CORS限制
  4. 获取目标站点的敏感信息

防御措施

  • 实施严格的域名验证,避免部分匹配
  • 使用完整域名匹配而非通配符匹配

2.3 利用XSS实现CORS利用

漏洞特征

  • 主域配置了CORS白名单(如requester.com)
  • 白名单中的子域存在XSS漏洞(如sub.requester.com)

后端配置示例

if ($_SERVER['HTTP_HOST'] == 'requester.com') {
    // 允许访问数据
} else {
    // 未授权访问
}

利用方法

  1. 识别白名单域中易受XSS攻击的子域
  2. 通过XSS注入恶意JavaScript payload
  3. 利用子域的XSS漏洞向主域发送请求
  4. 获取主域的敏感信息

示例场景

  • CORS应用托管在testingcors.com
  • XSS漏洞存在于pavan.testingcors.com
  • 在"Name"参数中注入JavaScript payload
  • 页面加载时执行脚本,从testingcors.com获取信息

防御措施

  • 对所有子域实施相同的安全标准
  • 定期检查白名单域中的XSS漏洞
  • 考虑使用更严格的CORS策略

3. 防御建议

  1. 避免使用通配符

    • 特别是当需要发送凭据时
    • 明确指定允许的源域
  2. 严格验证Origin头部

    • 实施完整的域名匹配
    • 避免部分匹配或通配符匹配
  3. 限制HTTP方法

    • 使用Access-Control-Allow-Methods明确允许的方法
    • 仅开放必要的方法
  4. 凭据控制

    • 谨慎使用Access-Control-Allow-Credentials
    • 仅在必要时启用
  5. 定期安全审计

    • 检查CORS配置
    • 测试白名单域的安全性
  6. 子域安全

    • 确保所有子域符合安全标准
    • 防止通过子域漏洞绕过CORS限制

4. 总结

CORS是OWASP TOP 10中的安全漏洞,错误配置可能导致严重的信息泄露。开发人员和安全专家必须:

  1. 充分理解CORS机制和安全影响
  2. 避免常见的配置错误(如通配符使用)
  3. 实施严格的源验证
  4. 定期审计和测试CORS配置
  5. 保持对相关漏洞的警惕性

通过正确配置和持续监控,可以在保持跨域通信功能的同时确保应用程序的安全性。

跨域资源共享(CORS)错误配置的利用方法详解 1. CORS基础概念 1.1 同源策略(SOP)的限制 同源策略限制应用程序之间的信息共享 仅允许在相同协议、域名和端口下的应用程序间共享信息 防止系统机密信息泄露,但也带来了跨域通信的挑战 1.2 CORS的作用 W3C标准,全称"跨域资源共享"(Cross-origin resource sharing) 允许浏览器向跨源服务器发出XMLHttpRequest请求 克服AJAX只能同源使用的限制 通信过程由浏览器自动完成,对用户透明 1.3 关键CORS响应头 Access-Control-Allow-Origin 指定哪些域可以访问资源 例如: Access-Control-Allow-Origin: requester.com Access-Control-Allow-Credentials 指定浏览器是否发送cookie 仅当设置为true时发送cookie 例如: Access-Control-Allow-Credentials: true Access-Control-Allow-Methods 指定允许的HTTP请求方法(GET, PUT, DELETE等) 例如: Access-Control-Allow-Methods: GET, POST 2. CORS错误配置的三种利用方法 2.1 利用通配符(* )配置错误 漏洞特征 : 服务器响应中包含 Access-Control-Allow-Origin: * 同时 Access-Control-Allow-Credentials: true 示例请求 : 示例响应 : 利用方法 : 攻击者创建恶意域名(如 https://testing.aaa.com ) 在该域名下嵌入利用代码 当受害者访问恶意站点时,代码会: 向目标站点发送请求 获取敏感信息(用户名、ID、邮箱等) 将信息发送到攻击者控制的服务器 防御措施 : 避免使用通配符(* ),特别是当需要发送凭据时 明确指定允许的源域 2.2 信任域通配符作为Origin 漏洞特征 : 服务器对Origin头部进行部分验证 例如白名单仅验证域名结尾(如 requester.com ) 示例请求 : 示例响应 : 后端错误配置示例 : 利用方法 : 攻击者注册包含白名单域名的子域(如 attackerrequester.com ) 创建恶意站点并嵌入利用代码 利用部分匹配的域名绕过CORS限制 获取目标站点的敏感信息 防御措施 : 实施严格的域名验证,避免部分匹配 使用完整域名匹配而非通配符匹配 2.3 利用XSS实现CORS利用 漏洞特征 : 主域配置了CORS白名单(如 requester.com ) 白名单中的子域存在XSS漏洞(如 sub.requester.com ) 后端配置示例 : 利用方法 : 识别白名单域中易受XSS攻击的子域 通过XSS注入恶意JavaScript payload 利用子域的XSS漏洞向主域发送请求 获取主域的敏感信息 示例场景 : CORS应用托管在 testingcors.com XSS漏洞存在于 pavan.testingcors.com 在"Name"参数中注入JavaScript payload 页面加载时执行脚本,从 testingcors.com 获取信息 防御措施 : 对所有子域实施相同的安全标准 定期检查白名单域中的XSS漏洞 考虑使用更严格的CORS策略 3. 防御建议 避免使用通配符 : 特别是当需要发送凭据时 明确指定允许的源域 严格验证Origin头部 : 实施完整的域名匹配 避免部分匹配或通配符匹配 限制HTTP方法 : 使用 Access-Control-Allow-Methods 明确允许的方法 仅开放必要的方法 凭据控制 : 谨慎使用 Access-Control-Allow-Credentials 仅在必要时启用 定期安全审计 : 检查CORS配置 测试白名单域的安全性 子域安全 : 确保所有子域符合安全标准 防止通过子域漏洞绕过CORS限制 4. 总结 CORS是OWASP TOP 10中的安全漏洞,错误配置可能导致严重的信息泄露。开发人员和安全专家必须: 充分理解CORS机制和安全影响 避免常见的配置错误(如通配符使用) 实施严格的源验证 定期审计和测试CORS配置 保持对相关漏洞的警惕性 通过正确配置和持续监控,可以在保持跨域通信功能的同时确保应用程序的安全性。