はじめに
後半戦です. 正直なところ, 時間を確保できればもう少し解けたと思うので他のWriteupを読んで精進します.
簡単なWiresharkの使い方なども載せているので参考になれば幸いです.
必要なファイルなどはGitHubにあげております.
Take it to the Cleaners(Foren, 100pt)
People hide things in images all the time! See if you can find what the artist forgot to take out in this one!
.png
拡張子の画像を渡されます. 画像を渡された時はForensics入門(CTF)をもとに, まずはひたすら下準備をしていきます. まずはexiftoolから.
# インストール方法は, Macなら
$ brew install exiftool
# Linuxなら(うろ覚えですが)
$ sudo apt install libimage-exiftool-perl
# いざ実行
$ exiftool ritsec_logo2.png
ExifTool Version Number : 11.71
File Name : ritsec_logo2.png
Directory : .
…
User Comment : RVZHRlJQe1NCRVJBRlZQRl9TTlZZRl9KQkFHX1VSWUNfTEJIX1VSRVJ9
…
いきなり怪しすぎる1文を発見. さて, 困ったら前半にも登場したCyberChefを利用します.
左のOperationからMagicを選択し, Recipeにドラッグ&ドロップ. すると
EVGFRP{SBERAFVPF_SNVYF_JBAG_URYC_LBH_URER}
が得られます. Base64エンコードのようです
あとは察しのいい人はお気づきでしょう. ROT13を使ってみます. このサイトからROT13を探してドラッグ&ドロップしてもいいですし, ここでも構いません.
RITSEC{FORENSICS_FAILS_WONT_HELP_YOU_HERE}
Shiny(Crypto, 100pt)
.‡8]5);483‡5;
You must wrap the flag in RITSEC{ }
これと, .jfif
ファイルが渡されます. もしもMacOSユーザでこのファイルが開けない, なんて人がいたら, Finderで拡張子を.jpg
に変換したらちゃんと見られます. 他のOSでも, .jfif
を.jpg
に変換してくれるサイトはある1ので, 万が一見られない場合はそこに投げるといいでしょう.
さて, 例のCyberChefでMagicを利用してみます.
…特にいい情報は得られません.
画像のGold-bug.jfif
は何を意味するのでしょうか?'gold bug'でググってみます.
ミステリ好きの人はすぐ気付くでしょう. エドガー・アラン・ポー先生の黄金虫で用いられている暗号のようです2.
Wikipediaを元に, 上の文字列を解読していきます.
…が, 唯一, ]
の文字だけが解読できません. 代わりに?を用いると
poe?asthegoat
となります. 'Poe as the goat'と解釈するなら, ?はコロンやアンダーバーのような気がしますが, いずれも入力しても正解とはなりません.
Wikipediaの英語版の方のページを見ても, それらしい情報は得られません.
思い切って, Wikipediaから離れて'the gold bug cryptogram'でググってみます. おそらく'the gold bug 'あたりで予測変換で出てくるはずです.
「The Gold Bug Cryptogram by Robert Giordano - PoeStories.com」
を見るとちょうどヒットしました. どうやら]
はw
に対応したようです. 'Poe was the goat'という訳ですね.
RITSEC{poewasthegoat}
findme(Foren, 320pt)
.pcap
ファイルが渡されます. この拡張子が渡されたらほぼ確実にWiresharkを使います. これも経験ですね…. おそらく1年前の私なら無理でした.
インストールなどはここでは割愛します. そんなに難しくないと思います.
さて, Wiresharkで開くとパケットが48個. 多くないので全部調べても問題なさそうです.
まずは, Statistics → IPv4 Statistics → IP Protocol Typesで統計をみてみます.
(なお, 今回の問題とは一切関係ない余談ですが, ここでIP Protocol TypesではなくSource and Destination Addressesを選択し, 1つだけ特異なIPアドレスとの通信がおこなわれている → 怪しいのでは?といった絞り込みもできたりします. )
すると, TCPが44個, UDPが4個という統計に.
まずはUDPから追跡してみましょう.
31パケット目を右クリックしてFollow → UDP Streamを選択.
特に有益な情報はありません. パケット一覧にもどると, 48個あったパケットが1個しか表示されていないと思います.
これは上の緑の部分のudp.stream eq 0
により勝手にフィルタがかかっているせいです.
一覧に戻る時は, その右にある×ボタンをクリックします.
32〜34パケット目も検証したらわかりますが, UDPのパケットにflagはなさそうです.
では次にTCPを見ていきます. UDPと同様, 1〜30番のどれかのパケットを右クリックしてFollow → TCP Streamを選択.
このような画面が出てきました. 一旦置いておいて, 違う通信も見てみましょう.
上の緑の部分はtcp.stream eq 0
となっていると思います. これをtcp.stream eq 1
に変えてみましょう. 35〜43パケット目のTCPが登場します. これら(どれでも良い)を再び追跡すると, 以下のようになります.
(ちなみに, tcp.stream eq 2
とtcp.stream eq 3
には何も有力な情報がありません. そして, tcp.stream eq 4
以降はそもそもヒットしませんので追跡できません.)
いかにも怪しげな文字列が出てきました.
勘のいい人は(というか慣れてくると), 赤い字の末尾に=
があるのでBase64だとすぐ見抜けます.
もちろん, 例によってCyberChefでMagicを使って解析してもOKです.
赤い字の方はYouTubeのリンクです. 曲名はNever Gonna Give You Up.
これはCTFではいわゆるハズレとして置かれる, ちょっとしたお遊びです(ここにたどり着いたら「してやられた!」くらいの気持ちで切り替えましょう).
本題は青い方です. これをCyberChefに投げてもflag...と表示されるだけです3.
さらにいうと, File type: application/x-tar (tar)
との表示も.
つまり, これをBase64でデコードしてもflagが文字列そのものとして現れるわけではなく, .tar
のバイナリデータが登場すると考えるべきでしょう.
ここからはPythonを使います. まずは空の.tar
ファイルを作成しておきます.
$ touch flag.tar
さて, ここに先ほどのデコード結果を書き込みましょう.
import base64
s = 'H4sIAFSZx10AA+3OMQuCQBiH8Zv9FPcFgrvUcw2kIWgydzG1EkQPvZui757S0lSTRPD8lmd43+F/6cqrWJmaGRMt1Ums3vtitkKHsdGJDqNtKJSeGwup1h628JMrRymFP/ve+Q9/X+5/Kjvkp316t1Vpp0KNReuKuq17V9x21jb9IwjSPDtuKukGWXXD1AS/XgwAAAAAAAAAAAAAAAAAWDwB38XEewAoAAA='
s = base64.b64decode(s)
# バイナリを書き込むので'w'ではなく'wb'であることに注意
with open('flag.tar', mode='wb') as f:
f.write(s)
f.close()
さて, これを実行してできたファイルを見てみましょう.
$ file flag.tar
flag.tar: gzip compressed data, last modified: Sun Nov 10 05:00:04 2019, from Unix, original size 10240
どうやら.tar
じゃなくて.gz
っぽいですね. 拡張子を変えておきましょう.
$ mv flag.tar flag.gz
$ gzip -d flag.gz
解凍されたflag
を見てみます.
$ file flag
flag: POSIX tar archive (GNU)
今度こそ.tar
ファイルですね. 拡張子を変更して解凍します.
$ mv flag flag.tar
$ tar -xzvf flag.tar
x flag
$ file flag
flag: ASCII text
$ cat flag
RITSEC{pcaps_0r_it_didnt_h@ppen}
CTRL-c to close
出ました.
RITSEC{pcaps_0r_it_didnt_h@ppen}
終わりに
ここまで読んでくださりありがとうございます.
次はパスワードクラック用ツールであるJohn the Ripperの使い方をマスターして記事にでもできたらと思っている次第です.