はじめに
本記事はTryHackMeのWriteupです。
RoomはThe Return of the Yeti、Difficulty(難易度)はHardです。また、このRoomはAdvent of Cyber '23 Side Questシリーズの一部として作成されています。
このRoomでは、無線LANのパケットをハッキングする方法について学ぶことができます。
What's the name of the WiFi network in the PCAP?
ダウンロードしたタスクファイル(VanSpy.pcapng
)をWiresharkで開くと、SSIDが確認できます。
What's the password to access the WiFi network?
キャプチャされた無線LANのパケットは、暗号化されています。そのため、そのままではパケットの中身を参照することはできません。aircrack-ngを用いることでパスワードを入手し、暗号化されたパケットを復号化します。
なお、aircrack-ngでパスワードを解読するためには、PcapNg形式1のVanSpy.pcapng
ファイルを標準のPcap形式に変更する必要があります。
WiresharkでVanSpy.pcapng
ファイルをVanSpy.pcap
ファイルに保存し直したら、以下のコマンドを実行します。
$ aircrack-ng VanSpy.pcap -w /usr/share/wordlists/rockyou.txt
しばらくすると、WPAのパスワードが検出できました。
What suspicious tool is used by the attacker to extract a juicy file from the server?
airdecap-ngは、適切なWEP/WPAキーを使用して、WEP/WPAで暗号化されたpcapファイルを復号します。
WPAの解析したパスワードを使用してトラフィックを復号化するためには、以下のコマンドを実行します。
$ airdecap-ng VanSpy.pcap -e <SSID> -p <Password>
Total number of stations seen 4
Total number of packets read 45243
Total number of WEP data packets 0
Total number of WPA data packets 20635
Number of plaintext data packets 0
Number of decrypted WEP packets 0
Number of corrupted WEP packets 0
Number of decrypted WPA packets 20629
Number of bad TKIP (WPA) packets 0
Number of bad CCMP (WPA) packets 0
コマンド実行後VanSpy-dec.pcap
というファイルが生成されるため、再度WiresharkからVanSpy-dec.pcap
ファイルを開きます。
Wiresharkの「統計」から「対話」を選択してTCPのポートを調査すると、3389や4444ポートが使用されていることが分かります。
Lengthなどパケットサイズを手がかりにして、特徴がないか調査します。パケットサイズが大きい怪しいパケットを発見したため、Wiresharkの「統計」から「TCPストリームグラフ」を開くと、GitHubからツールをダウンロードしているのが確認できました。
What is the case number assigned by the CyberPolice to the issues reported by McSkidy?
VanSpy-dec.pcap
ファイルの中身を分析すると、証明書ファイルの一種である.pfx
ファイル2を読み取り、Base64に変換しているパケットが確認できます。従って.pfx
ファイルから秘密鍵を取得する為には、逆の操作を行います。
PowerShellを起動して、Base64エンコードされた文字列からファイルを生成します。
PS> $Base64String = "<BASE64_STRING>"
PS> $Bytes = [Convert]::FromBase64String($Base64String)
PS> [IO.File]::WriteAllBytes("/tmp/cert.pfx", $Bytes)
上記コマンド実行後/tmp/
配下にcert.pfx
ファイルが生成されます。
-rw-r--r-- kali kali 2024/01/21 15:05 2493 cert.pfx
引き続き秘密鍵を抽出する為には、opensslを使用して生成された.pfx
ファイルをPEM形式に変換して、以下のコマンドを実行します。
PS> openssl pkcs12 -in /tmp/cert.pfx -nocerts -out priavte_key.pem -nodes
パスワードが聞かれるため、パスワードを入力します。※パスワードはタスクの回答であるツールの名称を入力
Enter Import Password:
パスワードを入力後priavte_key.pem
ファイルが生成されます。
-rw------- kali kali 2024/01/21 15:08 1932 priavte_key.pem
再度opensslを使用してpriavte_key.pem
ファイルから秘密鍵を出力します。
PS> openssl rsa -in /tmp/priavte_key.pem -out private.key
writing RSA key
private.key
ファイルが生成されます。
-rw------- kali kali 2024/01/21 15:09 1704 private.key
WiresharkでRDPトラフィックを復号するには「編集」から「設定」画面を開きます。また、「RSA鍵」から秘密鍵を読み込むためには「RSA鍵」の「新秘密鍵ファイルを追加...」を追加して「OK」を押します。
なお、以下の様に「Protocols」のTLSから設定することもできます。ProtocolsのTLSから設定する場合は「RSA keys list」の「編集」を押します。
以下の情報を入力します。
ファイルから「PDUをファイルにエクスポート...」を押します。
「OSI layer7」を選択して「OK」を押します。
これで復号化されたRDPトラフィックが参照できます。通常、RDPはトランスポートプロトコルとしてTPKTを使用します。TPKTはTCP上で実行されるので、フィルタツールバーに(tpkt) && (ip.src == 10.1.1.1)
を入力して絞り込みを行います。
絞り込んだパケットを確認すると、質問の回答が見つかります。
What is the content of the yetikey1.txt file?
引き続き最後の質問の回答を見つけます。
おわりに
aircrack-ngやairdecap-ngなど各種ツール及びWiresharkでRDPトラフィックを復号化する方法について学ぶことができました。