【picoCTF】Ph4nt0m 1ntrud3r - WiresharkでPCAPを解析して不審な通信からフラグ発見

問題概要

picoCTFの「Ph4nt0m 1ntrud3r」という問題の解説記事です。

  • カテゴリ: Forensics
  • 難易度: Easy

問題文

picoCTF Ph4nt0m 1ntrud3r

解説

この問題では、与えられた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でファイルを開く

次に、Wiresharkを使用してmyNetworkTraffic.pcapファイルを開き、解析を行います。
$ wireshark myNetworkTraffic.pcap

Wiresharkが起動したら、パケットリストが表示されます。



ステップ3: Wiresharkでパケットを解析する

Wiresharkでパケットを解析します。

時系列に並び替える

まず、問題文にデータを盗まれたという記述があるため、どの時点で異常な通信が発生しているかを確認するために、Wiresharkの「Time」列をクリックして昇順にソートします。

Wireshark Time Sort

不審なパケットを探す

次に、パケットリストをスクロールして不審なパケットを探します。 パケットを見ていると、No.7のパケットから、データのLengthが4 bytes大きくなっていることがわかります。 直前のLengthは48 bytesですが、No.7のLengthは52 bytesとなっています。なにかデータが追加されている可能性があります。

Wireshark Suspicious Packet

ペイロードを確認すると、末尾にcGljb0NURg==というデータが追加されていることがわかります。
Wireshark Payload

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
明らかにフラグに見えますが、最後の } が足りていないような気がします。見逃している可能性があるので、もう一度パケットを確認します。

時系列に並べたパケットの中で最後のパケットNo.21に注目すると、ペイロードにfQ==というデータが含まれていることがわかります。
Wireshark Final Payload

これをデコードしてみます。

$ 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文字列をデコードして平文へ戻します。 パケット中に = を含む文字列が出てきた場合、Base64の可能性があるので試す価値があります。

まとめ

この問題は、PCAP内の「通常より少しだけ長いパケット」に混ざったBase64文字列を拾って復元する、フォレンジックの基本が詰まった1問でした。

▼ポイントは以下の通りです。

  • Wiresharkで時系列に並べ、長さ(Length)の差分から怪しいパケットを絞る
  • ペイロード末尾に付与された文字列がBase64っぽいかを見抜く(= が付く等)
  • 断片をデコードして順番に結合し、picoCTF{...} 形式に復元する

閲覧ありがとうございました!

NEXT
次におすすめ

【picoCTF】Verify - SHA-256チェックサムで正しいファイルを特定し復号

カテゴリ: Forensics難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。