Enumeración
Para comenzar voy a realizar un escaneo de puertos usando nmap:
Por lo que veo se encuentran abiertos los puertos 22 y 80, así que voy a ingresar en la página web para ver de que se trata:
Pareciera ser una página que permite cargar un archivo con extención .md, así que realicé la prueba y así es. Solo permite extensión markdown. También probé cargar un payload .php y .py pero no hubo forma, únicamente admite la extensión .md.
Por otro lado note que al cargar un archivo automáticamente me redirige a una página que me muestra el texto que cargue, con lo cual sospecho que puede ser vulnerable a Cross Site Scripting (XSS). Para comprobarlo cree un archivo .md con el siguiente código:
<script> alert(‘Esta es una alerta’) </script>
Al cargarlo veo que me devuelve un cartel con el texto de la alerta. Con lo cuál la página definitivamente es vulnerable a XSS.
Ahora voy a realizar una enumeración de directorios con gobuster para ver si encuentro algo mas:
Acá veo varios directorios interesantes, los cuales voy a investigar más en profundidad. También realicé un análisis con FFUF para encontrar hosts virtuales:
Encontré que se puede acceder a stadistics.alert.htb pero al intentar ingresar me aparece un login:
Explotación
Después de pensar un buen rato y realizar varios intentos fallidos llegue a la conclusión de que es posible enviar un payload en el archivo .md y que este lo habrá el administrador. Llegue a esta conclusión ya que note que al cargar un archivo me da la opción de compartir la url, así que pensé que era posible compartir la url con el administrador desde la pagina de contacto.
Tras estar un buen rato probando diferentes payloads logre dar con el correcto:
Este payload lo envié a la página como un archivo .md. Luego compartí la ruta del payload por medio de la página de contacto. Paralelamente inicie una escucha con netcat así cuando el administrador abre el enlace automáticamente veo la respuesta en mi máquina.
Aca encontré 3 usuarios, root, David y albert.
Recordé que había un host virtual que pedía credenciales para ingresar, así que voy a tratar de ingresar en la configuración del host virtual para ver si puedo obtener algo de utilidad.
Utilizando el mismo payload (únicamente cambie la ruta del fetch) ingrese en la configuración del servidor virtual. Gracias a la enumeración se que el servidor es apache, y en general la configuracion de los servidores apache se encuentra en el archivo /var/www/host-virtual/.htpasswd. Asi que probe con esto y me devolvió un hash:
Ahora voy a guardar el hash en un archivo llamado hash.txt y lo voy a intentar descifrar usando John the ripper.
Con las credenciales que obtuve de John The Ripper ya puedo ingresar mediante SSH.
Simplemente listando encuentro la bandera de usuario. Ahora voy a intentar acceder como root para obtener la bandera que falta.
Escalada de Privilegios
Ejecutando el comando netstat puedo encontrar que esta abierto el puerto 8080:
Así que lo que puedo intentar es realizar una tunelizacion SSH para acceder al localhost desde el puerto 8080.
Al ingresar en la url del local host en el puerto 8080 me encuentro con una pagina que se titula “Website Monitor”, la cual parece ser utilizada para monitorear el trafico de los sitios web:
No encuentro nada interesante en la página, así que me dirigí a la terminal y busque la carpeta en donde se encontraba website-monitor y note que tenía permisos de root, así que le voy a enviar una reverse Shell.
Para eso creo un archivo .php con mi código:
Abro un servidor con python para poder transferir el archivo:
Y ahora lo envío al directorio /config:
Ahora para ejecutarlo voy a ingresar en 127.0.0.1:8080/config/exploit.php, paralelamente inicio un puerto de escucha con netcat:
Y listo! Ahora solo resta navegar hasta encontrar la bandera root.
Espero que este tutorial te haya sido de ayuda!