D-CTF Quals '17 writeup
juniorしか解けてない。
Points 13で217位。
Super Secure
web問、パスワードとアカウントの入力を求められる。
ページのソースを見ると直接遷移先があるので、そこに直接アクセスすればいい。
ソース中にアカウントとパスワードもあるので、そちらを入力してもよい。
offlineがどうとか書いてあるのでofflineにすると、javascriptが実行され、通知のようなものでフラグが表示される。
幅が足りてなくてフラグが読みとれないので、ページの要素を表示して直接内容を見ないとフラグが分からなかった。
hex warm up
foren問とcrypto問、ransomware.pyとlock.isoが渡される。
ransomware.pyを見てみるとファイルの前後に適当なビット列を追加しているだけなのでbinwalkとかforemostなどで元のファイルを抜きだせる。zipファイルが出てくるので解凍するとフラグが書かれたテキストファイルが出てくる。
hit and split
net問、pcapngファイルが渡されるのでwiresharkで見てみる。
telnetで何らかのデータを難読化サービスに送信しているらしい。
scapyを使えば簡単に抽出できるのかもしれない、使えないので手動でやる。
telnetのみで絞り込みをし、ストリームを最初から順番に抽出する。
すると、途中でフラグを送信している部分があったので、それを抽出して終了。
how is your memory?
pwn問、.exeファイルが渡される。
調べてみると実際はelf形式なので、そのまま実行してみる。
どうやらローカル変数を書き換えて0xdeadbeefに変えればいいらしい。
最初に入力を受けとるところで50文字くらいの文字を送りこむと、40文字目以降で書き換えしていることが分かった。
書き換えに成功すると、2回目の書き換えをしろと言われるので、その通りにする。
まったく同じやり方でできる、成功するとフラグが表示される。
inception
foren問、D-CTFのロゴ画像が渡される。
サイズを調べてみると異常にサイズが大きいようなので、binwalkしてみる。
すると複数の画像が抽出されたので見比べてみると、そのうちのひとつにフラグが書かれている。
loyal book
foren問、book.zipが渡される。
解凍するとテキストファイルが10個出てくる。内容を見てみると、全てのファイルの内容がほぼ同じであることが分かる。
そこでdiffで差分を取ってみると、単語の間などにフラグの一部が挿入されていることが分かる。
オリジナルのファイルが0001.txtであるようなので、番号順に差分を取り、その結果を結合した。
too easy
bin問、looksgood.exeが渡される。
elfなので実行してみるとパスワードの入力を求められる。
stringsでパスワードが直接抽出できるため入力すると、16進数値が返される。
これを文字列にデコードすると、1文字飛ばしでフラグになるようになっている。
is nano good?
web問、解けなかった。
nanoのバックアップファイルからwebページのphpのソースが読める。
見てみると、ディレクトリトラバーサル対策のようなものをしてから、$pageに指定されたファイルを読み込むらしい。
$typeを指定すると任意のファイルを読み込める。
任意のファイルを読み込むところまでは行けたけど、そこから何を表示すればいいか分からなった。
phpは詳しくない。
forgot my key
crypto問、以前に同じ問題を解いた。
各文字の解読に必要なのはひとつ前の暗号化された文字と、対応したキーかメッセージが分かれば解読できるようになっている。
key自体はmd5なので固定長で、|が含まれているので、|に対応する部分のキーの値が分かる。
このキーが分かることで暗号化されたキーの値が復号できるようになる。
これを繰り返し、キー全体を復号できる。
しかし、phpが読めないため、md5の返り値とかunpackとかarray_shiftが分からなかった。
解き方は分かったし良しとしよう...
まとめ
いろんなところが不便であまり楽しくなかった。
phpが読めずに死んだのは自業自得として、フラグ文字列をhash値にするのはミスりやすいのでやめて下さい。
手打ちとか死ぬ。求め方も方法によって変にバラつきがでて、md5sumで出したhash値では違うとかがあった。