El día de hoy les traigo el primer writeup de una serie de máquinas que he tenido la oportunidad de tratar en la plataforma Hack The Box, en adelante mencionado simplemente como HTB. Debido a las políticas de la plataforma no es posible publicar writeup de máquinas que aún estén activas, por tanto solo serán accesible aquellas entradas (post) de máquinas que hayan sido retiradas, como es el caso de la que les traigo el día de hoy: Traverxec.

Antes una breve muestra de las características publicadas de esta máquina.

Bien, de lleno al asunto, procederemos con las acciones tomadas.

Resumen:

  • Enumeración de puertos y servicios vía Nmap
  • Descubrimiento de vulnerabilidad en servidor Nostromo
  • Explotación de vulnerabilidad CVE-2019-16278
  • Obtención de usuario / Captura del fichero user.txt
  • Escalada de privilegios / Captura de fichero root.txt

Enumeración:

Lo primero como siempre y como parte del reconocimiento del objetivo será hacer un escaneo de puertos y servicios con Nmap. Aquí identificamos el puerto 22 y 80 como abiertos.

El comando empleado fue:

nmap -sS -sV -sC 10.10.10.165

De esta manera incluso llegamos al siguiente baner “nostromo 1.9.6”. Acto seguido buscamos vulnerabilidades vinculadas a esta tecnología e identificamos la vulnerabilidad representada con el CVE-2019-16278.

Obtención de usuario:

Buscando algunos exploits para aprovechar esta vulnerabilidad llegué al investigador Sudoka quien publicó en octubre del año pasado, un automatismo que nos vendrá muy bien.

Fuente del exploit: https://github.com/sudohyak/exploit/tree/master/CVE-2019-16278

El exploit es bastante intuitivo y cuenta con la siguiente descripción detallada de su funcionamiento:

Al ejecutarlo vemos como nos es posible acceder al objetivo, realizar la ejecución de los comandos proporcionados y salir recibiendo la respuesta de dichos comandos ejecutados con éxito. Tal vez la característica de este exploit es justamente eso, que no mantenemos una “persistencia”; La podríamos conseguir, pero de momento no nos será necesario para el propósito.

./exploit.py 10.10.10.165 80 'id; whoami; hostname'

Volvemos a realizar un reconocimiento del objetivo esta vez con el acceso conseguido e identificamos el fichero nhttpd.conf, que nos muestra entre otros datos la siguiente información relevante:

./exploit.py 10.10.10.165 80 'cat /var/nostromo/conf/nhttpd.conf'

También nos llamará la atención el fichero .htpasswd alojado en la misma ruta del fichero anterior.

./exploit.py 10.10.10.165 80 'cat /var/nostromo/conf/.htpasswd'

Al crackearlo vía John The Ripper obtendremos la siguiente contraseña:

john --wordlist=rockyou.txt .htpasswd
john --show .htpasswd

Volvemos a nuestro reconocimiento del objetivo y a partir de la información identificada hasta el momento, hallamos el fichero backup-ssh-identity-file.tgz dentro de una supuesta área protegida de usuario david.

./exploit.py 10.10.10.165 80 'ls -l /home/david/public_www/protected-file-area/'

Recordando lo visto en el fichero nhttpd.conf, concretamente en el apartado homedirs, sabremos que este directorio es accesible vía navegador (HTTP) de la siguiente manera:

http://10.10.10.165/~david/

Esto sabemos que es realmente el contenido del fichero index.html hallado anteriormente. Ahora intentaremos llegar al directorio protected-file-area y como es lógico, no estamos autorizados a su acceso.

curl -I http://10.10.10.165/~david/protected-file-area/

Por lo tanto, emplearemos las credenciales con las que ya nos hicimos del fichero .htpasswd y lograremos descargar el recurso comprimido: backup-ssh-identity-file.tgz.

wget http://10.10.10.165/~david/protected-file-area/backup-ssh-identity-file.tgz --user david --ask-password

Seguidamente descomprimimos el contenido TAR.

tar -xvzf backup-ssh-identity-file.tgz

Ahora vamos a aplicar fuerza bruta al fichero id_rsa para hacernos con la contraseña para acceder vía SSH con este usuario y fichero. En primera instancia emplearemos el recurso ssh2john.

/usr/share/john/ssh2john.py home/david/.ssh/id_rsa > id_rsa_john
john --wordlist=rockyou.txt id_rsa_john
john --show id_rsa_john

Ya con esto, vamos con la conexión vía SSH:

ssh -i home/david/.ssh/id_rsa david@10.10.10.165

Escalada de privilegios:

Para conseguir escalar hasta root, volvemos a realizar un reconocimiento del entorno y nos topamos con el directorio bin dentro del directorio del usuario david, aquí hallamos el fichero server-stats.sh, que observando su contenido evidenciamos en la última línea del código, cómo a través de sudo se ejecuta el binario journalctl a un servicio. En este caso nostromo.

Aprovecharemos la condición de este binario (similar a less), que en su ejecución después de pintarnos en pantalla las últimas 5 líneas de log, se mantendrá a la espera de la interacción del usuario, momento que aprovecharemos para ejecutar !/bin/sh y conseguir de esta forma que nuestra terminal ejecute ordenes con los privilegios elevados.

Más información de journalctl aquí: https://gtfobins.github.io/gtfobins/journalctl/

Y esto es todo por ahora, Traverxec es un máquina muy interesante, que si bien no ha puesto demasiada resistencia, no deja de otorgarnos variantes para nuestro proceso de formación continua. Volveremos con más.