Traverxec - HackTheBox

4 minute read

En este post se explicarán los pasos que se han seguido para conseguir vulnerar la seguridad de la máquina Traverxec en Hack The Box, tal y como se refleja, es un sistema Linux con un nivel de dificultad fácil (4.6).

Ilustración 1:Traverxec.

Se dio comienzo a la fase de enumeración haciendo uso de NMAP:

Ilustración 2: Ejecutando NMAP.

Ilustración 3: Resultados de NMAP.

Analizando los resultados proporcionados por NMAP, destaca el nombre y versión del servidor web Open Source Nhttpd (nostromo).

Ilustración 4: Web en http://10.10.10.165/.

Haciendo una búsqueda en searchsploit se puede encontrar un exploit para el CVE-2019-16278, que afecta a la versión instalada en la máquina objetivo:

Ilustración 5: Exploits para Nostromo 1.9.6.

El exploit se aprovecha de una vulnerabilidad de Path Transversal, para realizar una petición POST modificada, a la ruta donde se encuentra el ejecutable /bin/sh, abriendo así una shell en el sistema víctima:

Ilustración 6: Ejecución del exploit.

Ilustración 7: Usando netcat para abrir una reverse shell.

Ilustración 8: Obteniendo una reverse shell TTY mediante Python.

Teniendo acceso al sistema se ejecutaron diferentes programas de enumeración, con el objetivo de identificar los posibles vectores de ataque que se podrían explotar, para realizar la escalada de privilegios.

Ilustración 9: Descargando de la máquina atacante LinEnum.sh.

Ilustración 10: Descargando de la máquina atacante linpeas.sh.

Ilustración 11: Ejecutando linpeas.sh.

Ilustración 12: Usuarios en la máquina Traverxec.

Ilustración 13: Ejecución de LinEnum.sh.

Ilustración 14: Resultados de LinEnum.sh, mostrando una contraseña cifrada.

Se encontró el hash de una contraseña, perteneciente al usuario David, en el fichero /var/nostromo/conf/.htpasswd. Analizando el contenido del fichero /var/nostromo/conf/nhttpd.conf se puede observar los directorios a los que se tendría acceso introduciendo la contraseña correcta.

Ilustración 15: Hash de la contraseña almacenada en el fichero .htpasswd.

Ilustración 16: Fichero de configuración nhttpd.conf parte 1.

Ilustración 17: Fichero de configuración nhttpd.conf parte 2.

El fichero de configuración /var/nostromo/conf/nhttpd.conf hace referencia al directorio /home y public_www, del usuario David. Debido a los permisos que tenían establecido dichos directorios se podía visualizar su contenido:

Ilustración 18: Visualización del directorio /home/david/public_www/protected-file-area/.

El directorio /home/david/public_www/protected-file-area/ contenía un fichero con la clave privada del usuario David, para conectarse vía SSH. Se tenían los permisos necesarios para copiar el fichero y enviarlo a la máquina atacante.

Ilustración 19: Copiando el fichero backup-ssh-identity-files.tgz.

Ilustración 20: Enviando el fichero a la máquina atacante a través de SFTP.

Otra forma de obtener el fichero con la clave privada del usuario David, era usar JohnTheRipper para obtener la contraseña del hash, que se encontraba en el fichero /var/nostromo/conf/.htpasswd. Uno de los puntos a destacar en este paso, es que se empleó más tiempo de lo normal en obtener la contraseña, posiblemente por los recursos de la máquina atacante.

Ilustración 21: Haciendo uso de JohnTheRipper.

Conectándose a través del navegador a la dirección http://10.10.10.165/~david/public_www/, donde el uso del carácter "~" es importante para indicar el directorio /home del usuario, introducir la contraseña que devolvió JohnTheRipper y descargar el fichero con la clave privada.

Ilustración 22: Acceso a través del navegador, a la ruta del directorio home del usuario david.

Ilustración 23: Introduciendo la contraseña obtenida para acceder al directorio protected-file-area.

Ilustración 24: Descargando el fichero que contiene la clave privada.

Una vez obtenido el fichero, a través de alguna de las dos formas explicadas, se procedió a obtener la contraseña de la clave privada, haciendo uso primero de ssh2john.py y posteriormente con JohnTheRipper.

Ilustración 25: Desempaquetando el fichero backup-ssh-identity-files.tgz y obteniendo la clave privada.

Ilustración 26: Haciendo uso de ssh2john.py y JohnTheRipper.

Ilustración 27: Acceso con el usuario David a través de SSH.

Teniendo acceso al sistema con el usuario David, se consiguió la flag de usuario y se comenzó la escalada de privilegios.

Ilustración 28: Flag user.txt.

En un simple reconocimiento dentro del directorio /home/david/, se identificó otro directorio (/bin) con un fichero ejecutable de extensión "sh".

Ilustración 29: Fichero ejecutable server-stats.sh.

Ilustración 30: Contenido del fichero server-stats.sh y comprobación de los permisos de sudo en el usuario david.

Ilustración 31: Ejecución del fichero server-stats.sh.

No se podía comprobar los comandos que el usuario David podía ejecutar con permisos de administrador, haciendo uso del comando sudo, ya que al ejecutar "sudo -l" no se tenía la contraseña del usuario, pero visualizando el contenido del fichero /home/david/bin/server-stats.sh, se podía apreciar como se hace uso del comando journalctl, combinado con el comando sudo, es decir, se ejecutará con privilegios de administrador en el sistema.

Siguiendo las instrucciones que aparecen en https://gtfobins.github.io/, se consiguió una shell como usuario administrador del sistema. Para ello, simplemente se debía ejecutar el comando journalctl combinado con sudo y reducir el tamaño de la ventana de la consola, porque así se ejecutará el comando less, posibilitando la inyección de "!/bin/bash" y obteniendo la shell como usuario root.

Ilustración 32: Explicación de la escalada de privilegios en https://gtfobins.github.io/gtfobins/journalctl/.

Ilustración 33: Pasos a seguir para obtener una shell del usuario root.

Ilustración 34: Ejecución del comando journalctl combinado con el comando sudo, tal cual está en el fichero server-stats.sh

Ilustración 35: Obteniendo acceso al sistema como usuario administrador.

Teniendo acceso al sistema como usuario root se obtuvo la flag:

Ilustración 36: Flag root.txt.

Como conclusión, se podría decir que ha sido una máquina sencilla de realizar, dado que en una simple enumeración se obtienen los pasos a seguir, pero bastante divertida.