CTF for Beginnersをやってみた
CTF forCTF for Beginnersの自分のやったことを今更ながら書いてみる。
最初に解いたのは、miscのWelcomeってやつ。CTF4B毎度おなじみのiRCにフラグが置いてあるやつですね。これはすぐ解けそう。
次に手をつけたのは、WebのRamenってやつ。URLを踏むとModern Ramenという名前のページが出てくる。とりあえず全体を眺めたら検索できる場所があったので、まあこれはSQLインジェクションだろうなと思いながら、シングルクォートを入れると
Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in /var/www/web/public/index.php:11 Stack trace: #0 {main} thrown in /var/www/web/public/index.php on line 11
と出てくるので、それであるとわかる。そこで、まずカラム数のチェックのために、
' UNION SELECT null, null, null ,null;
と挿入すると、上と同じエラーが発生する。そこでnullの数を減らしていくと、
UNION SELECT null, null;
でエラーが発生しなくなったので、カラム数が2つであるとわかる(もともと出ている店員の情報を見たら自明だった気もする)。あとは少しヤンキーではあるが、
' UNION SELECT flag, flag FROM flag --
でフラグゲット。本当はテーブル名も取得すべきだったけど、INFORMATIONなんちゃらって入力するのが面倒だったのはナイショの話。
次に手をつけたのは、Katsudonってやつ。フラグは以下にあります。というURLがあったので、まずそこに移動する。すると、謎の文字列が出てきたのでとりあえずbase64でデコードしてみたら、解けてしまった。本当はこれは想定解ではないらしく、あとで問題が追加された。
次に手をつけたのは、ReversingのSeccompareってやつ。Linuxの実行ファイルを渡されるが、自分はOS Xなので動かさずにgobjdump -Sでバイナリ解析をする。
mainをとりあえず見ていると、上のような部分が見つかる。これは1バイトずつスタックにmoveして、strcmpをしているのだとわかる。そこで、Cyberchefを使って元に戻すとフラグをゲット。これぐらいなら自分でもバイナリ解析できた。
次に手をつけたのは、CryptoのSo tiredっていうやつ。なんも考えずに開こうとしたら、その時にファイルのサイズが異常に大きいことに気付く。ともあれ、とりあえず開くと、一番最後に== という文字があることに気付く。そこでbase64であるとわかりデコードする。すると、78 9cという文字がヘッダーにあることがわかる。それでググると、zlibであることがわかるので展開する。するとまたbase64が出てくるので、これが続くと思い、ctf4b という文字が出てくるまでループさせるとフラグをゲットできた。