
Outils PowerShell d'exploitation de MachineAccountQuota et DNS

Le paramètre par défaut ms-DS-MachineAccountQuota d'Active Directory permet à tous les utilisateurs du domaine d'ajouter jusqu'à 10 comptes machine à un domaine. Powermad inclut un ensemble de fonctions pour exploiter ms-DS-MachineAccountQuota sans attacher un système réel à AD.
Cette fonction peut retourner les valeurs renseignées dans un attribut de compte machine.
Get-MachineAccountAttribute -MachineAccount test -Attribute discriptionCette fonction utilise la propriété ms-DS-CreatorSID des comptes machine pour retourner une liste de noms d'utilisateurs ou de SIDs ainsi que le compte machine associé. La propriété ms-DS-CreatorSID n'est renseignée que lorsqu'un compte machine est créé par un utilisateur non privilégié.
Get-MachineAccountCreatorCette fonction peut désactiver un compte machine ajouté via New-MachineAccount. Cette fonction doit être utilisée avec le même utilisateur qui a créé le compte machine.
Disable-MachineAccount -MachineAccount testCette fonction peut activer un compte machine qui a été désactivé via Disable-MachineAccount. Cette fonction doit être utilisée avec le même utilisateur qui a créé le compte machine.
Enable-MachineAccount -MachineAccount testCette fonction peut ajouter un nouveau compte machine directement via une requête d'ajout LDAP vers un contrôleur de domaine, sans impacter l'état de rattachement du système hôte à Active Directory.
La requête d'ajout LDAP est calquée sur celle utilisée lors de l'adhésion d'un système à un domaine. Les attributs suivants (principalement validés par le DC) sont définis :
Un nouveau compte machine peut être utilisé pour des tâches telles que l'exploitation des privilèges accordés au groupe « Domain Computers » ou comme compte supplémentaire pour l'énumération du domaine, les exploits DNS, etc. Par défaut, les comptes machine n'ont pas la permission d'ouverture de session locale. Vous pouvez soit utiliser des outils/clients qui acceptent directement des identifiants réseau, soit utiliser 'runas /netonly' ou Invoke-UserImpersonation/Invoke-RevertToSelf de @harmj0y inclus dans PowerView.
Les comptes machine créés avec des utilisateurs standard auront l'attribut mS-DS-CreatorSID renseigné avec le SID de l'utilisateur standard.
Notez que ms-DS-MachineAccountQuota ne permet pas aux utilisateurs authentifiés de supprimer les comptes machine ajoutés d'AD. Il faudra obtenir des privilèges élevés pour supprimer le compte si vous souhaitez éviter de passer la tâche à votre client.
Ajouter un nouveau compte machine
New-MachineAccount -MachineAccount test
Utiliser le compte ajouté avec runas /netonly
runas /netonly /user:domain\test$ powershell
Cette fonction supprime un compte machine avec un compte privilégié.
Remove-MachineAccount -MachineAccount test -Credential $domainadminCette fonction peut renseigner certains attributs pour un compte ajouté via New-MachineAccount, si un utilisateur dispose d'un accès en écriture. Cette fonction doit être utilisée avec le même utilisateur qui a créé le compte machine.
Voici une liste de certains attributs pour lesquels l'accès en écriture est généralement activé :
Supprimer le '$' final de l'attribut SamAccountName
Set-MachineAccountAttribute -MachineName test -Attribute SamAccountName -Value test
Utiliser le compte modifié avec runas /netonly
runas /netonly /user:domain\test powershell
Cette fonction utilise New-MachineAccount pour créer récursivement autant de comptes machine que possible à partir d'un seul compte non privilégié via MachineAccountQuota. Voir l'article de blog suivant pour les détails :
Par défaut, les utilisateurs authentifiés disposent de l'autorisation « Créer tous les objets enfants » sur la zone DNS intégrée à Active Directory (ADIDNS). La plupart des enregistrements qui n'existent pas actuellement dans une zone AD peuvent être ajoutés/supprimés.
Cette fonction peut être utilisée pour ajouter/supprimer des enregistrements DNS dynamiques si le paramètre par défaut de mises à jour dynamiques sécurisées activées est configuré sur un contrôleur de domaine. Les enregistrements A, AAAA, CNAME, MX, PTR, SRV et TXT sont actuellement pris en charge. Invoke-DNSUpdate est calquée sur l'outil nsupdate de BIND lorsqu'il utilise les options '-g' ou 'gsstsig'.
Ajouter un enregistrement A
Invoke-DNSUpdate -DNSType A -DNSName www -DNSData 192.168.100.125
Supprimer un enregistrement A
Invoke-DNSUpdate -DNSType A -DNSName www.test.local
Ajouter un enregistrement SRV
Invoke-DNSUpdate -DNSType SRV -DNSName _autodiscover._tcp.test.local -DNSData system.test.local -DNSPriority 100 -DNSWeight 80 -DNSPort 443
Cette fonction peut mettre en état de « tombstone » un nœud ADIDNS.
Cette fonction peut transformer un nœud tombstoné en un enregistrement valide.
Enable-ADIDNSNode -Node *Cette fonction peut retourner les valeurs renseignées dans un attribut de nœud DNS.
Get-ADIDNSNodeAttribute -Node test -Attribute dnsRecordCette fonction peut retourner le propriétaire d'un nœud ADIDNS.
Get-ADIDNSNodeOwner -Node testCette fonction obtient une DACL d'un nœud ou d'une zone ADIDNS.
Obtenir la DACL de la zone Active Directory-Integrated par défaut depuis un système attaché au domaine.
Get-ADIDNSPermission
Obtenir la DACL d'un nœud DNS nommé test depuis un système attaché au domaine.
Get-ADIDNSPermission -Node test
Cette fonction peut retourner les zones ADIDNS.
Get-ADIDNSZoneCette fonction ajoute une ACE à la DACL d'un nœud ou d'une zone DNS.
Grant-ADIDNSPermission -Node * -Principal "authenticated users"Cette fonction ajoute un nœud DNS à une zone DNS intégrée à Active Directory (ADIDNS) via une requête d'ajout LDAP cryptée.
New-ADIDNSNode -Node * -TombstoneCette fonction crée un tableau d'octets valide pour l'attribut dnsRecord.
New-DNSRecordArray -Data 192.168.0.1Cette fonction obtient le numéro de série SOA actuel d'une zone DNS et l'incrémente de la valeur définie.
New-SOASerialNumberArrayCette fonction peut renommer un nœud DNS.
Rename-ADIDNSNode -Node test -NodeNew test2Cette fonction peut supprimer un nœud DNS.
Remove-ADIDNSNode -Node *Cette fonction supprime une ACE de la DACL d'un nœud ou d'une zone DNS.
Revoke-ADIDNSPermission -Node * -Principal user1 -Access GenericAllCette fonction peut ajouter, renseigner ou écraser des valeurs dans un attribut de nœud DNS.
Set-ADIDNSNodeAttribute -Node test -Attribute description -Value "ne pas supprimer"Cette fonction peut définir le propriétaire d'un nœud DNS. Notez qu'un jeton avec le privilège SeRestorePrivilege est requis.
Set-ADIDNSNodeOwner -Node test -Principal user1Cette fonction peut générer des clés Kerberos AES 256 et 128 à partir d'un nom d'utilisateur et d'un mot de passe connus. Cela peut être utilisé pour tester le pass-the-hash dans invoke-DNSUpdate.
Get-KerberosAESKey -Salt TEST.LOCALuser