Servmon

Publicado: 10 de Junio de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy

๐Ÿ“ Descripciรณn

ServMon es una mรกquina Windows de dificultad fรกcil que presenta mรบltiples vectores de ataque. La explotaciรณn inicial involucra el abuso de una vulnerabilidad de Directory Traversal en el servicio NVMS-1000 para obtener credenciales de usuario almacenadas en archivos de texto. Una vez obtenido acceso SSH, la escalada de privilegios se logra mediante la explotaciรณn de NSClient++, un agente de monitorizaciรณn que permite la ejecuciรณn de scripts externos con privilegios de SYSTEM.

๐ŸŽฏ Resumen Ejecutivo

  • IP de la mรกquina: 10.10.10.184

  • SO: Windows Server 2019

  • Servicios principales: FTP (21), SSH (22), HTTP (80), SMB (445), NSClient++ (8443)

  • Vulnerabilidades explotadas:

    • Directory Traversal en NVMS-1000 (CVE-2019-20085)

    • Escalada de privilegios via NSClient++ (CVE-2019-20098)

๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 128 sugiere que probablemente sea una mรกquina Windows.

Escaneo de puertos

Enumeraciรณn de servicios

๐Ÿ” Enumeraciรณn de Servicios

๐Ÿ“ 21 TCP - FTP

Tras confirmar mediante el escaneo que la sesiรณn anรณnima en el servicio FTP estรก habilitada, utilizamos la herramienta curlftpfs para crear una montura de este recurso y enumerar mejor este servicio: Tras como hemos comprobado mediante el escaneo y la enumeraciรณn de servicios con nmap, la sessiรณn anรณnima en el servicio FTP estรก habilitada.

Usaremos la herramienta curlftpfs para crear una montura de este recurso y enumerar mejor este servicio:

Encontramos un archivo de texto interesante llamado Confidential.txt en el directorio del usuario Nadine en el que le indica al usuario Nathan que ha dejado un documento con sus contraseรฑas en su Escritorio:

Encontramos otro archivo de texto en el directorio del usuario Nathan pero no tenemos permisos para leerlo:

De momento parece que aquรญ podemos hacer poco mรกs.

๐Ÿ—‚๏ธ 445 TCP - SMB

Verificamos si podemos enumerar mediante una null session pero no parece estar habilitada, lo cual es una buena medida de seguridad:

๐ŸŒ 80 TCP - HTTP

Al acceder al servicio de este puerto encontramos una aplicaciรณn llamada NVMS-1000. Buscando informaciรณn pรบblica encontramos que se trata de un Software para centralizaciรณn de cรกmaras IP y grabadores MERIVA SO Windows (NVMS1000_) y MAC (NVMS1200).

Las credenciales por defecto admin:admin admin:123456 no funcionan

๐Ÿ”Ž Fuzzing de directorios

Realizamos fuzzing de directorios pero tampoco hallamos ningรบn recurso interesante que nos sirva como un posible vector de ataque.

## ๐Ÿ’ฅ Explotaciรณn Inicial

๐Ÿ”“ Vulnerability Research - NVMS-1000

Buscamos exploits pรบblicos para el servicio NVMS-1000 y encontramos que este servicio ha tenido vulnerabilidades de tipo Directory Traversal:

CVE-2019-20085 - NVMS-1000 Directory Traversal

๐ŸŽฏ Explotaciรณn del Directory Traversal

Interceptamos la peticiรณn con Burp Suite y utilizamos el payload para confirmar la PoC:

Usamos esta vulnerabilidad para leer el archivo Passwords.txt que estaba en el directorio del usuario Nathan, tal como descubrimos enumerando el servicio FTP:

Payload utilizado:

Veamos si podemos usar esta vulnerabilidad de Directory Path Traversal para leer el archivo Passwords.txt que estaba en el usuario de Nathan tal como descubrimos enumerando el servicio FTP. Para ello usamos el siguiente payload:

๐Ÿ”‘ Contraseรฑas obtenidas:

๐Ÿ” Validaciรณn de Credenciales

Creamos una lista con los usuarios que tenemos y las contraseรฑas para probarlas con los servicios ssh y smb:

โœ… Credenciales vรกlidas encontradas: nadine:L1k3B1gBut7s@W0rk

SSH

Nos autenticamos como nadie en la mรกquina srvmon y obtenemos la primera flag en su directorio de usuario

๐Ÿ” Enumeraciรณn del Sistema

๐Ÿ“Š Anรกlisis de Directorios Interesantes

Verificamos que no tenemos permisos para leer el directorio del usuario Nathan

Enumerando la mรกquina encontramos un directorio que contiene un archivo .db3 que es una base de datos sqlite

Descargamos este archivo a nuestro host de ataque usando scp

No encontramos nada de utilidad.

๐Ÿ› ๏ธ Aplicaciones Instaladas

