問題概要
picoCTFの「Ph4nt0m 1ntrud3r」という問題の解説記事です。
- カテゴリ: Forensics
- 難易度: Easy
問題文
解説
myNetworkTraffic.pcapを解析して、隠されたフラグを見つけることが求められます。ステップ1: ファイル形式の確認
myNetworkTraffic.pcapファイルの形式を確認します。$ file myNetworkTraffic.pcap
myNetworkTraffic.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Raw IPv4, capture length 65535)
PCAP形式のネットワークキャプチャファイルであることがわかります。
ステップ2: Wiresharkでファイルを開く
myNetworkTraffic.pcapファイルを開き、解析を行います。$ wireshark myNetworkTraffic.pcap
Wiresharkが起動したら、パケットリストが表示されます。
ステップ3: Wiresharkでパケットを解析する
Wiresharkでパケットを解析します。
時系列に並び替える
まず、問題文にデータを盗まれたという記述があるため、どの時点で異常な通信が発生しているかを確認するために、Wiresharkの「Time」列をクリックして昇順にソートします。
不審なパケットを探す
次に、パケットリストをスクロールして不審なパケットを探します。 パケットを見ていると、No.7のパケットから、データのLengthが4 bytes大きくなっていることがわかります。 直前のLengthは48 bytesですが、No.7のLengthは52 bytesとなっています。なにかデータが追加されている可能性があります。
cGljb0NURg==というデータが追加されていることがわかります。
Base64エンコードされたデータのように見えるので、デコードしてみます。
$ echo 'cGljb0NURg==' | base64 -d
picoCTF
picoCTFとデコードされました。picoCTFのフラグ形式はpicoCTF{...}なので、フラグの一部である可能性があります。他のパケットも確認する
No.7以降のLengthが52 bytesのパケットも同様に確認していきます。 するとNo.1, No.11, No.15, No.16, No.18のパケットにも同様にBase64エンコードされたデータが追加されていることがわかります。 以下に抽出したデータを示します。
ezF0X3c0cw==
bnRfdGg0dA==
XzM0c3lfdA==
YmhfNHJfZA==
MTA2NTM4NA==
これらを順番にデコードしていくと以下のようになります。
$ echo 'ezF0X3c0cw==' | base64 -d
{1t_w4s
$ echo 'bnRfdGg0dA==' | base64 -d
nt_th4t
$ echo 'XzM0c3lfdA==' | base64 -d
_34sy_t
$ echo 'YmhfNHJfZA==' | base64 -d
bh_4r_d
$ echo 'MTA2NTM4NA==' | base64 -d
1065384
} が足りていないような気がします。見逃している可能性があるので、もう一度パケットを確認します。fQ==というデータが含まれていることがわかります。
これをデコードしてみます。
$ echo 'fQ==' | base64 -d
}
}とデコードされました。これを先ほどデコードしたデータの末尾に付与すると、完全なフラグが得られます。
Lengthが44 bytesと短めだったため、見逃していました。復元できたフラグは以下の通りです。
picoCTF{xxxxx}
※今更感はありますが、フラグはマスクしています。
使用したコマンドの簡単な解説
file
file <ファイル名>
ファイルの種類(マジックナンバー)を判定するコマンドです。 PCAPを扱う問題では、まずこれで「本当にpcapか?」を確認しておくと手戻りが減ります。
wireshark
wireshark <pcapファイル>
PCAPをGUIで開いて解析するためのコマンドです。 時系列、Length、ペイロードなどを見ながら「怪しいパケット」を絞り込みます。
base64
echo '<Base64文字列>' | base64 -d
= を含む文字列が出てきた場合、Base64の可能性があるので試す価値があります。まとめ
この問題は、PCAP内の「通常より少しだけ長いパケット」に混ざったBase64文字列を拾って復元する、フォレンジックの基本が詰まった1問でした。
▼ポイントは以下の通りです。
- Wiresharkで時系列に並べ、長さ(Length)の差分から怪しいパケットを絞る
- ペイロード末尾に付与された文字列がBase64っぽいかを見抜く(
=が付く等) - 断片をデコードして順番に結合し、
picoCTF{...}形式に復元する
閲覧ありがとうございました!