はじめに
部内 CTF 初心者会用に作った CpawCTF Write Up です。
Level 1
Q1.[Misc] Test Problem
以下のフラグを提出すれば正解です。
Q6.[Crypto] Classical Cipher
シーザー暗号です。3文字面しただけなので、 -3 すれば解読できます。ASCII コード表を見たらわかりやすいと思います。
フラグ
ここでアルファベットだけ選んでますが、シーザー暗号になってるのがアルファベットだけなので、これで問題ないです。
アルファベット以外もやるとこうなります。
Q7.[Reversing] Can you execute ?
exec_me
をダウンロードしてください。
はじめになんのバイナリファイルかを調べます。 file
コマンドを使います。
こんなのが出てきます。
ELF
ファイルであることがわかりました。これは Linux の実行ファイルです。実行してみます。
出てきましたね。
フラグ
Q8.[Misc] Can you open this file ?
file
コマンドを使います。
Document
ファイルのようです。 Name of Creating Application: Microsoft Office Word
って書いてあるのでこのファイルは Word
で作られたようです。
Word で開いてみましょう。
フラグ
Q9.[Web] HTML Page
ページを開きましょう。右クリックか、 F12
を押して開発者ツールを開いてください。
ctr+F
を押してページエレメントを cpaw{
で検索すると出てきます。
フラグ
Q10.[Forensics] River
写真のメタ情報を読む問題です。 こちらのサイトで読むことができます。
フラグ
甲突川(こうつきがわ)って言うらしい。
Q11.[Network]pcap
pcap
はパケットキャプチャファイルです。 Wireshark
などのツールで開くことができます。
Wireshark のダウンロード
フラグ
ごちうさ神!
Q12.[Crypto]HashHashHash
ハッシュ関数は、任意の長さのデータを固定長のデータに変換する関数です。ハッシュ関数は、同じデータに対しては必ず同じハッシュ値を返し、異なるデータに対しては異なるハッシュ値を返します。
今回は SHA-1 という種類のハッシュ関数です。
あるハッシュ値をググったりすると、ハッシュ値と元のデータのテーブルを持っているサイトが出てくるので、それを使って解読することができます。
フラグ
こーゆうサイトを使って解読してみましょう。
Q14.[PPC]並べ替えろ
ソートするプログラムを書きましょう。
フラグ
Level 2
Q13.[Stego]隠されたフラグ
モールス信号です。こーゆうサイトを使うとできます。
フラグ
Q15.[Web] Redirect
http://q15.ctf.cpaw.site/
にアクセスすると http://q9.ctf.cpaw.site/
にリダイレクトされます。ブラウザの拡張機能で http://q15.ctf.cpaw.site/
にアクセスしたときの通信データを見てみましょう。 ログを保持
や Preserve log
をオンにしてください。
フラグ
http://q15.ctf.cpaw.site/
にアクセスしたときのレスポンスヘッダーにフラグがあります。
Q16.[Network+Forensic]HTTP Traffic
WireShark で開いてみましょう。そして WireShark で通信してるファイルを復元します。ファイル → オブジェクトをエクスポート → HTTP で、すべて保存してください。
network100
ダミーか、、、
network100(1).html
にして、ブラウザで開いてみましょう。
うまく表示されない、、、どうやら bootstrap.css
と button2.js
がそれぞれ css
と js
というフォルダの中にあるようです。フォルダを作って、それぞれのファイルを移動してください。
フラグ
Q17.[Recon]Who am I ?
@porisuteru スペシャルフォース2
で検索してみましょう。
フラグ
Q18.[Forensic]leaf in forest
pcap
かと思ったら違いました、、、 先頭 16 byte 以降に lovelive!
がいっぱい書かれています。たまに大文字や {}
が入っています。なので、 16 byte 以降で A-Z
と {}
と _
だけを取り出します。
フラグ
Q19.[Misc]Image
zip ファイルですが、解凍できません。 file
コマンドで調べてみましょう。
どうやら OpenDocument Drawing
というファイルのようです。 OpenDocument Drawing
というのは Word
で開くことができます。 Word
などのファイルは実態が zip
であることがよくあります。
フラグ
Q20.[Crypto]Block Cipher
ソースコードを見た感じ、コンパイルして引数に暗号文とテキトーな数字を入れるとフラグが出てくるようです。
数字は 1 から順に入れていってみましょう。
フラグ
4 回目で出ました。
Q21.[Reversing]reversing easy
普通に実行すると cpaw{}
だけが出てきます。
-bash: ./rev100: No such file or directory と出る場合
この rev100
というバイナリですが、 file
コマンドを使ってみると、 32bit 用のバイナリであることがわかります。 そのため、 32bit 用の共有ライブラリがないと実行することができません。
32bit 用の共有ライブラリ /lib/ld-linux.so.2
の有無は以下のコマンドで確認できます。
/lib/ld-linux.so.2
は、以下のコマンドでインストールします。
これで実行できるようになります。
gdb
を使って中のアセンブリを見てみます。以下のコマンドで起動します。
main 関数のアセンブリを見てみます。
0x080484b2
で 0x46(%esp)
に $0x77617063
を代入しています。アスキーコード表を見ると wapc
になります。 リトルエンディアンなので逆になっているので、 cpaw
であることがわかります。 このことから 0x080484b2
から 0x08048515
で mov
を使っているので、プラグのテキストを代入していると推測できます。
0x0804851d
から 0x0804852c
は printf
を呼び出しています。
0x08048531
で 0x1c(%esp)
と数字の 5
を比較して、 0x08048536
で等しければ 0x804855e
にジャンプします。 0x1c(%esp)
ですが、 0x08048515
で 5
を代入してから変更をしていないので、必ず 0x804855e
にジャンプします。
0x0804855e
から 0x0804856d
は printf
を呼び出しています。
0x08048572
以降は main 関数の終了処理です。
0x08048536
で必ずジャンプしてしまうため、 0x08048538
から 0x0804855c
の間にフラグを出力する処理があると推測します。そのため、 0x08048531
を処理する直前に 0x1c(%esp)
に 5
以外の数字を代入して、 0x08048536
でジャンプしないようにします。
0x08048531
にブレークポイントを刺します。
r
で実行します。
0x08048531
で停止します。 disass
でアセンブリを見て見ましょう。矢印で指しているところが今の命令です。
0x1c(%esp)
に 5
以外の数字を代入します。ここでは 0x1c(%esp)
に 0
を代入します。
c
で続行します。
フラグ
Q22.[Web]Baby's SQLi - Stage 1-
palloc_home
テーブルを表示する SQL を書きましょう。
フラグ
Q28.[Network] Can you login?
Wireshark で開いてみましょう。
FTP 通信をしています。これはファイル転送プロトコルです。 FTP は暗号化せず、ユーザ名やパスワードが平文で送信されるため、セキュリティ上の問題があります。実際、 No.10 と No.14 のパケットを見ると、ユーザ名 anonymous
とパスワード anonymous
が平文で送信されています。しかし、 No.16 のパケットを見るとログインに失敗しているので、このユーザ名とパスワードは違うようです。 No.38 と No.42 のパケットを見ると、ユーザ名 cpaw_user
とパスワード 5f4dcc3b5aa765d61d8327deb882cf99
が平文で送信されています。 これを使ってログインしてみましょう。
FTP では、 FTP クライアントが必要です。 FileZilla などを使ってログインしてみましょう。
ホスト (接続先) ははじめに DNS に問い合わせしている q28.ctf.cpaw.site
です。 ユーザ名は cpaw_user
です。 パスワードは 5f4dcc3b5aa765d61d8327deb882cf99
です。接続したら、 上にある サーバー
→ 強制的に隠しファイルを表示
をクリックしてください。
.hidden_flag_file
にフラグがあります。 ファイルを選択し、右クリックして表示してください。
フラグ
Level 3
Q23.[Reversing]またやらかした
普通に実行しても何も表示されませんでした。
gdb を使います。
main 関数のアセンブリを見てみます。
0x080483f5
から 0x08048457
がフラグを代入していると推測できます。
0x08048497
にブレークポイントを刺して、 -0x78(%ebp)
以降のスタックの中身を見てみましょう。
実行
-0x78(%ebp)
以降のスタックの中身を 128 byte ほど表示します。
0xffffc838
以降に 4 byte ずつ cpaw{
が入ってるのが見えます。 文字列を int 型として扱っているのでしょう。
フラグ
Q24.[Web]Baby's SQLi - Stage 2-
sQL インジェクションの問題です。
select * from user_table where pass = '$pass';
という SQL であると推測します。
$pass
が入力されたパスワードです。 ここで、パスワードに ' or 1 = 1 --
という文字列をいれると、 SQL は select * from user_table where pass = '' or 1 = 1 --';
となり、 1 = 1
は常に真なので、すべてのユーザが表示されます。 --
はコメントアウトの記号です。 ほかの条件があっても、 --
以降はコメントとして見られるため、無視されます。
フラグ
Q26.[PPC]Remainder theorem
プログラムを書きましょう!
フラグ
Q29.[Crypto] Common World
hint.txt
を見ると、同じ公開鍵で暗号化しています。 RSA 暗号で同じ公開鍵で暗号化すると Common Modulus Attack ができます。
フラグ