Monitored

Publicado: 08 de Mayo de 2025 Autor: Josรฉ Miguel Romero aka x3m1Sec Dificultad: โญ Medium
๐ Descripciรณn
Monitored es una mรกquina Linux de dificultad fรกcil que implica la explotaciรณn de un sistema de monitorizaciรณn Nagios XI. El recorrido comienza con la enumeraciรณn de servicios, donde encontramos un servidor web Apache, LDAP, SSH y SNMP.
A travรฉs del servicio SNMP descubrimos credenciales de un usuario deshabilitado que nos permiten obtener un token de API para Nagios XI. Con este acceso limitado, explotamos una vulnerabilidad de inyecciรณn SQL (CVE-2023-40931) en el componente de mensajes banner para extraer informaciรณn de la base de datos.
Utilizando las API keys obtenidas, creamos un usuario administrador en Nagios XI que nos permite ejecutar comandos remotos y conseguir acceso al sistema como usuario nagios. Finalmente, abusamos de un script que podemos ejecutar como sudo y que maneja enlaces simbรณlicos de forma insegura para obtener la clave SSH privada del usuario root y completar la mรกquina.
๐ Metodologรญa
๐ญ 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 TCP
Enumeraciรณn de servicios UDP
NOTA: Especificamos la flag -F para escanear los puertos mรกs comunes.
๐ Enumeraciรณn Web
Puerto 80 HTTP (Apache 2.4.56)
Gracias a la enumeraciรณn de servicios con nmap descubrimos que se estรก aplicando una redirecciรณn al vhost nagios.monitored.htb
โ ๏ธ Debemos agregar este dominio a nuestro archivo hosts.


Nagios es otro sistema y producto de monitoreo de red. Nagios ha tenido una amplia variedad de problemas a lo largo de los aรฑos, incluida la ejecuciรณn remota de cรณdigo, la escalada de privilegios de raรญz, la inyecciรณn SQL, la inyecciรณn de cรณdigo y el XSS almacenado. Si se encuentra con una instancia de Nagios, vale la pena buscar las credenciales predeterminadas nagiosadmin:PASSW0RD y tomar las huellas digitales de la versiรณn.
EN esta ocasiรณn no tenemos รฉxito con las credenciales por defecto.
๐ท๏ธ Fuzzing de vhosts
Relizamos fuzzing de vhosts por si pudiรฉsemoa aรฑadir algo mรกs a nuestro scope pero รบnicamente encontramos el de nagios

๐ท๏ธ Fuzzing de directorios
Como รบnico hallazgo relevante encontramos el recurso /nagiosxi
NOTA: indicamos la flag -k para omitir los certificados TLS invรกlidos
389 OpenLDAP
Usamos el siguiente script para la enumeraciรณn LDAP:
Anonymous bind estรก deshabilitado.

Tambiรฉn podemos verificarlo con ldapsearch:
161 SNMP UDP
Lanzamos la herramienta snmp-check para enumerar informaciรณn de este servicio:
Hay mucha informaciรณn pero en la parte relativa a "procesos" descubrimos algo interesante:

Parece que se estรก llamando un script con el usuario svc y una contraseรฑa:
svc:XjH7VCehowpR1xZB
Probamos esta contraseรฑa con diversos servicios como SSH, a intentar enumerar LDAP con credenciales y con el panel de login de Nagios, pero no tenemos รฉxito, aunque sรญ notamos que algo cambia en el panel de login de Nagios en el mensaje que recibimos:

Ya no nos indica Invalid username or password.ahora tenemos otro error distinto lo cual nos hace sospechar que el usuarios svc exista con esas credenciales pero ha sido deshabilitado porque ademรกs el error es distinto si la contraseรฑa no es correcta.
Tenemos credenciales, pero no podemos acceder a la interfaz web debido a que la cuenta estรก deshabilitada. Investigando en Nagios , encontramos este post https://support.nagios.com/forum/viewtopic.php?p=310411#p310411 en los foros de Nagios que nos proporciona el siguiente comando, utilizando la API del servicio:
Si lo usamos usando las credenciales descubiertas obtenemos un token que es vรกlido durante 5 minutos:

Seguimos las instrucciones del post para ver cรณmo puede usarse este token:

Funciona asรญ que si aplicamos esta misma lรณgica al recurso /nagiosxi/index.php?token=XXX deberรญamos tener acceso al index de la pรกgina:
Logramos acceder con รฉxito y enumerar la versiรณn: 5.11.0
Parece que esa versiรณn es vulnerable a SQL injection:CVE-2023-40931 https://pentest-tools.com/vulnerabilities-exploits/nagios-xi-v5110-sql-injection_23763
๐ Explotaciรณn
Debido a un mensaje o banner hecho en ajax. Hay un post donde se menciona esta vulnerabilidad: https://outpost24.com/blog/nagios-xi-vulnerabilities/
Activamos el interceptor de Burpsuite y refrescamos la pรกgina y cambiamos la peticiรณn a POST:

