にゃーんとか言ったことなし

コンテンツは特にないです。

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でバイナリ解析をする。

f:id:kurofune6:20190602190310j:plain

gobjdump -S の結果

mainをとりあえず見ていると、上のような部分が見つかる。これは1バイトずつスタックにmoveして、strcmpをしているのだとわかる。そこで、Cyberchefを使って元に戻すとフラグをゲット。これぐらいなら自分でもバイナリ解析できた。

次に手をつけたのは、CryptoのSo tiredっていうやつ。なんも考えずに開こうとしたら、その時にファイルのサイズが異常に大きいことに気付く。ともあれ、とりあえず開くと、一番最後に== という文字があることに気付く。そこでbase64であるとわかりデコードする。すると、78 9cという文字がヘッダーにあることがわかる。それでググると、zlibであることがわかるので展開する。するとまたbase64が出てくるので、これが続くと思い、ctf4b という文字が出てくるまでループさせるとフラグをゲットできた。