UUTCTF2019 - writeup
結果は441チーム中116位でした。
ソロだからという言い訳はなしにして、次は100位以内を目指します。
Reverse - Find The Password
実行するとこんな感じの画面が出ます。
passwordを探します。
デバッガにかけてもおそらく問題ないと思いますが、
今回はdnSpyを使いました。(.Netで作成されていたので)
github.com
では、ロジックを解析していきます。
以下の画面でほぼすべてのロジックが確認できました。
入力されたパスワードのMD5ハッシュが"d1e48b836b862e8e7cf834b895ffc0de"であれば、フラグとなるようです。(22行目)
しかし、インターネット上のMD5逆変換サービスを使っても、ハッシュ化前の値を得ることはできませんでした。
そこで、ヒントが隠されていないか調べると、フォームのinitialize時に興味深い値を展開していました。
起動時の画面サイズでは絶対表示されない座標に"123456UUTctf"と表示されるようにされていました。
確認します。
確かに表示されています。
"123456UUTctf"のMD5ハッシュを調べると、最初に突合していた"d1e48b836b862e8e7cf834b895ffc0de"であることがわかり、
入力するとフラグゲットです。
SHA1()内の値をSHA1でハッシュ化してフラグになります。
ちなみに、dnSpyで、フラグの画像を抽出することだってできます。
めちゃ便利。
Reverse - The Puzzle
実行するとこんな感じの画面が出ます。
よくあるスライドパズルですね。
パズルを気合で解いてもいいかもしれませんが、今回もdnSpyを使ってズルします。
メインロジックを確認します。
見た感じ、パズルをクリアした後に画像を切り替えてシャッフル、再度プレイさせられるようです。地獄かな?
切り替わる画像をチェックします。
どうやら、フラグのヒントが入ってそうなQRコードになるようです。
スライドパズルでのリソースは左上から順に、
1 2 3 4 5 6 7 8 9
となるので、順に画像を結合していきますと、こんなQRコードが出来上がります。
QRコードの中身は、 VVVUQ1RGe21kNShJX2wwVjNfcEw0eTFOZ19QdVp6MWVTKX0=
となっていました。末尾が=でパディングされていたので、base64でデコードすると、フラグゲット。
UUTCTF{md5(I_l0V3_pL4y1Ng_PuZz1eS)}
md5()内の値をmd5でハッシュ化してフラグになります。
Web - Bad JS
HTMLファイルとJSファイルが渡されます。
JSはクッソ難読化されています。
また、HTML中のClick ME to Check The FLAG!はただのWrong!というアラートがでるだけで、とくにはjsが走ったりということはないです。
jsファイルの中に_0x1b00という配列があり、その中にbase64でたくさんの要素が格納されていました。
デコードして確認してみます。
Flag is: MD5(127.0.0.1)
という文字列が見えます。
いささか簡単に見えますが、これがFlagでした。
いつものごとく、MD5()の中をMD5でハッシュ化してフラグとなります。
Forensics - Layers
画像ファイルをStringsで見ると、Photoshopで編集していた時のレイヤー名を確認できます。
レイヤー名がFlagになっていました。
こういうのって残るんですね…。 勉強になります。
以上が成果とwriteupになります。
個人的にもっとForensicsをガツガツ行きたかったです。
たくさん修行して目指せ100位以内!