h_nosonの日記

競プロ、CTFなど

CTF for ビギナーズ Writeup & 参加記

CTF for ビギナーズに参加してきました。
解けない問題も多かったのですが運よく優勝しました。


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するといかにもな部分がある。
f:id:h_noson:20170130213754p:plain
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で開いて条件分岐を操作するのだろうか。

最後に

自分が解けなかった問題を解いてる人が何人もいたのでほんとに運がよかった。
頂いた本を読んで勉強しようと思います。