什么是CORS:
一句话概括:
CORS(跨域资源共享) 开发人员对浏览器跨域规则相关配置失误,攻击者就能从 evil.com 恶意站点读取目标站点的敏感接口数据。
漏洞定位:
属于配置类漏洞,确实技术含量不高,核心是“看响应头 + 看是否带凭证”,了解原理和利用方式即可
CORS漏洞原理:
其前提判断URL是否存在跨域 (端口、协议、域名任一不同都算跨域)
|
当前页面 |
目标接口 |
是否跨源 |
|
https://a.com |
https://a.com/api |
否(同源) |
|
https://a.com |
http://a.com/api |
是(协议不同一个http\\一个https) |
|
https://a.com |
https://api.a.com |
是(主域名完全不同) |
|
https://a.com |
https://a.com:8080 |
是(端口不同) |
核心响应头:
Access-Control-Allow-Origin 服务器通过该字段校验所请求的*来源域名* 然后放行
通配符*:
Access-Control-Allow-Origin: *允许所有域名跨域。根据 CORS 协议规范,使用通配符时,禁止开启身份凭证携带(Access-Control-Allow-Credentials: true),无法传递 Cookie、Session 等用户凭证
@app.after_request
def add_cors_headers_bad(response):
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Credentials'] = 'true' # ❌ 与 * 冲突
return response
因为所用域名可访问,匿名访问的信息完全是公开,而真正信息是在带Cookie\\Session等相关带用户凭证的
origin:
浏览器的来源标识,也是真正的漏洞点,它是由浏览器自动生成然后加到请求头里面的;当发生跨域请求时候 当前页面的origin会证明自己的身份,专业点就是浏览器拿到响应后,自己判断 ACAO 是否匹配当前 Origin,决定是否把响应交给 JS
此外手动修改Origin值,来测试服务端的跨域校验逻辑,是漏洞探测的测试常用手段
-
改 Origin 只能测服务端是否反射/放行,不能替代浏览器验证。
-
最终能否利用,取决于浏览器是否接受该响应。
-
用 curl/BP 改 Origin 看到 ACAO: https://evil.com 只是第一步,还要确认 ACAC: true 且接口有敏感数据。

鹰图语法搜集:
可以自行转FOFA
任意源:
header="Access-Control-Allow-Origin: *" (辅助了解通配符的概念)
header="Access-Control-Allow-Credentials: true" && header="Access-Control-Allow-Origin"
edu资产:
header="Access-Control-Allow-Origin" && domain.suffix="edu.cn"
header="Access-Control-Allow-Credentials: true" && domain.suffix="edu.cn"
(这个取决于该系统配置 要有耐心去测)
防御建议:
1.精确白名单 + 严格校验
2.避免信任 null 源与特殊域名
3.精细化配置其他 CORS 头




