Nineveh

Publicado: 03 de Junio de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Medium
๐ Descripciรณn
Nineveh es una mรกquina Linux de dificultad media que presenta mรบltiples vectores de ataque interconectados. El camino hacia la compromisiรณn total incluye:
๐ Enumeraciรณn web exhaustiva en puertos 80 y 443 con virtual hosting
๐ Ataques de fuerza bruta contra paneles de autenticaciรณn
๐ Explotaciรณn de Local File Inclusion (LFI) para lectura de archivos del sistema
๐ Inyecciรณn de cรณdigo PHP a travรฉs de phpLiteAdmin vulnerable
๐ Combinaciรณn de vulnerabilidades (LFI + RCE) para obtener shell inicial
๐๏ธ Uso de claves SSH privadas extraรญdas mediante esteganografรญa
โก Escalada de privilegios aprovechando vulnerabilidad en chkrootkit
Esta mรกquina es excelente para practicar la cadena de exploits, donde cada vulnerabilidad individual no es suficiente por sรญ sola, pero su combinaciรณn permite la compromisiรณn completa del sistema.
๐ญ Reconocimiento
Ping para verificaciรณn en base a TTL
๐ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.
Escaneo de puertos
Enumeraciรณn de servicios
โ ๏ธ Importante: Detectamos durante la fase de enumeraciรณn con nmap que se estรก realizando virtual hosting. Debemos aรฑadir el siguiente vhost a nuestro fichero /etc/hosts
๐ Enumeraciรณn Web
80 HTTP (http://nineveh.htb/)
Al acceder al puerto 80 encontramos lo que parece ser un servidor apache en desarrollo, con un mensaje que indica que el contenido no ha sido aรฑadido aรบn:

๐ท๏ธFuzzing de directorios
Al realizar fuzzing de directorios usando herramientas como feroxbuster, gobuster y dirsearch encontramos algunos recursos interesantes.


๐ Panel de Login Departamental
Al acceder a http://nineveh.htb/department/files/ somos redirigidos a un panel de login.
Rรกpidamente nos percatamos de que al probar algunas credenciales genรฉricas el panel nos indica que el usuario admin existe porque cuando introducimos otro distinto nos indica lo contrario:


Tambiรฉn encontramos un comentario del administrador en el cรณdigo fuente de la pรกgina:

๐ฅ Ataque de Fuerza Bruta
Tras descartar que una posible vulnerabilidad de tipo SQLi en el panel de login, optamos por la vรญa de intentar un ataque de fuerza bruta usando el usuario admin y el diccionario rockyou mediante http-post-form y la herramienta hydra:
Transcurridos unos minutos obtenemos la contraseรฑa del usuario admin:

Al acceder con las credenciales obtenidas encontramos el siguiente mensaje:

Revisamos el otro servicio expuesto en el puerto 443 por si estas referencias se refiriesen a dicho servicio.
๐๏ธ Vulnerabilidad LFI (Local File Inclusion)
Merece la pena analizar si el parรกmetro notes es vulnerable a LFI. Aquรญ estรก la lista de payloads que probรฉ:
ninevehNotes.txt
Sin error, muestra nota
/etc/passwd
No se ha seleccionado ninguna nota.
../../../../../../../../../../etc/passwd
No se ha seleccionado ninguna nota.
ninevehNotes
Advertencia: include(files/ninevehNotes): no se pudo abrir el flujo: No existe el archivo o directorio en /var/www/html/department/manage.php en la lรญnea 31
ninevehNote
No se ha seleccionado ninguna nota.
files/ninevehNotes/../../../../../../../../../etc/passwd
El nombre del archivo es demasiado largo.
files/ninevehNotes/../../../../../../../etc/passwd
El contenido de/etc/passwd
/ninevehNotes/../etc/passwd
El contenido de/etc/passwd
Parece estar comprobando que la frase ninevehNotes estรฉ en el parรกmetro, o de lo contrario simplemente muestra โNo Note is selected.โ. Pero hay formas de evitar eso, ya sea simplemente eliminando la extensiรณn y subiendo directorios, o comenzando en / y luego entrar en una carpeta inexistente ninevehNotes e inmediatamente retrocede con ../.
Cofirmamos el LFI con el siguiente payload:

443 HTTP (https://nineveh.htb/)

A primera vista no hay gran cosa salvo esta imagen, realizamos fuzzing para ver si encontramos algo de utilidad.
๐ท๏ธFuzzing de directorios
Realizamos fuzzing de directorios con gobuster especificando la flag -k para omitir la comprobaciรณn del certificado:
Encontramos un directorio /db y otro /secure-notes que merece la pena analizar:
https://10.10.10.43/secure_notes/

๐ผ๏ธ Esteganografรญa en /secure-notes
รnicamente vemos una imagen, no hay tampoco nada en el cรณdigo fuente, por lo que probablemente se estรฉ usando esteganografรญa para ocultar algo en ella.
Descargamos la imagen. En este caso no podemos usar steghide porque no es compatible con el formato .png. Pero podemos usar binwalk o incluso strings para ver si vemos algo:
Aunque podemos usar binwalk -e nineveh.png en este caso con el comando strings ya conseguimos ver una clave privada RSA que pertenece al usuario amrois:
El problema es que no tenemos ningรบn servicio SSH expuesto, por lo que esto ahora mismo todavรญa no nos sirve.
๐ Explotaciรณn de phpLiteAdmin v1.9
Al acceder a https://nineveh.htb/db/ encontramos un panel de un servicio phpLiteAdmin del que ademรกs podemos enumerar la versiรณn.
๐จ Ataque de Fuerza Bruta
Esta versiรณn del servicio presenta varias vulnerabilidades, pero requieren de estar autenticado. La รบnica vรญa que nos queda es usar nuevamente hydra con este panel para ver si logramos encontrar la contraseรฑa:
con -l fake simplemente indicamos un usuario aunque en este caso es irrelevante, ya que no hay campo en el formulario para el usuario, pero la herramienta lo exige.

๐ฏ Explotaciรณn de RCE
Buscamos exploits pรบblicos para esta versiรณn vulnerable de phplite. Uno de los mรกs interesantes e el de Remote PHP Code Injection para obtener una RCE

Ingresamos al panel de phpLiteAdmin y vemos que existe una รบnica base de datos llamada test y no existen tablas:

Los pasos que indica el exploit son los siguientes:
1 Crear una nueva base de datos cuyo nombre termine en .php:

2 A continuaciรณn, cambiamos a la nueva base de datos para crear una tabla con un campo de texto con un valor predeterminado de un webshell PHP bรกsico:

NOTA: Importante a la hora de usar la php shell usar " en el PHP, ya que ' estรก siendo utilizado por la base de datos para definir toda la cadena:

๐ Explotaciรณn Final - LFI + RCE
En este punto ya tenemos nueva web shell subida en la mรกquina, pero ahora no tenemos forma de desencadenar el ataque. ยฟO sรญ? Recordemos el LFI descubierto en pasos anteriores:

Ahora simplemente nos quedarรญa usar una bash shell one liner para ganar la RCE.
Lo codificamos a URL:
Iniciamos un listener con netcat
Lanzamos el payload
Ganamos la RCE
๐ค Movimiento Lateral - Usuario amrois
Existe un directorio para el usuario amrois donde se ubica la flag pero no tenemos permisos:
๐๏ธ Uso de la Clave SSH Privada
Tras unos minutos enumerando la mรกquina, descubrimos que hay un servicio ssh corriendo localmente en la mรกquina:
Esto es interesante como una vรญa potencial de escalada, ya que recordemos que tenemos una clave rsa privada del usuario amrois, por lo que nos valdrรญa con guardar dicha clave en un archivo en el directorio /tmp de la mรกquina, darle permisos y autenticarnos vรญa ssh como amrois y ya podemos obtener la primera flag:
๐ Escalada de Privilegios a Root
Tras un buen rato enumerando la mรกquina, descubrimos algo interesante. Hay un directorio en la raรญz que no es usual llamado report:
๐ต๏ธ Monitoreo de Procesos
En los archivos identificamos lo que podrรญa ser un servicio para identificar rootkits porque hay referencias a /usr/bin/chkrootkit. Como sospecho que puede haber haber algรบn poceso en ejecuciรณn que lo estรฉ lanzando cada periodo de tiempo, decido usar pspy o como alternativa usar el siguiente script para monitorizar procesos que se puedan estar ejecutando como root:

Y efectivamente confirmamos que root estรก ejecutando periรณdicamente el comando
๐ฏ Exploit de chkrootkit
Este servicio tiene una versiรณn vulnerable para la cual existe un exploit para escalar privilegios

El txt indica que cualquier archivo en $SLAPPER_FILES se ejecutarรก debido a un error tipogrรกfico debido a este bucle:
Los pasos para llevar a cabo la explotaciรณn es crear un archivo llamado update en el directorio /tmp de la mรกquina introduciendo en รฉl un comando malicioso, para que cuando sea ejecutando por la herramienta podamos escalar privilegios
Iniciamos listener
Creamos el archivo malicioso en la ruta donde lo ejecutarรก chkrootkit y ganamos acceso como root.

Last updated