TryHackMe Writeup：The Return of the Yeti

# はじめに
本記事はTryHackMeのWriteupです。

Roomは[The Return of the Yeti](https://tryhackme.com/room/adv3nt0fdbopsjcap)、Difficulty（難易度）はHardです。また、このRoomは[Advent of Cyber '23 Side Quest](https://tryhackme.com/room/adventofcyber23sidequest)シリーズの一部として作成されています。

このRoomでは、無線LANのパケットをハッキングする方法について学ぶことができます。

## What's the name of the WiFi network in the PCAP?
ダウンロードしたタスクファイル（`VanSpy.pcapng`）をWiresharkで開くと、SSIDが確認できます。

![スクリーンショット 2024-01-17 0.25.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/d77005a7-afbf-af9e-90fa-f263bc554acc.png)

## 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`

![スクリーンショット 2024-01-18 0.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/00df7ff4-e29e-198c-e394-64fb9841f579.png)

しばらくすると、WPAのパスワードが検出できました。

[^1]: [PcapNg](https://wiki.wireshark.org/Development/PcapNg)

## 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>`

```console
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ポートが使用されていることが分かります。

![スクリーンショット 2024-01-21 0.46.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/f57609ef-9c5a-234d-97a1-4e831419774f.png)

Lengthなどパケットサイズを手がかりにして、特徴がないか調査します。パケットサイズが大きい怪しいパケットを発見したため、Wiresharkの「統計」から「TCPストリームグラフ」を開くと、GitHubからツールをダウンロードしているのが確認できました。

![スクリーンショット 2024-01-21 1.02.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c6210f39-d28f-c506-7199-39406815e1ae.png)

## 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`ファイルが生成されます。

```console
-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`

パスワードが聞かれるため、パスワードを入力します。※パスワードはタスクの回答であるツールの名称を入力

```console
Enter Import Password:
```

パスワードを入力後`priavte_key.pem`ファイルが生成されます。

```console
-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`

```console
writing RSA key
```

`private.key`ファイルが生成されます。

```console
-rw------- kali             kali               2024/01/21 15:09           1704 private.key
```

WiresharkでRDPトラフィックを復号するには「編集」から「設定」画面を開きます。また、「RSA鍵」から秘密鍵を読み込むためには「RSA鍵」の「新秘密鍵ファイルを追加...」を追加して「OK」を押します。

![スクリーンショット 2024-01-21 15.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/d9346cc2-5806-e12f-1174-cdb53decb5e1.png)

なお、以下の様に「Protocols」のTLSから設定することもできます。ProtocolsのTLSから設定する場合は「RSA keys list」の「編集」を押します。

![スクリーンショット 2024-01-21 19.10.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/395b2752-b15d-574b-17cb-3161cb936961.png)

以下の情報を入力します。

![スクリーンショット 2024-01-21 19.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b9eb5794-cf85-dc74-ba5d-aa30c8db2ad5.png)

ファイルから「PDUをファイルにエクスポート...」を押します。

![スクリーンショット 2024-01-21 15.46.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/a769dfc8-b6be-6814-9d1b-4c8a5461990c.png)

「OSI　layer7」を選択して「OK」を押します。

![スクリーンショット 2024-01-21 15.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/80bb0280-3a0a-0079-e951-37fd5eb1705d.png)

これで復号化されたRDPトラフィックが参照できます。通常、RDPはトランスポートプロトコルとしてTPKTを使用します。TPKTはTCP上で実行されるので、フィルタツールバーに`(tpkt) && (ip.src == 10.1.1.1)`を入力して絞り込みを行います。

![スクリーンショット 2024-01-21 20.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/724c0ae2-85d2-8358-871c-bef2bb4a6d47.png)

絞り込んだパケットを確認すると、質問の回答が見つかります。

![スクリーンショット 2024-01-21 15.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b0d9cf1c-3a9f-f422-9973-0f52b1f86458.png)

[^2]: [PKCS 12](https://en.wikipedia.org/wiki/PKCS_12)

## What is the content of the yetikey1.txt file?
引き続き最後の質問の回答を見つけます。

![スクリーンショット 2024-01-21 16.00.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/0ec04503-96cb-4810-bd33-e883e33e2b0e.png)

# おわりに
aircrack-ngやairdecap-ngなど各種ツール及びWiresharkでRDPトラフィックを復号化する方法について学ぶことができました。

## 参考
- [exported_pdu](https://wiki.wireshark.org/Protocols/exported_pdu)
- [RDP](https://wiki.wireshark.org/RDP)
- [Wiresharkによるパケット解析講座 11: RDPトラフィックの復号](https://unit42.paloaltonetworks.jp/wireshark-tutorial-decrypting-rdp-traffic/)