💣PTRG Network Monitor
PRTG Network Monitor es un software de monitorización de red sin agentes. Se puede utilizar para supervisar el uso del ancho de banda, el tiempo de actividad y recopilar estadísticas de varios hosts, incluidos enrutadores, conmutadores, servidores y más. La primera versión de PRTG se lanzó en 2003. En 2015 se lanzó una versión gratuita de PRTG, restringida a 100 sensores que se pueden utilizar para supervisar hasta 20 hosts. Funciona con un modo de detección automática para escanear áreas de una red y crear una lista de dispositivos. Una vez creada esta lista, puede recopilar más información de los dispositivos detectados mediante protocolos como ICMP, SNMP, WMI, NetFlow y más. Los dispositivos también pueden comunicarse con la herramienta a través de una API REST. El software se ejecuta completamente desde un sitio web basado en AJAX, pero hay una aplicación de escritorio disponible para Windows, Linux y macOS. Algunos datos interesantes sobre PRTG:
Según la compañía, lo utilizan 300.000 usuarios en todo el mundo.
La empresa que fabrica la herramienta, Paessler, ha estado creando soluciones de monitorización desde 1997
Algunas organizaciones que utilizan PRTG para monitorear sus redes incluyen el Aeropuerto Internacional de Nápoles, Virginia Tech, 7-Eleven y más .
A lo largo de los años, PRTG ha sufrido 26 vulnerabilidades a las que se les asignaron CVE. De todas ellas, solo cuatro tienen PoC de explotación pública fáciles de encontrar, dos vulnerabilidades de secuencias de comandos entre sitios (XSS), una de denegación de servicio y una vulnerabilidad de inyección de comandos autenticada que trataremos en esta sección. Es raro ver a PRTG expuesto externamente, pero a menudo nos hemos encontrado con PRTG durante pruebas de penetración internas. El cuadro de lanzamiento semanal de HTB Netmon muestra PRTG.
Discovery / Footprinting / Enumeración
Podemos descubrir PRTG rápidamente a partir de un escaneo de Nmap. Normalmente se puede encontrar en puertos web comunes como 80, 443 o 8080. Es posible cambiar el puerto de la interfaz web en la sección Configuración cuando se inicia sesión como administrador.
Desde el escaneo Nmap anterior, podemos ver el servicio Indy httpd 17.3.33.2830 (Paessler PRTG bandwidth monitor)
detectado en el puerto 8080.
PRTG también aparece en el análisis de EyeWitness que realizamos anteriormente. Aquí podemos ver que EyeWitness enumera las credenciales predeterminadas prtgadmin:prtgadmin
. Por lo general, se completan previamente en la página de inicio de sesión y, a menudo, las encontramos sin cambios. Los escáneres de vulnerabilidades como Nessus también tienen complementos que detectan la presencia de PRTG.
Una vez que hayamos descubierto PRTG, podemos confirmarlo navegando a la URL y se nos presentará la página de inicio de sesión.
De la enumeración que hemos realizado hasta ahora, parece ser la versión de PRTG 17.3.33.2830
y es probable que sea vulnerable a CVE-2018-9276 , que es una inyección de comando autenticada en la consola web del administrador del sistema de PRTG para PRTG Network Monitor anterior a la versión 18.2.39. Según la versión informada por Nmap, podemos suponer que estamos tratando con una versión vulnerable. Con cURL
podemos ver que el número de versión es efectivamente 17.3.33.283
.
Nuestro primer intento de iniciar sesión con las credenciales predeterminadas falla, pero unos cuantos intentos más tarde, logramos ingresar prtgadmin:Password123
.
Vulnerabilidades conocidas
Una vez que hayamos iniciado sesión, podemos explorar un poco, pero sabemos que es probable que sea vulnerable a una falla de inyección de comandos, así que vayamos directo al grano. Esta excelente publicación de blog de la persona que descubrió esta falla hace un gran trabajo al explicar el proceso de descubrimiento inicial y cómo la descubrieron. Al crear una nueva notificación, el campo Parameter
se pasa directamente a un script de PowerShell sin ningún tipo de sanitización de entrada.
Para comenzar, pasa el mouse sobre la parte superior derecha Setup
y luego al menú Account Settings
y finalmente haz clic en Notifications
.
A continuación, haga clic en Add new notification
.
Dale un nombre a la notificación y desplázate hacia abajo y marca la casilla junto a EXECUTE PROGRAM
. En Program File
, selecciona Demo exe notification - outfile.ps1
en el menú desplegable. Finalmente, en el campo de parámetros, ingresa un comando. Para nuestros propósitos, agregaremos un nuevo usuario administrador local ingresando:
Durante una evaluación real, es posible que queramos hacer algo que no cambie el sistema, como obtener un reverse shell o una conexión a nuestro C2 favorito. Finalmente, haz click en el botón Save
.
Después de hacer click en Save
, seremos redirigidos a la página Notifications
y veremos nuestra nueva notificación nombrada pwn
en la lista.
Ahora, podríamos haber programado la notificación para que se ejecute (y ejecute nuestro comando) en un momento posterior al configurarla. Esto podría resultar útil como mecanismo de persistencia durante un compromiso a largo plazo y vale la pena tomar nota de ello. Los horarios se pueden modificar en el menú de configuración de la cuenta si queremos configurarla para que se ejecute a una hora específica todos los días para recuperar nuestra conexión o algo por el estilo. En este punto, todo lo que queda es hacer clic en el Test
botón para ejecutar nuestra notificación y ejecutar el comando para agregar un usuario administrador local. Después de hacer clic, Test
aparecerá una ventana emergente que dice EXE notification is queued up
. Si recibimos algún tipo de mensaje de error aquí, podemos volver atrás y volver a verificar la configuración de la notificación.
Dado que se trata de una ejecución de comando a ciegas, no obtendremos ninguna respuesta, por lo que tendríamos que comprobar si nuestro receptor está conectado o, en nuestro caso, comprobar si podemos autenticarnos en el host como administrador local. Podemos usar CrackMapExec
para confirmar el acceso de administrador local. También podríamos intentar conectarnos mediante RDP al equipo, acceder a través de WinRM o usar una herramienta como evil-winrm o algo del kit de herramientas de impacket como wmiexec.py
o psexec.py
.
¡Y confirmamos el acceso de administrador local en el objetivo! Siga el ejemplo y replique todos los pasos por su cuenta en el sistema de destino. Desafíese a aprovechar también la vulnerabilidad de inyección de comandos para obtener una conexión de shell inversa desde el objetivo.
Caso práctico
¿Qué versión de PRTG se está ejecutando en el objetivo?
Ataque el objetivo PRTG y obtenga ejecución remota de código. Envíe el contenido del archivo flag.txt del escritorio del administrador.
Última actualización