CTF for ビギナーズ Writeup & 参加記
CTF for ビギナーズに参加してきました。
解けない問題も多かったのですが運よく優勝しました。
CTF for ビギナーズ 優勝しました pic.twitter.com/qjBqFGauV8
— h_noson (@h_noson) January 29, 2017
Tシャツと本をいただきました。感謝
Writeup
Misc 100 Welcome
問題文のflagそのまま
Misc 200 CountUp Game
21を言ってはいけないので常に4の倍数を言うようにすれば勝てる。
一度ミスすると相手は4の倍数をずっと言ってくるのでそこからでも推測できる。
Misc 200 てけいさん for ビギナーズ
計算結果を送信しようとするとindex.phpにPOSTされるので送信先をphp_math.phpに変更してから送信する。ただ、100回やらないといけないのでスクリプトを組んでやるべき。自分はスクリプトが書けず、問題名通り手計算しました。つらかった。。
渡された環境でやるならF12押して変えたいところをダブルクリックすれば送信先を変更できる。
Web 100 Classical Injection
ユーザ名に「' or 1 -- 」と入れればOK。単純なSQL Injection
Web 100 May the extensions be with you.
問題を忘れましたがCookieのfalseをtrueに変えるだけだった気がします。
Web 200 もぐもぐ(・~・)
シングルクォーテーションを入れるとエラーを吐くのでSQL Injectionだと当たりをつける。「' union select 1,1,1,1 -- 」などとするとカラム数は4つだとわかる。あとは講義でやったようにテーブル名、カラム名を取得し、怪しげなsecret_umasugiテーブルを出力するとflagが得られる。
Forensics 100 みつけてみよう
pcapファイルをWiresharkで開くとHTTP requestが20個あるので、一つ一つ中身をみてflagがあるか確認する。右下のStreamの値をいじれば楽。「tcp matches "ctf4b{(.)*(.)}"」だと一発らしい。
Forensices 200 あけてみよう
pcapファイルをWiresharkで開きHTTPでfilterをかけるとzipファイルを受け取っていることがわかる。File->Export Objects->HTTP...->Saveでzipファイルを保存できる。中には2.pcapがあり、Wiresharkで開くとFTP通信を行っていて、secret.zipを受け取っている。FTP-DATAでfilterをかけてFollow->TCP Streamとするとファイルの中身が表示されるのでShow data asをRawにしてから保存。unzipするとflagが得られる。
Binary 100 HiddenFlag
stringsするだけ
strings bin100_1 | grep ctf4b
Binary 200 復習
講義のようにコードを順に追っていく。どういうコードだったかは忘れました。
Binary 200 Unused Function
objdumpするといかにもな部分がある。
0x63=c,0x74=t,0x66=fなのでこれですね。vimで開けば矩形選択できるのでいらない部分をそぎ落として次のコードを実行すればflagが得られます。
#include <stdio.h> int main(void) { int c; while (scanf("%x",&c) != EOF) { printf("%c",c); } return 0; }
問題名通りにいくとIDAで開いて条件分岐を操作するのだろうか。
最後に
自分が解けなかった問題を解いてる人が何人もいたのでほんとに運がよかった。
頂いた本を読んで勉強しようと思います。