La máquina Cicada es una máquina fácil de HTB.
Resumen de conceptos trabajados:
• Enumerate ports/services (nmap) • Enumeration of Critical Services in Active Directory • SMB Guest Access and User Enumeration • Privilege Escalation with SeBackupPrivilege • Pass-the-Hash Attack with Evil-WinRM |
Si es tu primera máquina en Hack The Box y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento cómo introducirte en esta plataforma.
A continuación, para conectarte a la máquina, tendrás que establecer la conexión con la máquina víctima de HTB conectándote a la VPN desde la carpeta donde la tengas descargada, y desde ahí ejecutarás el comando «sudo openvpn NOMBRE_VPN.ovpn».
Estructura del contenido
ENUMERACIÓN -> ESCANEO DE PUERTOS
Para asegurarme de que la máquina víctima está activa y puedo conectarme a ella, lanzo un PING o directamente un nmap, por ejemplo:
ping -c 1 10.10.11.35 -R
Explicación de los comandos:
ping
: nos permite verificar la conectividad entre la máquina víctima y la atacante enviando paquetes ICMP (Internet Control Message Protocol) para medir la latencia y comprobar si el host (víctima) está activo.
-c 1
: este argumento indica que solo se enviará 1 paquete ICMP en lugar de los envíos continuos predeterminados. Esto es útil para realizar un testeo de la IP rápido.
10.10.11.35
: Es la dirección IP del host que se quiere comprobar. Puedes reemplazarlo con cualquier dirección IP o dominio que quieras atacar.
-R
: Habilita la opción de registro de rutas (Record Route). Esta opción solicita a los routers en el camino entre tu máquina y el host objetivo que incluyan su dirección IP en la cabecera de los paquetes ICMP. Permite rastrear la ruta completa de ida y vuelta del paquete. No siempre todos los routers admiten esta opción, por lo que en algunos casos podrías no obtener información completa.

En nuestro caso no obtenemos la ruta completa de los routers, pero sabemos por el TTL de 127 que estamos ante una máquina Windows, ya que HTB en las conexiones tiene un nodo intermediario que lo reduce 1 unidad.
Otra forma de ver si la máquina está activa es a través del comando nmap donde muestra el mensaje de «Host is up»:
nmap -sn 10.10.11.35

Explicación de los comandos:
-sn
(Ping Scan): Realiza un escaneo simple para determinar si el host está activo, pero sin escanear puertos. Esto se conoce como un «Ping Scan».
-Pn
(No Ping): Le indica a nmap
que no intente determinar si el host está activo enviando pings ICMP o escaneos ARP previos. Esto fuerza a nmap
a asumir que el host está activo, lo que es útil en redes donde el ICMP está bloqueado por firewalls.
Una vez comprobado que la máquina está activa, vamos a lanzar un nmap con permisos de root para ver qué puertos están abiertos y exportar el resultado en un fichero llamado «Escaneo» que nos pueda permitir más adelante manipularlo o consultarlo:
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.35 -oG Escaneo
Completamos el escaneo y se reportan 12 puertos abiertos:

La explicación de cada comando sería:
La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.
sudo
: comando en Linux con privilegios de administrador.
nmap
: nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.
-p-
: esta opción le indica a nmap que escanee todos los puertos, del 1 al 65535.
--open
: nmap solo mostrará los puertos que están abiertos. No mostrará ni los puertos closed ni filtered ya que a priori no podremos escalar privilegios.
-sS
: especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.
--min-rate 5000
: establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad (en entornos de laboratorio como HTB o THM no es problema).
-vvv
: (triple verbose) nivel de información que muestra nmap mientras escanea.
-n
: esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.
-Pn
: le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn
, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.
10.10.11.35 : es la IP de la máquina víctima.
-oG Escaneo
: especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo
es el nombre del archivo de salida donde se guardarán los resultados.
ENUMERACIÓN DE SERVICIOS CRÍTICOS DE ACTIVE DIRECTORY
Sabiendo que estos puertos están abiertos, lo que hacemos a continuación es lanzar una serie de scripts básicos de reconocimiento de nmap para ver qué servicios y versiones corren por esos puertos abiertos:
nmap -sCV -p53,88,135,139,389,445,464,593,3268,3269,5958,56983 10.10.11.35

