HackTheBox Cicada

nmap -sS -Pn -n -vvv --open --min-rate 5000 10.10.11.35 -oG port

PORT     STATE SERVICE          REASON
53/tcp   open  domain           syn-ack ttl 127
88/tcp   open  kerberos-sec     syn-ack ttl 127
135/tcp  open  msrpc            syn-ack ttl 127
139/tcp  open  netbios-ssn      syn-ack ttl 127
389/tcp  open  ldap             syn-ack ttl 127
445/tcp  open  microsoft-ds     syn-ack ttl 127
464/tcp  open  kpasswd5         syn-ack ttl 127
636/tcp  open  ldapssl          syn-ack ttl 127
3268/tcp open  globalcatLDAP    syn-ack ttl 127
3269/tcp open  globalcatLDAPssl syn-ack ttl 127

Puertos abiertos en el hosts.


nmap -sCV -p53,88,135,139,389,445,464,636,3268,3269 10.10.11.35 -oN target.txt

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-23 17:06:25Z)
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?
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-date: TLS randomness does not represent time
| 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
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
Service Info: Host: CICADA-DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-04-23T17:07:12
|_  start_date: N/A
|_clock-skew: 2h17m48s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Versiones y servicios que corren para cada uno de esos puertos.


ldapsearch

Verificamos el dominio y lo agregamos a nuestro etc/hosts.


enum4linux

Enumeramos usuarios usando enum4linux y vamos a crrear una lista para ver si son validos a nivel kerberos.


Kerberos

Encontramos dos usuarios validos.


Soy el usuario guets y no tengo contraseña, ¿me deja entrar?”


Enumeramos los recursos compartidos y comprobamos que tenemos permisos de lectura en 'HR' y en 'IPC$'.


smbclient

Establecimos conexión con el recurso compartido al que teníamos acceso y descargamos el archivo encontrado.


RID Brute Enumeration nxc

Con este comando estás intentando ver qué usuarios existen en esa máquina Windows, usando una cuenta sin contraseña (guest), --rid-brute: le decimos que intente descubrir qué usuarios existen en ese servidor. Lo hace probando diferentes números (RIDs) que cada cuenta en Windows tiene.


Empleando los usuarios recopilados, la contraseña de RRHH y nxc, llevamos a cabo un ataque de fuerza bruta que reveló credenciales válidas para un usuario.


LdapDomainDump

Dumpearemos toda la información del LDAP a través del usuario y contraseña que hemos encontrado. Nos generará los resultados en distintos formatos.


Nos compartimos un servidor con python3 -m http.server 80 y observamos el domain users, donde tenemos credenciales.


SMB Enumeration

Observamos que tenemos permisos de lectura sobre DEV.


Probaremos de acceder con smbclient con las credenciales encontradas, comprobaremos que en el recurso hay un script .ps1 el cual procederemos a descargar en nuestro equipo local.



Nos conectamos y obtenemos la primera bandera.


🔐 SeBackupPrivilege

Este permiso significa que puedes hacer copias de seguridad de archivos, incluso si no tienes permisos normales de lectura sobre ellos.

En pocas palabras:

Tienes permiso especial para leer cualquier archivo del sistema, aunque no seas el dueño ni tengas permisos tradicionales.

Este privilegio es muy útil para escalar privilegios o robar información, porque te permite, por ejemplo:

Leer archivos protegidos como el SAM, SYSTEM o SECURITY (que contienen las contraseñas de Windows).


Logramos usar un permiso especial (SeBackupPrivilege) para crear copias de seguridad de dos archivos importantes del sistema (SAM y SYSTEM), que contienen las contraseñas locales de los usuarios en forma encriptada. Luego descargamos esos archivos a la máquina, lo cual te permitirá extraer (dumpear) los hashes de las contraseñas y crackearlos localmente, sin necesidad de más privilegios en la máquina víctima.


Con la herramienta de pypykatz procederemos a extraer los hashes NTLM de la SAM.


Nos conectamos haciendo uso del hash de Administrator y tenemos la ultima bandera maquina resuelta.

Última actualización