🟢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.
Hay dos servicios disponibles. Vamos ahora con el escaneo profundo.
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.
Nos dará error. Debemos eliminar la línea cve2019_16278.py. Además, debemos ejecutarlo con Python2.
Generamos una terminal interactiva.
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.
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.
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_www
contiene una carpeta protected-file-area
protegida por .htaccess
y que contiene un archivo llamado backup-ssh-identity-files.tgz
. Lo copiamos a la /tmp
carpeta 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.
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.
Y ya tendríamos terminada el CTF Traverxec.
Last updated