SECCON Beginners CTF 2019 Misc containers&Dump writeup
2019/05/25 15:00 JST - 2019/05/26 15:00 JSTに行われたSECCON Beginners CTF 2019のMiscで解いた問題のwriteupを記す。Forensicは、もう見放されたか。
containers
ダウンロードしたファイルをfileコマンドにかけた
バイナリが気になるのでバイナリエディタで見てみると
CONTAINER.FILE0とは何だろうか。それよりもPNGファイルが含まれているのが気になる。おそらくCONTAINERというからには複数のファイルが含まれているのだろう。ということで含まれているファイルを調べてみるためにbinwalkにかける。
おっと何だか沢山ファイルが入ってるな。なんとなく、含まれているのはPNGファイルのみなので、これらのファイルを組み合わせたものがflagになると考えられる。これをddコマンドで分割していってもいいが時間がかかるので、さくっとバイナリでファイル分割してくれるforemostを使う。なんか今まで忘れてたけどこんな便利なものあったな。
foremostで分解した結果はoutputディレクトリ内に展開される。何かいっぱいPNG出てきた。このPNG一つに一文字ずつ文字が書かれているので全部繋げると、
flag:ctf4b{e52df60c058746a66e4ac4f34db6fc81}
Dump
とりあえずfileにかけとく
pcapなのでwiresharkで開く
次にどうしようかと考えている内に問題文に戻ってみる。
Analyze dump and extract the flag!!
Dumpという題だし、どこかでdumpのやりとりをしているのだろう。色々見ているとhttpで何か怪しいものを見つけた。
サーバー上のファイルに対してhexdumpを行った結果をhtmlで返してるようなのでこのhtmlファイルをエクスポートしてみる。そしてエクスポートしたファイルがこれ。
まさにdumpだ。これをファイルに戻していく。今回はこれを表示させた命令がファイル名になっていて、URLエンコード方式でデコードしておく。
$hexdump -e '16/1 "%02.3o " "\n"' /home/ctf4b/flag というコマンドで表示されたことが分かった。以下のサイトを見ると、このコマンドはflagというファイルを8進数で16回表示ごとに改行していることが分かる。
8進数をファイルに変換するというものは見たことがないので、8進数を16進数に変換する必要がある。今回は変換にCyberChefを使う。ここで先ほどのhtmlの中身をコピペしてそのまま使うと改行が入っているので上手くいかない(ここに気づかず時間がちょっと過ぎてから解けた)。なので中身の改行を全て半角スペースに置き換える。置換するときはsedコマンドを使うと思ったがどうも上手くいかなかったのでperlの力を借りた。
以下ファイル内改行半角スペース置換。
加えてこのままだと8進数の始めに余計な空白があるのでそれをエディタなどで消してからCyberChefにコピペ(赤矢印のとこの空白を消してからコピペ)。
CyberChefで8進数から16進数に変換したが、どうやってここからファイルに変換しようかと悩んでいたら良いものを見つけた。
imtndさん、ありがたく使わせていただきます。
余談だがこのようなものもある。
CyberChefで変換した結果(download.dat)をhex_to_binaryにかけてみる。
その出力結果を見るとgzipになっているので、gzipとして解凍してみると
このjpgファイルを見ると、
flag:ctf4b{hexdump_is_very_useful}
Dumpが時間内に解けなかったのが悔しすぎる。もっと簡単な解き方があって遠回りをしたのかもしれない。来年の自分は今よりも成長していますように。そしてForensis復活を求ム。