スマートフォン解析 top

TOP > タイガーチームセキュリティレポート > DEFCON DEF CON CTF Qualsにチャレンジ!―その2― 2013 3dub 4 Writeup

タイガーチームセキュリティレポート

DEF CON CTF Qualsにチャレンジ!―その2― 2013 3dub 4 Writeup

引き続きWriteupです!
その2、その3では、3dubの問題を連続してWriteupします!
3dub はその名の通りWebアプリから鍵を奪取する問題ですが、特別なツールやプログラミングスキルは必要なく、ちょっとした発想さえあれば解けます。 まずは、3dub 4 remembermeの解き方から見ていきましょう。


DEF CON CTF 2013 Quals 3dub 4 Writeup

問題文はこちら http://rememberme.shallweplayaga.me/
上記のURLにブラウザでアクセスすると、「usernames.txt」、「passwords.txt」、「Login Here」の3つのリンクが表示されます。
とりあえず、トップページの「usernames.txt」をクリックしてみます。
するとユーザ名のリストらしきものが表示されました。
どうやら「getfile.php」というプログラムがパラメータ「filename」で指定したファイルを取得して表示しているようです。
それならば、トップページの「passwords.txt」をクリックすればパスワードの一覧が取得できるかも( ̄m ̄* )ムフッ♪ 念のためクリックしてみましたが、エラーメッセージらしきものが表示されてしまいました。(^^ゞ
そんなに甘くはないようです。
まじめに解析することにしましょう(笑)

先ほどと同じ「getfile.php」というプログラムですがパラメータ「accesscode」を見ると「usernames.txt」を表示したときと同じ値になっているので、これを適当な値に設定しないと「passwords.txt」を表示できないようです。
よく見ると「accesscode」の値は"usernames.txt"md5 hashになっているようなので、passwords.txt"のmd5 hashを計算して、「accesscode」の値に設定してみると・・・
UNIXらいくなパスワード情報が表示されました。
この情報からパスワードをcrackできないか試します。パスワードcrackと言えば・・・
えぇ、そうです。あなたのJohn(笑)

あとはJohnくんに任せて、お茶を飲みながら待ちましょう・・・
しばらく待っているとJohnくんが「jeanlucさん」のパスワードを言い当てました。できる子です。

さっそく入力欄にパスワードを放りこんでみましたが、正解ではなさそうです・・・orz

どうやら違うアプローチが必要そうです・・・

今度は「getfile.php」自体に着目してみます。

「passwords.txt」を表示させたのと同じ方法で「getfile.php」の内容を表示させると、「getfile.php」のソースコードが丸見えです。(@_@)
ソースコードを読むと、「getfile.php」がパラメータ「filename」に期待している値のひとつに「key.txt」があるのがわかります。 とりいそぎ「usernames.txt」、「passwords.txt」、「key.txt」にダイレクトアクセスを試みましたがアクセス制御がかかっていて拒否されてしまいます。
そこで「filename」に「key.txt」を指定してみると、意味不明な文字列が表示されました。
「getfile.php」のソースコードをよく見ると、表示されているのは「key.txt」の内容そのものではなく「key.txt」の内容を暗号化し、それを「base64エンコード」したものであるということがわかります。 暗号文のキーには乱数が指定されていますが、その乱数のseedはtime()で取得したプログラム実行時の時刻なので、これを推測できれば「key.txt」の内容を再現できそうです。
そこで次のようなプログラムをphpで書いてキーの候補を順番に試していくことにしました。成功すればテキスト形式のメッセージが表示されるはずです。 $data = base64_decode(“+vBR30(中略)0xeQ==”);

$time = time();

for ($i = 0; $i < 600; $i++) {
srand($time - $i);
$key = rand();
$text = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC);
echo $text . “\n”;
}
?>
このプログラムをterminal上で実行してみると、、、それらしきメッセージが表示されました。
「To boldly go where no one has gone before WMx8reNS」

これが正解!


おまけ

上記の方法で、この問題は解けていますが、トップページにあったLogin Hereというリンクの先についても触れておきます。
リンクをクリックするとログイン画面(login.php)が表示されますが、これのソースコードを「getfile.php」を使って表示させてみると、これは決してログイン成功しないログイン画面であることがわかります。
「passwords.txt」とこのログイン画面はただのdecoyだったようです。この問題を解いたT氏は、パスクラなどを試みて1時間ほど足止めされたようです(笑)

以上


次回は 3dub 5 です。お楽しみに~


タイガーチームメンバー(広報w) 白谷 宗大