本日はありがとうございました。とても楽しかったです。
CTFは2回目くらいで割と初心者のつもりだったのですが、優勝してしまったので書きます。
Welcome (Misc)
問題文にフラグが書いてあるのでSubmitするだけです。
てけいさん for びぎなーず (Misc)
手計算します。3~5分ほど掛かります。Tabキーを押すとテキストボックスにカーソルが合うので、その状態で数字を入力してEnterキーで送信すると早いです。
別解
解説中に少し考えたのが次の別解です。Chrome開発者ツールのConsole画面に、
document.getElementsByName("answer")[0].value=eval(document.getElementsByTagName("div")[0].innerText); document.getElementsByTagName("form")[0].submit();
と入力して、キーボードの↑
、Enter
を交互に押すのを繰り返します。頭を使わなくていい分マシですが、完全自動化は出来ませんでした。
TypeScript (Special)
自分「.ts ファイルは TypeScript の実行ファイル? これを実行するには・・・?? 調べても全然それっぽい記事が出てこないんですが・・・うーん・・・」
・・・というのは間違いで、これは地デジの放送などを録画した場合に作られる動画ファイル形式でした。
結構悩んだ末、ダメ元で MPC-HC で開いてみたら開けました。
ts is TypeScript. って大嘘じゃん!!!!
decode address (Special)
与えられたzipファイルを解凍するとxmlファイルなどのファイルがいくつか出てきます。
途中で学生さんからのヒントがあり、「Excelファイル」がヒントとのことでした。
.xlsx 形式が xml であることは知っていたので、 .zip ファイルの拡張子を .xlsx に書き換えてExcelを開きます。すると、次のようなものが出てきます。
ここまで来れば後は簡単です。左端の数字が文字コードに対応していると推測できるので、手作業で文字列に復元します。
Beginners Logo (Special)
かなり力作のSECCON Beginnersのアスキーアートが表示されますが、そんなものは無視してソースコードを見ると、講義の中で説明されたディレクトリトラバーサルが出来そうなURLが出てきます。
というわけで試してみると、 f=../getfile.php
としてもフラグは出てきませんが、 f=../index.php
とするとフラグが表示されます。
My Style (Web)
HTMLから参照されているスタイルシート(.css)にフラグが隠されていました。
Simple SQLi (Web)
講義でやった通り、ユーザー名とパスワード両方に ' OR '1' = '1
と入れると出来ます。確かそうだった気がします。
Cannot Open? (Web)
問題文に、「ログさえ残ったら…」とありますが、Chromeの開発者ツールには「Preserve log」というチェックボックスがありますので、これをチェックするとページ遷移しても通信のログを残してくれます。Chromeは便利ですね。
適当に c=4 としてアクセスすると、多数のファイルがログに記録されます。それぞれのヘッダを見ると、b、{、r、e、d、i…と、フラグになりそうな気がします。すべて連結して、最初が ctf4b{ となるようにすると、フラグが出来上がります。
Simple (Forensics)
.pcapng ファイルが与えられるので、html パケットでフィルタリングし、出てきたパケットのうちどれかを適当に選んで Follow → TCP Stream
を選択すると、フラグが入手できます。ctf4b{dummy}
はダミーのフラグなので正解ではありません。ちなみに、今気付いたのですが、画面右下の Stream という部分を操作すると、各ファイルを順番に見ることができて便利でした。
Export (Forensics)
これも .pcap ファイルが与えられるのですが、 .tar.gz ファイルらしきものが見えるので、File → Export Objects → HTTP
から ctf.tar.gz をエキスポートします。 tar xvzf ctf.tar.gz
と打って展開すると ctf.txt が出てきて、そこにフラグが書かれています。
W4nn4cry? (Forensics)
「ファイルが突然暗号化されちゃった!どうしよう…」 とのことですが、fileコマンドで与えられたファイルを確認するとext4のファイルシステムのデータが格納されているようです。講義で習った通りに fls for_200
とすると、いくつかのファイルが存在することが分かります。削除されてしまった flag.txt
を開こうと、iノード番号指定で icat for200 11
とするのですが、 .bash_history
ファイルで上書きされてしまっているようです。.install.sh
ファイルを抽出して見てみると、ご丁寧に暗号化のパスワードが残っていることが分かります。openssl コマンドでデコードする方法をGoogle検索すると、-e
を -d
にするだけで良いようですので、そのコマンドを打つとフラグが出てきます。
Calcme (Binary)
やるだけ。
extractme (Binary)
即値をメモリに書き込んでいますが、その即値 (32ビット整数) を16進⇔Asciiコード変換すると、4文字の文字が出てきますので、それを繋げるとフラグになります。32ビット整数がリトルエンディアンで格納されるので、順序は逆になります。
・・・とここまで書いてから気付いたのですが、stringsコマンドで一発でした。
inputme (Binary)
main関数をざっと眺めているとatoi関数を呼び出しているのが分かるので、入力された引数を変換しているのだと予想できます。atoi関数の戻り値を辿っていくと、即値と比較していることが分かるので、その即値が正解の数字であることが分かります。正解の数字を入力すると、フラグが入手できます。
さいごに
本当に楽しかった!!!!!!!!!!