CTF4bに参加した話
7月4日東京電機大学を会場にして行われたCTF4b東京に参加してきました
そこで忘れないうちにWrite upにもならないメモを残そうと思う
その前に行われた講義を簡単にまとめると、
- バイナリは嘘をつかない、IDAくんサイコー
- パケットはいろいろある、サメくんサイコー
- Webは範囲がとても広いので経験大事、普段から見ていこー
とまあざっくりこんな感じである
そしてそのあとに実際にCTFを開始した
自分はWeb力とネットワーク力が元々ないので(バイナリもそこまであるわけではない)少し苦戦してしまったし、あまり解けなかった
大まかに覚えているものを以下に載せていく
記憶があいまいな部分も多いので細かいところが違っていることがあります
Web 100 Can you login as admin?
リンクを辿ると、以下のような画面が出現した
なのでSQLiを想起して以下を入力してフラグを入手
' OR 1=1;--
Web 200 Find the flag
ほとんど覚えていないがリンクを辿った先でフラグを入手するとなったのでページそのものを見て行こうと考えてFiddlerにかませたらCookieにそれらしい表記がなされていたのでそこを拾った
%7B、%3F、%7Dはそれぞれ"{"、"?"、"}"の文字コードなのでそれに置換しておくこと
Web 300 1M4G3 V13W3R
リンクを開くとアップローダのような画面になりその下にアップロードされたものと思われる画像がずらずらと出ていた
↑こんなのとか
最初アップローダに関する何かなんだろうかと思ったがその手の知識がなかったので諦めようとしていたが、ふと横を見ると消すのを忘れていたWeb200で使用したFiddler
に目が行き、
というURLを見たのでPHPが関わっているとかfileという変数があるとかでディレクトリトラバーサルをやってみようと考えた
とやった気がする(あまり覚えてない...)
するとview.phpをダウンロードするかどうかを聞かれたのでダウンロードしてcatするとソースコードと思しきものとともに以下のフラグも出てきた
>cat view.php
<?php
// You cannot read this flag :)
// ctf4b{path_trav3rsal_1s_the_r3al_fun}(以下中略)
Binary 100 NOT onion
"file.exe"というファイルが配布されたので早速ダウンロードして実行してみると...
実行できなかった
なのでそもそも実行ファイルではないのではないかと思いfileコマンドに投げた
>file flag
flag: GIF image data, version 89a, 480 x 84
というわけでexeファイルではなくGIFファイルであったのでflag.gifに書き変えて画像としてみるとフラグが出てきた
Binary 200 読めますか?
なら読んでみようじゃないの
配布された画像を開いてみると...読むことが出来なかった
下の方にctf4c{I_.......位までしか見えないように背景の黒に紛れてしまって読めない
画像上ではこれ以上読むことが出来ないので直接バイナリに書いてないかどうか見るためstringsコマンドに投げた
Binary 300 READ and BURST
リンクを辿るとアセンブリコードが書いてあり、使っている関数とアセンブリコードで求めた数字を組み合わせたらフラグになるよという旨の表記があったので読んでいった
ソースコードは現在見ることが出来ないが、シンプルな四則演算であったので苦も無く計算することが出来たし、したの方にprintfをcallしていたので使っている関数もすぐに断定することが出来た
Binary 400 DETECTIVE IDA
配布された"file"ファイルをfileコマンドに投げる
>file file
file: PE32 executable for MS Windows (console) Intel 80386 32-bit
今回は実行ファイルなのでfile1.exeと名前を書き変えた(file.exeだとfileコマンドが使えなくなってしまうため)
さっそく実行してみる
>file1
Enter passphrase:
パスワードのようなものを要求された
試しにhogeと打ってみるが正しいわけもなく...
ということでIDA君登場!投げてみる!!
主要な部分を抜き出したグラフであるが、このプログラムが何をしているかというと、
- パスフレーズを要求
- 入力された文字列が20文字であるかを検討→違えば終了
- 実際のパスフレーズと入力された文字列を先頭から19文字比較する→違えば終了
- 最後に入力された文字列をこの問題独自の関数でデコードする
先頭から19文字を比較するので真ん中の方にある怪しい文字列がその比較する文字列である
しかしこの怪しい文字列をそのまま入力しても文字数が19文字なので最初の分岐でそれてしまうので残りの1文字を探す
すると真ん中の方に
cmp al,31h
というものがある
ここに行きついたのはespから何番目を参照しているかを上から追っていくと「ひょっとして?」となる
この時の"31h"は"1"の文字コードとのことなので"tTnybDdn@Rev1tav0nn1"が要求されたパスフレーズであることが分かる
決して簡単なものではなかったが勉強になることも多かったし有意義な時間を過ごせた
とりあえず自分にはまだまだWeb力とネットワーク力が必要とされる...