SUNCTFWriteUp
こんにちは。aki*famです。
遅くなりましたが、今回は僕の大学の後輩たちが主催したCTF(CaptureTheFlag)であるSUNCTFに参加したのでそのWriteUpを書こうと思います。
(権利とかが不明なので文章のみの解説です。分かりづらくて申し訳ありません)
概要
当日は午前中は作問者からの問題のヒントとなる技術セッション、午後からは午前中に解説した技術やツールを使用してのCTFとなりました。
CTFとは
Capture The Flagの略で情報セキュリティ技術を競うセキュリティコンテストです。
様々な課題からFlag(フラグ)という文字列を見つけ出すと得点を得る事が出来ます。
問題とWriteUp
Welcome部門
Welcome to SUNCTF 2020
CTFには必ず存在するフラグの形式を確認する問題です。
そのまま書いてあるフラグを打ち込むだけです。
Network部門
Login page
今回のNetwork部門はすべてキャプチャしたパケットファイル(pcap)が与えられます。
この問題では午前中のセッションで説明のあったパケットキャプチャソフトを用いpcapファイルを開き、通信の一連の流れを追うことのできる機能を用いて通信内容を解析したところ普通にフラグが入っていたがこれを入力しても正解にはなりませんでした。
フラグの中の文字列が変数名っぽい値であったので該当する変数の値を代入したところフラグを導き出すことができました。
File transfer
この問題はFTP(File Transfer Protocol)を用いた問題となっておりソフトを用いてファイルを解析するとFTPのやり取りが平文で表示されました。ここからFTPのコマンドでファイルをサーバにアップロードもしくはサーバからダウンロードしている通信を探し、その通信のデータ部分を見ることでフラグを取り出すことができます。
Telnet mail
この問題はメールを平文で送っているパケットが表示されました。
なのでメールのデータ構造からメールの添付データ部分のみを取り出しこれをBase64でデコードします。そうするとバイナリ上で頭の部分がPKから始まるZipファイルであることが分かります。このZipファイルを開くとフラグの書かれた画像ファイルが入っており、そこからフラグを入手できます。
PPAP
この問題ではパケットの内容をUTF-8に変換するとどうやらパスワードのやり取りをしているということが分かります。そしてそれよりも前の通信の内容を確認すると何やらデータのやり取りがされています。これもバイナリ上で頭がPKから始まるZipファイルであることが分かるのでZipファイルとして保存して展開してみます。展開の際にパスワードを要求されたので事前に取得しているパスワードを入力して展開します。
中にはExcelファイルが入っており開くと一番上にフラグが記載されています。
解説で知りましたがこれは昨年の10月にハウステンボスで行われたCSS(Computer Security Conference)での論文発表がもととなっているそうです。
Web部門
作成してくれた後輩君にはめちゃくちゃ申し訳ないのですが全く解けませんでした。
ただ競技後の解説を聞くと解けなきゃいけないものばかりだったのでかなり反省です。
Forensics部門
images
画像ファイルが配布されそのファイルを開いてみると「No Flags exist for this image」と表示されました。
タイトルと午前中のセッションからこの画像は複数の画像を合わせたものではないかと考え解析ツールで画像を調べると「HINT:META」と書かれた画像が存在することが分かりました。
この「META」というのはメタデータ(画像に付随している様々なデータ)の事ではないかと考え、この画像を別途保存しメタデータをWindowsのエクスプローラーのプロパティからチェックすると著作権の部分に怪しい文字列があり、この文字列をBase64でデコードするとフラグを取り出すことが出来ました。
Antiphase
音声ファイル(wav)が配布されたので、これを午前中のセッションで解説された音声解析ソフトで解析しスペクトログラムで表示すると左右の音声データのうち右の音声データに何やらフラグらしい文字列が隠れているのが読み取れました。自分はこれを力業で読み取って正解してしまったのですが、これは本来の解法ではないので解法の方を紹介しようと思います。
まず音は波ですので逆位相の波を合成すると消滅します。
これを応用し左右の音声データを切り離し、除去したいノイズのみが流れている左側の音声データを加工し逆位相のノイズデータを作成します。
この作成した逆位相のノイズデータを右側のフラグを含む音声データと合成するとノイズが消えてフラグの文字列が出てくるという仕組みです。
正直最初は全然解き方のロジックが分かりませんでしたが解説を聞くと高校物理の範囲でありとても初歩的な問題であるということが分かりました。
しかもこの音声ファイルは後輩君が自分で作成したオリジナル音源とのことで唯々、後輩たちの発想力と技術力に脱帽です。
Big brothers mischief
ブラウザのキャッシュがファイルとして渡され、中身を見た時点で数が多すぎて自分は挫折しました。
解法としては中の多数のファイルをLinuxコマンドのfileコマンドとgrepコマンドで画像のキャッシュのみを抽出します。さらにその中からメタデータが付与されている画像データのみを抽出すると6つに候補が絞られます。その中のメタデータを見ていくとフラグが入っているというわけです。
感想
一応結果は1位でしたが自分としてはまだまだ納得のいかない点も多かったため自分の至らなさを再認識する事が出来ました。
というか後輩たちのすごさにただただ感心しっぱなしだったというのが正直なところです。
そして開催に携わった後輩たちや同輩は本当にお疲れさまでした。