Revisando vemos que los puertos 139/445 (SMB) están abiertos. SMB está habilitado y requiere autenticación con Message Signing enabled and required.
ACCESO SAMBA CLIENT
Intentamos enumerar recursos y buscar credenciales.
smbclient -L //10.10.11.35

El resultado es que hay varios recursos compartidos, de los más interesantes son:
- DEV y HR: Pueden contener archivos internos con información sensible.
- NETLOGON y SYSVOL: Ambos son específicos de entornos Active Directory. Estos directorios suelen contener configuraciones y scripts importantes que pueden ser útiles para obtener acceso también.

En la parte HR vemos un txt que descargamos en local y lo analizamos…


Parece que en el archivo «Notice from HR.txt» hay información clave: una contraseña predeterminada para cuentas en el sistema de Cicada Corp:
password: Cicada$M6Corpb*@Lp#nZp!8
Esto es muy relevante, ya que ahora podemos usar esta contraseña en combinación con nombres de usuario obtenidos mediante enumeración para intentar acceder a otros servicios.
Aplicamos una numeración de usuarios y grupos a través de RID Brute-Forcing en un servidor SMB. Este método permite descubrir nombres de usuarios y grupos en un dominio de Active Directory incluso si no tienes credenciales válidas o acceso directo a recursos compartidos.

Confirmación del entorno: sabemos que estamos ante un servidor Windows Server 2022 que actúa como controlador de dominio (CICADA-DC
).
Ahora, en el bloque inferior vemos un listado de posibles usuarios y entre paréntesis tenemos los nombre RIDs asociados. El grupo 500 se corresponde con Administrator, el 501 Guest, etc.
Vamos a limpiar este output para quedarnos solo con los usuarios potenciales:
Exportamos esos resultados a un nuevo archivo «output.txt» desde donde podremos manipularlo:
nxc smb 10.10.11.35 -u 'anonymous' -p '' --rid-brute 3000 > output.txt
Y de aquí, solo nos quedamos con los usuarios, los exportamos a usernames.txt:
grep 'CICADA\\' output.txt | awk -F '\\\\' '{print $2}' > usernames.txt
Y para quedarnos solo con los usuarios del final que son los más interesantes a partir del usuario john… manipulamos el fichero usernames.txt para crear uno nuevo filtered:

rep -A 1000 "john.smoulder" usernames.txt | grep '(SidTypeUser)' | awk '{print $1}' > filtered_usernames.txt

Ahora vamos a hacer un descubrimiento de passwords para estos usuarios mediante el uso de crackmapexec:
crackmapexec smb 10.10.11.35 -d cicada.htb -u filtered_usernames.txt -p passwords.txt
donde el fichero passwords.txt contiene la contra anterior de Cicada

Vemos que el usuario michael.wrightson usa la credencial por defecto que encontramos en el fichero txt, por lo que vamos a acceder y explorar posibles recursos compartidos disponibles para ello:
smbclient -L //10.10.11.35 -U "michael.wrighton"

La salida del comando muestra que el usuario michael.wrighton
tiene acceso para enumerar los recursos SMB del servidor. Los recursos disponibles incluyen:
- ADMIN$: Uso administrativo.
- C$: Compartición predeterminada del disco.
- DEV: Podría contener archivos relacionados con el desarrollo.
- HR: Podría contener información relacionada con recursos humanos.
- IPC$: Usado para comunicaciones internas del sistema.
- NETLOGON: Generalmente contiene scripts de inicio de sesión de dominio, que pueden incluir credenciales o configuraciones importantes.
- SYSVOL: Almacena políticas de grupo (GPOs) y otros archivos importantes para el dominio.
Ahora mediante el comando enum4linux sobre este usuario, enumeramos información adicional del servidor SMB y del entorno de Active Directory. Específicamente, podemos aprovechar los permisos válidos del usuario autenticado para acceder a datos sensibles que no estarían disponibles de forma anónima.
¿Qué es enum4linux
?
enum4linux
es una herramienta para enumerar información en servidores Windows mediante SMB, RPC, y LDAP. Es útil para:
- Descubrir usuarios y grupos del dominio.
- Listar recursos compartidos y permisos.
- Enumerar configuraciones y políticas del dominio.
- Obtener detalles sobre el sistema operativo y roles del servidor.
enum4linux -a -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' 10.10.11.35
Y efectivamente nos encontramos con una credencial para el usuario david.orelious:

