
PowerShell MachineAccountQuota- und DNS-Exploit-Tools

Die Standardeinstellung des Active Directory-Attributs ms-DS-MachineAccountQuota erlaubt allen Domänenbenutzern, bis zu 10 Computerkonten zu einer Domäne hinzuzufügen. Powermad enthält eine Reihe von Funktionen zur Ausnutzung von ms-DS-MachineAccountQuota, ohne ein tatsächliches System an AD anzubinden.
Diese Funktion kann Werte zurückgeben, die in einem Computerkontoattribut gespeichert sind.
Get-MachineAccountAttribute -MachineAccount test -Attribute discriptionDiese Funktion nutzt die ms-DS-CreatorSID-Eigenschaft von Computerkonten, um eine Liste von Benutzernamen oder SIDs und das zugehörige Computerkonto zurückzugeben. Die ms-DS-CreatorSID-Eigenschaft wird nur dann befüllt, wenn ein Computerkonto von einem unprivilegierten Benutzer erstellt wird.
Get-MachineAccountCreatorDiese Funktion kann ein Computerkonto deaktivieren, das über New-MachineAccount hinzugefügt wurde. Diese Funktion sollte mit demselben Benutzer verwendet werden, der das Computerkonto erstellt hat.
Disable-MachineAccount -MachineAccount testDiese Funktion kann ein Computerkonto aktivieren, das über Disable-MachineAccount deaktiviert wurde. Diese Funktion sollte mit demselben Benutzer verwendet werden, der das Computerkonto erstellt hat.
Enable-MachineAccount -MachineAccount testDiese Funktion kann ein neues Computerkonto direkt über eine LDAP-Hinzufügeanfrage an einen Domänencontroller hinzufügen, ohne den Anbindungsstatus des Hostsystems an Active Directory zu beeinflussen.
Die LDAP-Hinzufügeanfrage ist nach der Anfrage modelliert, die beim Beitritt eines Systems zu einer Domäne verwendet wird. Die folgenden (größtenteils vom DC validierten) Attribute werden gesetzt:
Ein neues Computerkonto kann für Aufgaben wie die Nutzung von Berechtigungen der Gruppe 'Domänencomputer' oder als zusätzliches Konto für die Domänenaufzählung, DNS-Exploits usw. verwendet werden. Standardmäßig haben Computerkonten keine Berechtigung zur lokalen Anmeldung. Sie können entweder Tools/Clients verwenden, die Netzwerkanmeldeinformationen direkt akzeptieren, oder 'runas /netonly' oder @harmj0y's Invoke-UserImpersonation/Invoke-RevertToSelf (enthalten in PowerView) verwenden.
Mit Standardbenutzern erstellte Computerkonten haben die mS-DS-CreatorSID mit der SID des Standardbenutzers befüllt.
Beachten Sie, dass ms-DS-MachineAccountQuota authentifizierten Benutzern nicht die Möglichkeit bietet, hinzugefügte Computerkonten aus AD zu löschen. Es sind erhöhte Rechte erforderlich, um das Konto zu entfernen, wenn Sie vermeiden möchten, diese Aufgabe an Ihren Kunden weiterzugeben.
Ein neues Computerkonto hinzufügen
New-MachineAccount -MachineAccount test
Das hinzugefügte Konto mit runas /netonly verwenden
runas /netonly /user:domain\test$ powershell
Diese Funktion entfernt ein Computerkonto mit einem privilegierten Konto.
Remove-MachineAccount -MachineAccount test -Credential $domainadminDiese Funktion kann einige Attribute für ein Konto befüllen, das über New-MachineAccount hinzugefügt wurde, sofern ein Benutzer Schreibzugriff hat. Diese Funktion sollte mit demselben Benutzer verwendet werden, der das Computerkonto erstellt hat.
Hier ist eine Liste einiger der üblichen Attribute, für die Schreibzugriff aktiviert ist:
Das nachgestellte '$' aus dem SamAccountName-Attribut entfernen
Set-MachineAccountAttribute -MachineName test -Attribute SamAccountName -Value test
Das modifizierte Konto mit runas /netonly verwenden
runas /netonly /user:domain\test powershell
Diese Funktion nutzt New-MachineAccount, um rekursiv so viele Computerkonten wie möglich von einem einzigen unprivilegierten Konto über MachineAccountQuota zu erstellen. Einzelheiten finden Sie im folgenden Blogbeitrag:
Standardmäßig haben authentifizierte Benutzer die Berechtigung 'Alle untergeordneten Objekte erstellen' auf der Active Directory-integrierten DNS-Zone (ADIDNS). Die meisten Einträge, die derzeit nicht in einer AD-Zone vorhanden sind, können hinzugefügt/gelöscht werden.
Diese Funktion kann zum Hinzufügen/Löschen von dynamischen DNS-Einträgen verwendet werden, wenn die Standardeinstellung für aktivierte sichere dynamische Updates auf einem Domänencontroller konfiguriert ist. A-, AAAA-, CNAME-, MX-, PTR-, SRV- und TXT-Einträge werden derzeit unterstützt. Invoke-DNSUpdate ist nach dem nsupdate-Tool von BIND modelliert, wenn die Optionen '-g' oder 'gsstsig' verwendet werden.
Einen A-Eintrag hinzufügen
Invoke-DNSUpdate -DNSType A -DNSName www -DNSData 192.168.100.125
Einen A-Eintrag löschen
Invoke-DNSUpdate -DNSType A -DNSName www.test.local
Einen SRV-Eintrag hinzufügen
Invoke-DNSUpdate -DNSType SRV -DNSName _autodiscover._tcp.test.local -DNSData system.test.local -DNSPriority 100 -DNSWeight 80 -DNSPort 443
Diese Funktion kann einen ADIDNS-Knoten als Tombstone markieren.
*Tombstone einen Wildcard-Eintrag.
`Disable-ADIDNSNode -Node *
Diese Funktion kann einen als Tombstone markierten Knoten wieder in einen gültigen Eintrag umwandeln.
Enable-ADIDNSNode -Node *Diese Funktion kann Werte zurückgeben, die in einem DNS-Knotenattribut gespeichert sind.
Get-ADIDNSNodeAttribute -Node test -Attribute dnsRecordDiese Funktion kann den Besitzer eines ADIDNS-Knotens zurückgeben.
Get-ADIDNSNodeOwner -Node testDiese Funktion ruft eine DACL eines ADIDNS-Knotens oder einer ADIDNS-Zone ab.
Die DACL für die standardmäßige Active Directory-integrierte Zone von einem domänengebundenen System abrufen.
Get-ADIDNSPermission
Die DACL für einen DNS-Knoten mit Namen test von einem domänengebundenen System abrufen.
Get-ADIDNSPermission -Node test
Diese Funktion kann ADIDNS-Zonen zurückgeben.
Get-ADIDNSZoneDiese Funktion fügt einer DNS-Knoten- oder Zonen-DACL eine ACE hinzu.
Grant-ADIDNSPermission -Node * -Principal "authenticated users"Diese Funktion fügt einen DNS-Knoten zu einer Active Directory-integrierten DNS-Zone (ADIDNS) über eine verschlüsselte LDAP-Hinzufügeanfrage hinzu.
New-ADIDNSNode -Node * -TombstoneDiese Funktion erstellt ein gültiges Byte-Array für das dnsRecord-Attribut.
New-DNSRecordArray -Data 192.168.0.1Diese Funktion ruft die aktuelle SOA-Seriennummer für eine DNS-Zone ab und erhöht sie um den festgelegten Betrag.
New-SOASerialNumberArrayDiese Funktion kann einen DNS-Knoten umbenennen.
Rename-ADIDNSNode -Node test -NodeNew test2Diese Funktion kann einen DNS-Knoten entfernen.
Remove-ADIDNSNode -Node *Diese Funktion entfernt eine ACE aus einer DNS-Knoten- oder Zonen-DACL.
Revoke-ADIDNSPermission -Node * -Principal user1 -Access GenericAllDiese Funktion kann Werte in einem DNS-Knotenattribut anhängen, befüllen oder überschreiben.
Set-ADIDNSNodeAttribute -Node test -Attribute description -Value "do not delete"Diese Funktion kann den Besitzer eines DNS-Knotens setzen. Beachten Sie, dass ein Token mit SeRestorePrivilege erforderlich ist.
Set-ADIDNSNodeOwner -Node test -Principal user1Diese Funktion kann Kerberos-AES-256- und -128-Schlüssel aus einem bekannten Benutzernamen und Passwort generieren. Dies kann verwendet werden, um Pass-the-Hash in Invoke-DNSUpdate zu testen.
Get-KerberosAESKey -Salt TEST.LOCALuser