Nota: Asegurarse de cambiar el valor Cookie por la cookie de autenticaciรณn de su sesiรณn.

Enviando la peticiรณn, vemos un error SQL en la pestaรฑa Respuesta, confirmando que podemos inyectar consultas SQL en el servicio.
Existe un payload de sqlmap que permite automatizar esta inyecciรณn:
https://github.com/sealldeveloper/CVE-2023-40931-PoC
Encontramos informaciรณn de dos usuarios con los hashes en formato bcrypt:
Intentamos crackear estos hashes con hashcat y rockyou sin รฉxito:
Hay otro campo mรกs que puede ser interesante de la informaciรณn que hemos obtenido con el dump de la tabla xi_users, el API KEY
Podemos usar el api key para intentar crear un nuevo usuario administrador como se indica en este exploit https://www.exploit-db.com/exploits/44969
Usamos el siguiente payload:

Logramos acceder con nuestra nueva cuenta:

Nos pide cambiar la contraseรฑa la primera vez que ingresamos. Una vez hecho, a continuaciรณn nos vamos a Configure > Core Config Manager > Commands

A continuaciรณn introducimos el siguiente payload para obtener una reverse shell:

Aplicamos la configuraciรณn.
Iniciamos un listener en el puerto que hayamos configurado:
Por รบltimo, vamos a Monitorizaciรณn > Hosts y pulsamos sobre localhost . Seleccionamos ashell como comando de comprobaciรณn y pulsamos en Ejecutar comando de comprobaciรณn :!
Hacemos click en Run Check Command y deberemos recibir nuestra reverse shell:

Obtenemos la primera flag:
๐ Escalada de Privilegios
Al hacer un sudo -l observamos que nagios puede ejecutar una gran variedad de scripts como sudo:

Uno de los que mรกs nos puede interesar es el de getprofile.sh
Leyendo el cรณdigo fuente de getprofile.sh , vemos que parte de su funcionalidad estรก destinada a recoger y consolidar varios registros y archivos de configuraciรณn en un directorio de perfil especificado por el usuario. Este script toma un argumento de la lรญnea de comandos, que se supone que es el nombre o identificador del directorio para almacenar el perfil
El script comprueba si phpmailer.log existe en el directorio /usr/local/nagiosxi/tmp/ y si es asรญ, utiliza el comando tail para copiar las รบltimas 100 lรญneas de este archivo de registro en una carpeta designada dentro de /usr/local/nagiosxi/var/components/profile/ .
Dado que podemos ejecutar el script con privilegios elevados, esta funcionalidad es vulnerable.
La vulnerabilidad proviene del hecho de que el script no valida lo que es $carpeta ni asegura o la ruta utilizada en las operaciones de copia. Este descuido permite varios tipos de ataques al sistema de archivos. sistema de archivos, entre los que destacan:
Ataques de enlaces simbรณlicos: Un usuario puede crear un enlace simbรณlico ( symlink ) llamado phpmailer.log que apunta a un archivo sensible (por ejemplo, /root/.ssh/id_rsa ). Cuando el script se ejecute, seguirรก el enlace simbรณlico y copiarรญa por error datos confidenciales en un directorio accesible.
Esto requiere que tengamos acceso a /usr/local/nagiosxi/tmp/phpmailer.log ,asรญ que lo verificamos

Aunque el archivo de registro no existe, tenemos permisos de escritura en su directorio padre. A continuaciรณn, comprobamos la configuraciรณn SSH para ver si la autenticaciรณn como root estรก habilitada, y si PubkeyAuthentication estรก habilitado.

Esta configuraciรณn significa que si el usuario root tiene una clave privada en su directorio .ssh, podremos usarla para autenticar.
Para llevar a cabo la explotaciรณn seguimos los siguientes pasos:
Crear un Symlink: Creamos un enlace simbรณlico llamado phpmailer.log en el directorio /usr/local/nagiosxi/tmp/ que apunte a un archivo sensible, como la clave privada SSH del usuario root:
Ejecutamos el script que podemos ejecutar como sudo
Acceder a los datos copiados: El script seguirรญa el enlace simbรณlico y copiarรญa el contenido de la clave privada SSH de root de root en la carpeta del perfil bajo nuestro control,

Copiamos la clave privada a nuestro host de ataque y le damos permiso 600 y nos conectamos vรญa ssh como root y obtenemos la flag:

Last updated