【UNbreakable International 2024 - Team Phase】Writeup


4/5(金) 18:00～4/7(日) 18:00まで開催されたUNbreakable International 2024 - Team Phaseに参加してきました。
トータルで1494pt(24位/241チーム)でした。
以下、writeupとなります。

## wicked-firmware(Reverse Engineering、Forensics)
`firmware.bin`というファイルを渡されて、以下の問題の答えを投入する形でした。
### Q1. Provide the u-boot version. Flag format: numbers only.（u-bootのバージョンは？）
ファームウェアという事なのでbinwalkを実行したところ複数のファイルを確認することができました。
```binwalk実行結果
┌──(kali㉿kali)-[~/Desktop/20240406]
└─$ binwalk -e firmware.bin

┌──(kali㉿kali)-[~/Desktop/20240406/_firmware.bin.extracted]
└─$ ll
total 46592
-rw-r--r--  1 kali kali 13908480 Apr  6 10:27 118582.squashfs
-rw-r--r--  1 kali kali    95068 Apr  6 10:27 5CF0
-rw-r--r--  1 kali kali 15261605 Apr  6 10:27 5CF0.7z
-rw-r--r--  1 kali kali    51200 Apr  6 10:27 E5F27C
-rw-r--r--  1 kali kali  3155856 Apr  6 10:27 FA30
-rw-r--r--  1 kali kali 15221349 Apr  6 10:27 FA30.7z
drwxr-xr-x 16 kali kali     4096 Apr  6 10:27 squashfs-root
```

抽出できたファイルを色々とstringsで覗いていたところ、Q1の答えっぽい文字列を見つけることができたので、`1.1.4`と入力したところflagを獲得。
※以下はここのサイズの関係上でgrepしていますが実際には大量に文字列が出てきます。
```
┌──(kali㉿kali)-[~/Desktop/20240406/_firmware.bin.extracted]
└─$ strings 5CF0 | grep 1.1.4           
U-Boot 1.1.4-g4df6eb16-dirty (Nov 30 2018 - 12:33:00)
```
### Q2. Provide the admin password. Flag format: Unix-like shadow password format.（adminのパスワードは？）

`squashfs-root`をさらに調査してみたところ、どうやらファームウェアという事でLinuxのディレクトリ構成になっていました。
なので、パスワードは？という事なので`/etc/passwd`をのぞいてみたところ一覧があったので、adminの行をそのまま投入してflagを獲得。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/e2da8c85-1de4-c295-b2a2-88f383c3c183.png)

### Q3. Provide the hostname added besides localhost.（localhost以外に追加されたホスト名は？）
`/etc/hosts`を調査したところ、localhost以外のホスト名を見つけることができたので、これを投入してflagを獲得
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/e64dc34b-999c-c472-093c-c77452cdb4cf.png)

## wicked-monitoring（Forensics）
`wicked-monitoring.evtx`というwindowsのイベントログが記録されたファイルを渡されて、以下の問題の答えを投入する形でした。
とりあえずログの時刻の順番で眺めていたら怪しいログを見つけたので、これを投入したらFlagを獲得できました。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/f4cc9b78-3701-edd4-3465-80cb40ec2fa7.png)


### Q1. Identify the compromised account（漏洩したアカウントは？）
Userの欄から`IEUser`が答え。
### Q2. Provide the name of the malicious executable used in the attack.（攻撃に使用された悪意のある実行ファイルの名前は？）
CommandLineの欄から`plink.exe`が答え。
### Q3. What is the protocol exploited in the attack?（攻撃にしようされたプロトコルは？）
CommandLineの欄に宛先ポートで3389があり、`RDP`が答え。

## secrets-secrets-secrets（Cryptography）
`decrypt.py`と`secret`というファイルが渡されました。
`decrypt.py`については以下の左側の通りだったので見やすくするために右側の通り変数の置換を行いました。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/45f0ea00-5d84-0794-88a4-2e935b379309.png)

15行目で入力した文字列を受け取り、19行目で一致していると判定できたら突破できると見込みました。
色々といじっていると15行目で必要な文字列は`load_file`という事が分かりましたので実行したところ、`secret`の中身が変わりました。
```
┌──(kali㉿kali)-[~/Desktop/20240406/_firmware.bin.extracted]
└─$ python .\decrypt.py
load_file
PASS
Enter the decryption key: load_file
load_file
Decryption successful.
```

左側が最初の`secret`で上記の通り`decrypt.py`が成功したところ右側の出力を受け取りました。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/00171a8e-d535-0863-4403-25fcf56c2cbd.png)

後はCyberChefにかけたところ、無事にFlagを獲得。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/2846fe13-8ae1-cb01-43bd-1940b49d4a7e.png)

## threat-monitoring（Threat hunting、Incident Response）
Elasticを使ってログを分析する問題。
色々とフィルターをいじったりして眺めていると、こんな感じのログがあったのでalnera●euに設置されたjsファイルがspammer-paradise●comから別のサイトにリダイレクトしたのだと判断。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/be828e75-fa58-f816-d0ad-a996944ecd80.png)
Flagのフォーマットがドメインという事でTLDは不要という事を理解するのに少し手間取った。
### Q1. Provide the name of the compromised domain.Flag format: term1-term2（侵害されたドメインは？）
`spammers-paradise`
### Q2. Provide the name of the malicious domain where victims were redirected （リダイレクトされた悪意のあるドメインは？）
`alnera`
### Q3. Provide the IP of the compromised website（侵害されたページのIPは？）
`94●76●245●25`※別のログに記載があったのでそこから引用

## sums-up（Network）
DNSだけのpcapファイルが渡される。
ログのudp.checksumのみを抽出するとFlagになるCTFありがちな問題。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/3ba5d106-b4e0-f3d6-15f4-3a2204e16d81.png)
まずはTsharkでudp.checksumのみを抽出。
```
┌──(kali㉿kali)-[~/Desktop/20240406]
└─$ tshark -r malicious_sums.pcap -T fields -e udp.checksum > result.txt 
```
result.txtの内容を復号化して、内容を人力で抽出してFlagを投入。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482905/16e17254-b94a-2fac-5ed2-1ea152d0a0de.png)

## 最後に
ほかにもいくつか解けた問題もあるのですが、なぜかフラグが取れてしまったものもあるのでそちらは省略しています。
OSINTやReverse Engineering 関連が途中までわかったがフラグにたどり着けない、などもあったので引き続き勉強したいと思います。

こんなコメントもありましたがあいにくそんな友人はいない。
PS: Playing in teams is highly encouraged in this phase but individuals are also welcomed. :)