Ducks30 points Solved 107 times Web Michael ZhangThe ducks and I have a unfinished score to settle.
問題に記載されているリンクをクリックすると、下記のページが表示されます。ページ下部にsource.phpへのリンクがありますのでクリックしてみると、source.phpを取得できます。
source.phpでPasswordをチェックしている箇所を以下に抜粋します。extract関数でPOSTデータを変数に展開しています。そのあとで、$pass変数と$thepassword_123変数が一致しているかチェックし、一致している場合にフラグが表示されるようです。
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
<?php
extract($_POST);
if ($pass == $thepassword_123) { ?>
<div class="alert alert-success">
<code><?php echo $theflag; ?></code>
それでは、Fiddlerを起動し、上記ページでsubmitしたときのリクエストを記録します。そして、下図のようにFiddlerでそのリクエストを右クリックし、「Replay」→「Reissue and Edit」を選択します。
すると、下図のように画面右側にリクエストを編集して再度リクエストを投げることができる画面が表示されます。Nameにpassとthepassword_123を追加し、Valueはどちらも同じ文字列にします。そして、「Run to Completion」をクリックすると、リクエストが発行されます。
すると、下図のとおりレスポンスが返ってきます。
フラグは、
sctf{maybe_i_shouldn't_have_extracted_everything_huh}
です。