错误配置CORS的3种利用方法
字数 1557 2025-08-26 22:11:34

错误配置CORS的3种利用方法 - 详细教学文档

0x00 概要

在Web环境中,同源策略(SOP)限制不同应用之间的信息共享,只允许同源应用共享信息。但随着Web应用和微服务的发展,跨域信息共享成为必要需求。HTML5引入的跨域资源共享(CORS)机制旨在安全地实现这一目标,但错误配置会导致严重安全问题。

0x01 CORS简介

跨域资源共享(CORS)是Web浏览器使用XMLHttpRequest API执行跨域请求的机制。跨域请求包含Origin头标识请求来源域,CORS定义了浏览器和服务端之间的协议来确定是否允许跨域请求。

0x02 CORS关键头部

1. Access-Control-Allow-Origin

  • 功能:指定哪些域可以访问当前域资源
  • 示例:允许requester.com访问provider.com的资源

2. Access-Control-Allow-Credentials

  • 功能:指定浏览器是否在请求中发送cookie
  • 注意:仅当值为true时浏览器才会发送cookie

3. Access-Control-Allow-Methods

  • 功能:指定允许的HTTP请求方法(GET、PUT、DELETE等)
  • 用途:限制跨域请求可用的HTTP方法

0x03 三种攻击场景

1. 利用CORS头部中错误配置的通配符(*)

漏洞描述
当Access-Control-Allow-Origin设置为通配符(*)时,任何域都能访问该站点资源。

攻击示例

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. 在网站中嵌入JavaScript代码向victim.com发起请求
  3. 由于CORS配置错误,victim.com返回敏感数据
  4. 恶意网站将数据发送到攻击者控制的服务器

防御措施

  • 避免使用通配符(*)
  • 明确指定允许的域名
  • 验证Origin头部的值

2. 利用错误匹配的不完整域名

漏洞描述
后端验证策略存在缺陷,如仅检查域名结尾部分,导致attackerrequester.com可访问requester.com的资源。

攻击示例

GET /api/userinfo.php
Host: example.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') {
    //Access data
} else { 
    // unauthorized access
}

利用步骤

  1. 注册包含白名单域名字符串的域名(如attackerrequester.com)
  2. 在该域名下创建恶意网站
  3. 利用CORS配置缺陷获取目标站点数据

防御措施

  • 严格验证完整域名
  • 使用白名单机制而非部分匹配
  • 实施精确的域名验证逻辑

3. 使用XSS请求跨域站点

漏洞描述
当白名单中的子域存在XSS漏洞时,攻击者可利用该漏洞绕过CORS限制。

攻击示例

  • 主域:testingcors.com
  • 存在XSS的子域:pavan.testingcors.com

利用步骤

  1. 在存在XSS的子域注入恶意JavaScript payload
  2. 当页面加载时,脚本执行并访问主域资源
  3. 窃取主域的敏感信息

防御措施

  • 确保所有子域的安全性
  • 定期进行安全审计
  • 实施内容安全策略(CSP)
  • 对敏感操作实施额外验证

0x04 总结

CORS是OWASP TOP 10中的安全性错误配置问题。开发者和安全专家必须:

  1. 理解CORS配置的重要性
  2. 避免使用通配符(*)
  3. 实施严格的域名验证
  4. 确保白名单中所有域名的安全性
  5. 定期审计CORS配置
  6. 结合其他安全措施如CSP

最佳实践

  • 生产环境中禁用Access-Control-Allow-Credentials除非绝对必要
  • 明确指定Access-Control-Allow-Origin的值而非使用通配符
  • 限制Access-Control-Allow-Methods到最小必要集合
  • 对所有跨域请求实施严格的输入验证
  • 记录和监控跨域请求活动
错误配置CORS的3种利用方法 - 详细教学文档 0x00 概要 在Web环境中,同源策略(SOP)限制不同应用之间的信息共享,只允许同源应用共享信息。但随着Web应用和微服务的发展,跨域信息共享成为必要需求。HTML5引入的跨域资源共享(CORS)机制旨在安全地实现这一目标,但错误配置会导致严重安全问题。 0x01 CORS简介 跨域资源共享(CORS)是Web浏览器使用XMLHttpRequest API执行跨域请求的机制。跨域请求包含Origin头标识请求来源域,CORS定义了浏览器和服务端之间的协议来确定是否允许跨域请求。 0x02 CORS关键头部 1. Access-Control-Allow-Origin 功能:指定哪些域可以访问当前域资源 示例:允许requester.com访问provider.com的资源 2. Access-Control-Allow-Credentials 功能:指定浏览器是否在请求中发送cookie 注意:仅当值为true时浏览器才会发送cookie 3. Access-Control-Allow-Methods 功能:指定允许的HTTP请求方法(GET、PUT、DELETE等) 用途:限制跨域请求可用的HTTP方法 0x03 三种攻击场景 1. 利用CORS头部中错误配置的通配符(* ) 漏洞描述 : 当Access-Control-Allow-Origin设置为通配符(* )时,任何域都能访问该站点资源。 攻击示例 : 利用步骤 : 攻击者创建恶意网站(如https://testing.aaa.com) 在网站中嵌入JavaScript代码向victim.com发起请求 由于CORS配置错误,victim.com返回敏感数据 恶意网站将数据发送到攻击者控制的服务器 防御措施 : 避免使用通配符(* ) 明确指定允许的域名 验证Origin头部的值 2. 利用错误匹配的不完整域名 漏洞描述 : 后端验证策略存在缺陷,如仅检查域名结尾部分,导致attackerrequester.com可访问requester.com的资源。 攻击示例 : 后端错误代码示例 : 利用步骤 : 注册包含白名单域名字符串的域名(如attackerrequester.com) 在该域名下创建恶意网站 利用CORS配置缺陷获取目标站点数据 防御措施 : 严格验证完整域名 使用白名单机制而非部分匹配 实施精确的域名验证逻辑 3. 使用XSS请求跨域站点 漏洞描述 : 当白名单中的子域存在XSS漏洞时,攻击者可利用该漏洞绕过CORS限制。 攻击示例 : 主域:testingcors.com 存在XSS的子域:pavan.testingcors.com 利用步骤 : 在存在XSS的子域注入恶意JavaScript payload 当页面加载时,脚本执行并访问主域资源 窃取主域的敏感信息 防御措施 : 确保所有子域的安全性 定期进行安全审计 实施内容安全策略(CSP) 对敏感操作实施额外验证 0x04 总结 CORS是OWASP TOP 10中的安全性错误配置问题。开发者和安全专家必须: 理解CORS配置的重要性 避免使用通配符(* ) 实施严格的域名验证 确保白名单中所有域名的安全性 定期审计CORS配置 结合其他安全措施如CSP 最佳实践 : 生产环境中禁用Access-Control-Allow-Credentials除非绝对必要 明确指定Access-Control-Allow-Origin的值而非使用通配符 限制Access-Control-Allow-Methods到最小必要集合 对所有跨域请求实施严格的输入验证 记录和监控跨域请求活动