欢迎光临
我们一直在努力

CORS 跨域资源共享详解

什么是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 头 

赞(0)
未经允许不得转载:171主机测评 » CORS 跨域资源共享详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址