Aplicando crackmapexec sobre el usuario david con la credencial descubierta, podemos automatizar la enumeración de recursos compartidos y verificar los permisos que tiene david.orelius
.
Esto es crucial para identificar qué recursos puedes explorar o explotar, sin necesidad de probar manualmente cada recurso.

Tener permisos de lectura sobre los recursos compratidos:
El recurso NETLOGON
y SYSVOL
son de particular interés en entornos Active Directory, ya que pueden contener scripts o configuraciones que incluyan credenciales o información sensible.
Recursos como DEV
y HR
podrían contener archivos internos relacionados con desarrollo o recursos humanos que podrían ser útiles.
Al explorar el recurso DEV y listar archivos, nos encontramos con un archivo de backup que si nos lo exportamos a local y lo abrimos, vemos un usuario nuevo y contraseña:

Conociendo las credenciales y el usuario de Emily, aplicamos el comando de evil-winrm
para intentar acceder directamente al servidor remoto mediante WinRM (Windows Remote Management) para interactuar con la máquina Windows.
evil-winrm -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt' -i 10.10.11.35

Y efectivamente establecemos conexión con el servicio WinRM ya que está habilitado en el servidor. A partir de aquí establecemos una sesión interactiva en PowerShell.
Por tanto obtenemos acceso remoto al sistema, permitiéndonos mover hasta la carpeta Desktop y encontrar la flag user.txt.

ESCALADA DE PRIVILEGIOS CON SEBACKUPPRIVILEGE
Ahora toca escalar privilegios de root de la máquina, para ello aplicamos el comando «whoami /priv» y vemos cuáles son los privilegios de este usuario:

Todos los privilegios están habilitados:
Análisis de los privilegios habilitados:
SeBackupPrivilege
(Enabled):- Este privilegio permite realizar copias de seguridad de archivos, ignorando permisos de acceso estándar.
- Uso potencial: leer cualquier archivo en el sistema, incluso aquellos protegidos o restringidos, como por ej. el archivo
NTDS.dit
(almacén de contraseñas en un controlador de dominio).
SeRestorePrivilege
(Enabled):- Permite restaurar archivos desde una copia de seguridad, sobrescribiendo archivos existentes.
- Uso potencial: Puedes intentar reemplazar archivos críticos, como binarios de servicios, para ejecutar tu propio código.
SeShutdownPrivilege
(Enabled):- Permite apagar o reiniciar el sistema.
- Uso potencial: Generalmente no es útil para escalada de privilegios, pero puede ser útil si necesitas interrumpir el sistema.
SeChangeNotifyPrivilege
(Enabled):- Este privilegio permite supervisar cambios en el sistema de archivos. Es un privilegio estándar y no ofrece una ventaja directa para la escalada.
SeIncreaseWorkingSetPrivilege
(Enabled):- Permite modificar la memoria asignada a procesos. Aunque puede ser útil en ciertos escenarios, no es directamente explotable para escalar privilegios en la mayoría de los casos.
Con esto en cuenta, pasamos a ver a detalle la parte de Backup Privilege.
Explorando desde la carpeta C vemos los directorios siguientes y si analizamos la parte del temp donde se pueden almacenar de forma temporal credenciales, vemos que:

nos encontramos con archivos clave como: sam.hive
y system.hive
en el directorio C:\temp
.
Estos son archivos de registro del sistema y del SAM (Security Account Manager), que contienen información sensible como los hashes de las contraseñas locales.
Lo que hacemos es descargárnoslos en nuestra máquina atacante local.

Después usamos pypykatz
, como herramienta para analizar archivos de registro como SAM y SYSTEM. De esta forma extraemos información clave, incluyendo los hashes.

Los hashes extraídos están en formato NTLM.
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b87e7c93a3e8a0ea4a581937016f341:::
500
: RID del usuario (en este caso, Administrator
).
aad3b435b51404eeaad3b435b51404ee
: Hash LM (vacío en sistemas modernos)
2b87e7c93a3e8a0ea4a581937016f341
: Hash NTLM (importante para ataques Pass-The-Hash o cracking).
ATAQUE PASS THE HASH CON EVIL-WINRM
En este punto usamos por ejemplo evil-winrm para autenticación Pass-The-Hash (PTH) y obtener acceso remoto al sistema sabiendo que WinRM (Windows Remote Management) está habilitado.
evil-winrm -u administrator -H 2b87e7c93a3e8a0ea4a581937016f341 -i 10.10.11.35

Y de esta forma llegamos a ver la flag para el usuario root.txt.