Seguimos enumerando la mรกquina y esta vez nos centramos en la carpeta de instalaciรณn de aplicaciones:

NSClient es un agente diseรฑado originalmente para funcionar con Nagios, pero que desde entonces se ha convertido en un agente de monitorizaciรณn completo compatible con diversas herramientas de monitorizaciรณn.

Hay varios archivos que merece la pena revisar del directorio de instalaciรณn de esta aplicaciรณn:

changelog.txt nsclient.ini nsclient.log

Encontramos una contraseรฑa en el fichero nsclient.ini .

Recordemos que con nmap enumerando un servicio en el puerto 8443 cuyo banner era NSClient++

## ๐Ÿš€ Escalada de Privilegios

๐ŸŒ 8443 TCP - NSClient++ Web Interface

https://10.10.10.184:8443/index.html

Probรฉ a intentar autenticarme en el servicio con la contraseรฑa encontrada el fichero nsclient.ini pero no logrรฉ ganar acceso. Sin embargo no fue un error de contraseรฑa incorrecta sino un 403 o lo que es lo mismo un error por falta de permisos.

Echando un ojo a esta lรญnea del fichero nsclient.ini me hizo pensar que el acceso a este servicio estรก permitido รบnica y exclusivamente de forma local, aunque el puerto estรฉ expuesto:

Usando SSH solicitรฉ un tรบnel local del puerto 8443 de mi mรกquina mรกquina hacia 127.0.0.1:8443 en la mรกquina remota.

A continuaciรณn accedรญ al servicio en https://localhost:8443/index.html usando la contraseรฑa ew2x6SsGTxjRwXOTy pude acceder al panel:

A continuaciรณn, desde la sesiรณn ssh en windows usรฉ el siguiente comando para enumerar la versiรณn de NSClient++

๐Ÿ’ฃ Exploit - NSClient++ Privilege Escalation

CVE-2019-20098 - NSClient++ permite la escalada de privilegios local: Encontrรฉ algunos exploits pรบblicos para esta versiรณn y uno de ellos permitรญa la escalada de privilegios

Al instalar NSClient++ con el servidor web habilitado, los usuarios locales con privilegios bajos pueden leer la contraseรฑa del administrador web en texto plano desde el archivo de configuraciรณn. Desde aquรญ, el usuario puede iniciar sesiรณn en el servidor web y realizar cambios en el archivo de configuraciรณn, que normalmente estรก restringido.

El usuario puede habilitar los mรณdulos para que revisen scripts externos y programen su ejecuciรณn. No parece haber restricciones sobre el origen de las llamadas, por lo que el usuario puede crear el script desde cualquier lugar. Dado que el servicio NSClient++ se ejecuta como sistema local, estos scripts programados se ejecutan como ese usuario y el usuario con privilegios bajos puede acceder a la escalada de privilegios. Segรบn mi experiencia, se requiere reiniciar para recargar y leer los cambios en la configuraciรณn web.

Requisitos previos: Para explotar esta vulnerabilidad con รฉxito, un atacante debe tener acceso local a un sistema que ejecute NSClient++ con el servidor web habilitado mediante una cuenta de usuario con privilegios bajos y la capacidad de reiniciar el sistema.

Descargamos el exploit:

Los pasos para llevar a acabo la explotaciรณn son los siguientes:

El este caso el punto 1 ya lo tenemos, pues ya hemos obtenido la contraseรฑa y tenemos acceso al servicio desde nuestro host de ataque. Asรญ que accedemos al servicio y nos autenticamos con la contraseรฑa ew2x6SsGTxjRwXOT

El siguiente punto es verificar que en la secciรณn "Modules" tenemos habilitados los mรณdulos CheckExternalScripts y Scheduler

Ahora, en nuestro host de ataque debemo crearnos un archivo evil.bat con el siguiente contenido:

El archivo .bat ejecutarรก la herramienta netcat para conectarse a la ip y el puerto del listener que abramos en nuestro host de ataque.

Para esto debemos subir tanto el archivo .bat como la herramienta netcat al directorio c:\temp\

Descargamos netcat en su versiรณn de 64 bits para windows de https://eternallybored.org/misc/netcat/

Esto podemos hacerlo de muchas formas, una de ellas es usando impacket y un servidor smb:

Ahora en la mรกquina Windows, creamos el directorio Temp si no existe y montamos el recurso smb:

El siguiente paso serรก definir un nuevo Script dentro de la aplicaciรณn NSClient++ de la siguiente forma:

Le damos a "Aรฑadir" y a continuacion guardamos la configuraciรณn

Iniciamos el listener

Reiniciamos desde la siguiente opciรณn y esperamos recibir la reverse shell

Una vez se reinicie navegamos a Queries y deberemos recibir la conexiรณn reversa y ya podemos obtener la flag en el directorio Desktop del usuario Administrator:

Last updated