derwowusste
Goto Top

Abfrage lokaler Gruppenmitgliedschaften in Windows - Bug umschiffen

Moin Kollegen.

Wer schon auf Betriebstemperatur ist und ein forderndes Problem sucht face-wink...
Mit dem Powershell-Kommando
Get-LocalGroupMember -Group administratoren
bekommt man normalerweise die Mitglieder der lokalen Admingruppe angezeigt.
Hat man den PC jedoch zu irgendeinem Zeitpunkt aus der Domäne genommen und wieder hinzugefügt, kann hier ein Bug auftreten, der seit Jahren ungelöst ist.
Siehe https://github.com/PowerShell/PowerShell/issues/2996
capture
Der Witz ist: alles funktioniert - alle gewünschten Admins sind nutzbar als solche und auch das Oldschool-Kommando net localgroup administratoren födert die richtigen Mitglieder zu Tage - lediglich das Powershell-Kommando zickt rum.
Auch ist keine verwaiste SID bei Ansicht in netplwiz.exe zu finden, was bei einigen Personen aus verlinktem Thread die Ursache war.

Somit grabe ich tiefer und finde alte SIDs unter
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220

nun zur Frage: wie bereinige ich die dort? Es gelingt zwar, von einem jungfräulichen System einfach diesen Zweig zu importieren - danach funktionieren jedoch die lokalen Admins nicht mehr.

Wer Lust hat auf diese Frage kann das Problem wie gesagt bei sich selbst in einer VM erzeugen, indem er zum Beispiel so vorgeht, wie im Link beschrieben:
Eine Domänengruppe in die lokale Admingruppe nehmen
VM aus der Domäne nehmen
get-localgroupmembers -group administratoren
laufen lassen

Content-Key: 538099

Url: https://administrator.de/contentid/538099

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 22.01.2020 um 10:53:09 Uhr
Goto Top
Zitat von @DerWoWusste:

Moin Kollegen.

Moin,

Somit grabe ich tiefer und finde alte SIDs unter
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220

Ich find's erstaunlich, dass da etwas eingetragen ist, denn bei mir ist dieser Baum leer und endet auch so:
HKEY_LOCAL_MACHINE\SAM\SAM

Ich habe extra auf mehreren Domänen-PCs geschaut.

nun zur Frage: wie bereinige ich die dort? Es gelingt zwar, von einem jungfräulichen System einfach diesen Zweig zu importieren - danach funktionieren jedoch die lokalen Admins nicht mehr.

Dazu müsstest Du wahrscheinlich auch die SAM-Datei unter c:\windows\system32\config mit übernehmen.
Mitglied: 142232
142232 22.01.2020 aktualisiert um 11:24:37 Uhr
Goto Top
Zitat von @beidermachtvongreyscull:
Ich find's erstaunlich, dass da etwas eingetragen ist, denn bei mir ist dieser Baum leer und endet auch so:
HKEY_LOCAL_MACHINE\SAM\SAM

Nö, das ist vollkommen normal, denn du musst dir erst Leserechte für den Subtree verpassen erst dann siehst du die Unterordner face-wink. DIE SAM ist besonders geschützt und ist in diesem Pfad eingehangen, per Default haben Administratoren dort keinen direkten Lesezugriff, deswegen musst du dir dort erst selbst die Rechte vergeben.


Ich habe das mal exakt so nachgestellt und dann in der lokalen Computerverwaltung einfach die unaufgelösten Einträge gelöscht, danach ging es hier wieder einwandfrei mit Get-LocalGroupMember!

screenshot

screenshot
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 aktualisiert um 11:30:18 Uhr
Goto Top
Moin serial!

Ich habe das mal exakt so nachgestellt und dann in der lokalen Computerverwaltung einfach die unaufgelösten Einträge gelöscht, danach ging es hier wieder einwandfrei mit Get-LocalGroupMember!
Wie gesagt, bei mir ist eben dort nichts Verwaistes zu sehen! Wenn ich das Problem "künstlich" nachstelle wie beschieben, dann ja, aber nicht in meinem realen Fall, dort ist lediglich in dem genannten Registrypfad mehr drin als dort hingehört - und den bekomme ich nicht gescheit modifiziert.
Mitglied: 142232
142232 22.01.2020 aktualisiert um 11:34:13 Uhr
Goto Top
Zitat von @DerWoWusste:
Wie gesagt, bei mir ist eben dort nichts Verwaistes zu sehen!
netplwiz wie du oben geschrieben hast ist nicht die Anzeige der Computerverwaltung face-wink. In netplwiz war bei mir auch nichts zu sehen, aber in der Computerverwaltung schon, deswegen mein Einwand!
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 um 11:52:03 Uhr
Goto Top
netplwiz wie du oben geschrieben hast ist nicht die Anzeige der Computerverwaltung
Jein, man kommt unter dem Advanced tab zur exakt selben Ansicht. Wie auch immer, in beiden ist hier nichts Verwaistes drin.
Mitglied: 142232
142232 22.01.2020 aktualisiert um 12:54:30 Uhr
Goto Top
Also ich hab mal ein Compare der SAM vorher/nachher erstellt, dabei ist folgendes Aufgefallen

screenshot

Die markierte SID war die der ehemaligen Domain. Diesen Schlüssel habe ich nun komplett aus der SAM gelöscht, das reicht aber nicht. Zusätzlich musste ich im Subkey 00000220 also dem Key der der Gruppe Administratoren entspricht im Eintrag C zwei Byte verändern und zwar das Byte 45 auf HEX 38 und das Byte 49 auf HEX 02 . Danach lief es wieder einwandfrei. Kannst es ja mal probieren. Die Werte variieren je nach Anzahl an Gruppenmitgliedern-
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 aktualisiert um 14:15:51 Uhr
Goto Top
Ich habe hier keinen Schlüssel einer ehemaligen Domain.
Der Problemrechner wurde mal disjoined und wieder an die selbe Domain re-joined - die Schlüssel unter HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\Members sind die aktuellen SIDs (lokal und Domain).
Mitglied: mayho33
mayho33 22.01.2020 um 16:13:31 Uhr
Goto Top
Hi!

Da manche Abfragen leider immer noch Culture-abhängig sind (OS-GUI-Language) Bekommst du je nachdem, bei dem einen oder anderen einen Fehler. Da ist so gesehen nichts falsches dran:

culture2

Kann es sein, dass genau das, das Problem ist?

Grüße!
culture
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 um 16:20:05 Uhr
Goto Top
Nein, das ist es nicht. Die Problembeschreibung findest Du oben und ebenso Schritte zum Nachvollziehen.
Mitglied: 142232
142232 22.01.2020 aktualisiert um 16:27:02 Uhr
Goto Top
Zitat von @DerWoWusste:

aber nicht in meinem realen Fall, dort ist lediglich in dem genannten Registrypfad mehr drin als dort hingehört - und den bekomme ich nicht gescheit modifiziert.
Was ist da noch zusätzlich drin außer dem C-Wert? Im C-Binary stehen die SIDs auch alle drin.
Wir können ja nicht helfen wenn wir nicht wissen was nur bei dir schief ist. Ich hab hier nämlich nur den C-Wert in o.g. Ordner und sonst nichts. Für das C-Binary habe ich mir mal eine Byte-Schablone erstellt falls du sie haben möchtest.
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 aktualisiert um 17:28:57 Uhr
Goto Top
Unter HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220 ist nichts außer dem C-Wert.
In diesem sind soweit ich sehe 5 SIDs, wo aber nur 4 sein dürften. Diese überzählige SID würde ich gerne entfernen, ohne dass die Nutzerverwaltung dadurch korrupt wird, aber ich weiß nicht, wie. Wenn ich diese manuell aus dem Binary Wert rauslösche, dann wird die Userverwaltung nach einem Reboot korrupt (lokale Admingruppe gilt als leer, will ich Nutzer hinzufügen, heißt es: "sind schon drin").
Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 22.01.2020 um 17:09:20 Uhr
Goto Top
Zitat von @142232:

Zitat von @beidermachtvongreyscull:
Ich find's erstaunlich, dass da etwas eingetragen ist, denn bei mir ist dieser Baum leer und endet auch so:
HKEY_LOCAL_MACHINE\SAM\SAM

Nö, das ist vollkommen normal, denn du musst dir erst Leserechte für den Subtree verpassen erst dann siehst du die Unterordner face-wink. DIE SAM ist besonders geschützt und ist in diesem Pfad eingehangen, per Default haben Administratoren dort keinen direkten Lesezugriff, deswegen musst du dir dort erst selbst die Rechte vergeben.

Danke für den Augenöffner. Das hatte ich nicht auf dem Schirm.
Mitglied: 142232
Lösung 142232 22.01.2020 aktualisiert um 17:40:02 Uhr
Goto Top
Wenn du die SIDs löschst musst du erstens den Offset und die Länge des Bereichs für die SIDs im Header (erste 52 Bytes) anpassen und ebenfalls den Counter an die Anzahl der User (ebenfalls im Header), wenn die SID (28Bytes) zwischen anderen SIDs stand müssen die nachfolgenden SIDs auch aufrücken, der Bereich darf nicht leer sein!
Hier siehst du die Infos der Offsets der genannten Details im Header
https://computer.forensikblog.de/en/2006/02/list-members-of-a-windows-gr ...
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 aktualisiert um 17:54:28 Uhr
Goto Top
Ja, den Link hatte ich schon mal gelesen, steige aber nicht durch.

Ich zeige mal das Regfile (Export von HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220]
"C"=hex:20,02,00,00,00,00,00,00,d0,00,00,00,03,00,01,00,d0,00,00,00,1c,00,00,\  
  00,00,00,00,00,ec,00,00,00,96,00,00,00,00,00,00,00,84,01,00,00,8c,00,00,00,\
  05,00,00,00,01,00,14,80,b0,00,00,00,c0,00,00,00,14,00,00,00,44,00,00,00,02,\
  00,30,00,02,00,00,00,02,c0,14,00,13,00,05,01,01,01,00,00,00,00,00,01,00,00,\
  00,00,02,c0,14,00,ff,ff,1f,00,01,01,00,00,00,00,00,05,07,00,00,00,02,00,6c,\
  00,03,00,00,00,00,00,14,00,0c,00,02,00,01,01,00,00,00,00,00,01,00,00,00,00,\
  00,00,18,00,1f,00,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,00,\
  00,38,00,0c,00,02,00,01,0a,00,00,00,00,00,0f,03,00,00,00,00,04,00,00,de,a2,\
  28,67,21,3e,d2,af,19,ad,5d,79,b0,c1,07,29,27,56,fc,20,d8,ad,66,f6,10,f2,68,\
  fa,df,2a,f8,0f,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,00,\
  00,00,00,05,20,00,00,00,20,02,00,00,41,00,64,00,6d,00,69,00,6e,00,69,00,73,\
  00,74,00,72,00,61,00,74,00,6f,00,72,00,73,00,41,00,64,00,6d,00,69,00,6e,00,\
  69,00,73,00,74,00,72,00,61,00,74,00,6f,00,72,00,73,00,20,00,68,00,61,00,76,\
  00,65,00,20,00,63,00,6f,00,6d,00,70,00,6c,00,65,00,74,00,65,00,20,00,61,00,\
  6e,00,64,00,20,00,75,00,6e,00,72,00,65,00,73,00,74,00,72,00,69,00,63,00,74,\
  00,65,00,64,00,20,00,61,00,63,00,63,00,65,00,73,00,73,00,20,00,74,00,6f,00,\
  20,00,74,00,68,00,65,00,20,00,63,00,6f,00,6d,00,70,00,75,00,74,00,65,00,72,\
  00,2f,00,64,00,6f,00,6d,00,61,00,69,00,6e,00,1a,18,01,05,00,00,00,00,00,05,\
  15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,b6,28,e8,f4,01,00,00,01,05,00,00,00,\
  00,00,05,15,00,00,00,18,c2,d0,a4,1e,89,2c,7f,46,aa,28,54,00,02,00,00,01,05,\
  00,00,00,00,00,05,15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,b6,28,e8,eb,03,00,\
  00,01,05,00,00,00,00,00,05,15,00,00,00,18,c2,d0,a4,1e,89,2c,7f,46,aa,28,54,\
  03,16,00,00,01,05,00,00,00,00,00,05,15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,\
  b6,28,e8,f0,03,00,00
Löschen will ich nur die letzte SID (010500000000000515000000b17bcdcc19629170dbb628e8f0030000), diese gehört offenbar zu einem lokalen Nutzer, den es nicht mehr gibt. Falls Du das verstehst, mach es bitte mal und gib das Editierte zurück, dann kann ich Dir sagen, ob es nun läuft und mir dann immer noch Zeit nehmen, das zu lernen. Das wäre sehr nett.
Mitglied: colinardo
Lösung colinardo 22.01.2020, aktualisiert am 27.01.2020 um 17:56:59 Uhr
Goto Top
back-to-top-edit- 27.01.2020 - Bitte das zweite Skript weiter unten benutzen wenn ihr nicht explizit eine SID angeben könnt/wollt die entfernt werden soll, das macht das zweite Skript nämlich automatisch.

Servus DWW,
hab dir das mal schnell in nem PS Skript zusammen geschrotet, teste mal ...
(zu entfernende SID oben in der Variablen $exclude eintragen)
<#
    DOMAIN REJOIN GROUP MEMBER LEFTOVER FIX
    !! only use this script version if you want to remove 'a user specific SID' from the SAM entry  otherwise use the second script on this page !!  
#>

# SID to exclude
$exclude = 'S-1-5-21-3436018609-1888576025-3894982363-1008'  

# ====================================

# check elevation
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if (!$myWindowsPrincipal.IsInRole($adminRole)){
    # elevate
    start-process "powershell" -Verb "runas" -ArgumentList "-File",$MyInvocation.MyCommand.Definition  
    exit
}

# elevated area ------

# Gain permission to SAM
# privilege token adjustment
$nttools = Add-Type -Member '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(ulong a, bool b, bool c, ref bool d);' -Name nttools -PassThru  
9,17,18 | %{$nttools::RtlAdjustPrivilege($_, 1, 0, [ref]0) | out-null}
$regKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SAM\SAM", 'ReadWriteSubTree', 'ChangePermissions')  
$acl = $regkey.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544', 'FullControl',"ContainerInherit,ObjectInherit","None",'Allow')  
$acl.SetAccessRule($rule)
$regKey.SetAccessControl($acl)
$regKey.Close()

# get binary from SAM
[byte[]]$bytes = (Get-ItemProperty 'HKLM:\SAM\SAM\Domains\Builtin\Aliases\00000220' -Name C).C  
# offset position of sids
$os = [bitconverter]::ToUInt32($bytes[40..43],0) + 52
# length of sid area
$count = [bitconverter]::ToUInt32($bytes[44..47],0)
# extract sid area
[byte[]]$memberbytes = $bytes[$os..($os+$count)]

# filter out sid
[byte[]]$newmemberbytes = 0..(($memberbytes.Count / 28)-1)  | ?{(New-Object System.Security.Principal.SecurityIdentifier ([byte[]]$memberbytes[($_*28)..(($_*28)+27)]),0) -ne ([System.Security.Principal.SecurityIdentifier]$exclude) } | %{[byte[]]$memberbytes[($_*28)..(($_*28)+27)]}

# update members area length in header
[bitconverter]::GetBytes($newmemberbytes.count).CopyTo($bytes,44)

# update membercount in header
[bitconverter]::GetBytes(($newmemberbytes.count / 28)).CopyTo($bytes,48)

# write back data
Set-ItemProperty 'HKLM:\SAM\SAM\Domains\Builtin\Aliases\00000220' -Name C -Value ([byte[]]($bytes[0..($os-1)] + $newmemberbytes)) -Force | out-null  

# restore permissions
$regKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SAM\SAM", 'ReadWriteSubTree', 'ChangePermissions')  
$acl = $regKey.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544','ReadPermissions,ChangePermissions','ContainerInherit,ObjectInherit','None','Allow')  
$acl.SetAccessRule($rule)
$regKey.SetAccessControl($acl)
$regKey.Close()

write-host "FIX done." -F Green  
read-host "Press enter to exit script."  
Wie immer ohne "Gewähr" auf Leib und Leben face-wink.

Grüße Uwe
Mitglied: DerWoWusste
DerWoWusste 22.01.2020 aktualisiert um 22:58:42 Uhr
Goto Top
Guten Abend, Uwe!

Ich konnte nicht widerstehen und habe das VPN sofort angeworfen.
Es hat geklappt, 1000 Dank!

Super, ich danke Euch beiden sehr. Uwe, dann kannst Du jetzt ja auch den github-Thread mit deinem Wissen befruchten, die werden Dir sicherlich auf Knien danken - hier sind es gerade einmal 2 betroffene Workstations... es war eher ein gewisses "eigentlich sollte ich mich mit der SAM besser auskennen" auf meiner Seite, als echte Dringlichkeit. Leider sehe ich auf den ersten Blick, dass ich mehr als nur eine Weile brauchen werde, um das Getane zu überblicken.

Sehr schön, einen glücklichen Feierabend wünsche ich!

Edit: der Vollständigkeit halber noch ein Link zum Thema "wie mache ich aus der SID im Hexformat in der Registry wieder eine SID im Dezimalformat?": https://social.technet.microsoft.com/Forums/scriptcenter/en-US/11585f2c- ... ->Richard Mueller. Ich hatte nach dem Extrahieren der SIDs mit sid2user.exe geprüft, welche davon nicht aufgelöst werden können und in der Tat nur die eine ...-1008 ausgemacht, die Uwe auch in seinem Code stehen hat.
Mitglied: colinardo
Lösung colinardo 23.01.2020 aktualisiert um 10:54:33 Uhr
Goto Top
Freut mich für dich/euch.

Hab's mit dem folgenden Skript noch etwas angepasst so das man die SID nicht zwingend manuell angeben muss. Das Skript übernimmt nur diejenigen SID's die Windows auch zu einem gültigen Account auflösen kann. Voraussetzung ist natürlich das zum Zeitpunkt an dem das Skript angewendet wird alle Domains erreichbar sein müssen, denn sonst werden alle Domain-SIDs rausgeworfen.
(Restore der Permissions habe ich auch noch ergänzt)
<#
    DOMAIN REJOIN GROUP MEMBER LEFTOVER FIX
    (removes all non resolvable SIDs)
#>

# check elevation
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if (!$myWindowsPrincipal.IsInRole($adminRole)){
    # elevate
    start-process "powershell" -Verb "runas" -ArgumentList "-File",$MyInvocation.MyCommand.Definition  
    exit
}

# elevated area ------

# Gain permission to SAM
# privilege token adjustment
$nttools = Add-Type -Member '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(ulong a, bool b, bool c, ref bool d);' -Name nttools -PassThru  
9,17,18 | %{$nttools::RtlAdjustPrivilege($_, 1, 0, [ref]0) | out-null}
$regKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SAM\SAM", 'ReadWriteSubTree', 'ChangePermissions')  
$acl = $regkey.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544', 'FullControl',"ContainerInherit,ObjectInherit","None",'Allow')  
$acl.SetAccessRule($rule)
$regKey.SetAccessControl($acl)
$regKey.Close()

# get binary from SAM
[byte[]]$bytes = (Get-ItemProperty 'HKLM:\SAM\SAM\Domains\Builtin\Aliases\00000220' -Name c).c  
# offset position of sids
$os = [bitconverter]::ToUInt32($bytes[40..43],0) + 52
# length of sid area
$count = [bitconverter]::ToUInt32($bytes[44..47],0)
# extract sid area
[byte[]]$memberbytes = $bytes[$os..($os+$count)]

# filter out non resolvable sids
[byte[]]$newmemberbytes = 0..(($memberbytes.Count / 28)-1)  | ?{try{(New-Object System.Security.Principal.SecurityIdentifier ([byte[]]$memberbytes[($_*28)..(($_*28)+27)]),0).Translate([System.Security.Principal.NTAccount]);$true}catch{$false}} | %{[byte[]]$memberbytes[($_*28)..(($_*28)+27)]}

# update members area length in header
[bitconverter]::GetBytes($newmemberbytes.count).CopyTo($bytes,44)

# update membercount in header
[bitconverter]::GetBytes(($newmemberbytes.count / 28)).CopyTo($bytes,48)

# write back data
Set-ItemProperty 'HKLM:\SAM\SAM\Domains\Builtin\Aliases\00000220' -Name C -Value ([byte[]]($bytes[0..($os-1)] + $newmemberbytes)) -Force | out-null  

# restore permissions
$regKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SAM\SAM", 'ReadWriteSubTree', 'ChangePermissions')  
$acl = $regKey.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule([System.Security.Principal.SecurityIdentifier]'S-1-5-32-544','ReadPermissions,ChangePermissions','ContainerInherit,ObjectInherit','None','Allow')  
$acl.SetAccessRule($rule)
$regKey.SetAccessControl($acl)
$regKey.Close()

write-host "FIX done." -F Green  
read-host "`nPress enter to exit script"  
Mitglied: DerWoWusste
DerWoWusste 23.01.2020 um 11:54:06 Uhr
Goto Top
Schön, auch das funktioniert (habe zum Test den maroden Zustand wieder hergestellt).
Bei dem zweiten Problemkind war witzigerweise die nicht auflösbare SID in netplwiz.cpl zu sehen und zu entfernen, da brauchte es kein Skript.
Mitglied: LeeX01
LeeX01 27.01.2020 um 16:09:46 Uhr
Goto Top
Hi,

Wie genau also mit welchen Programmen/Methoden bist du aus dem Hex zu der SID gekommen?

Grüße
Mitglied: colinardo
colinardo 27.01.2020 aktualisiert um 16:55:00 Uhr
Goto Top
Zitat von @LeeX01:
Wie genau also mit welchen Programmen/Methoden bist du aus dem Hex zu der SID gekommen?
Servus,
das .NET, genauer gesagt ein Konstruktor der Klasse System.Security.Principal.SecurityIdentifier hilft dir dabei. dem kann man ein Byte-Array der SID übergeben, daraus macht .NET dann das SID-Object in der du die SID im Klartext erhältst. Du musst also nur dein HEX in ein Byte-Array wandeln und dem Kontruktor übergeben.
New-Object System.Security.Principal.SecurityIdentifier ([byte[]]([regex]::matches('010500000000000515000000b17bcdcc19629170dbb628e8f0030000','..').Value | %{[System.Convert]::ToUInt32($_,16)})),0  

Ergebnis-Object:
BinaryLength AccountDomainSid                          Value                                         
------------ ----------------                          -----                                         
          28 S-1-5-21-3436018609-1888576025-3894982363 S-1-5-21-3436018609-1888576025-3894982363-1008
Grüße Uwe
Mitglied: LeeX01
LeeX01 27.01.2020 um 16:59:30 Uhr
Goto Top
Hi Uwe,

wenn ich das richtig sehe hast du da aber schon die nötigen hexwerte extrahiert und gibst die in dem Bytearray an oder? Aber wie komme ich von

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\00000220]
"C"=hex:20,02,00,00,00,00,00,00,d0,00,00,00,03,00,01,00,d0,00,00,00,1c,00,00,\
00,00,00,00,00,ec,00,00,00,96,00,00,00,00,00,00,00,84,01,00,00,8c,00,00,00,\
05,00,00,00,01,00,14,80,b0,00,00,00,c0,00,00,00,14,00,00,00,44,00,00,00,02,\
00,30,00,02,00,00,00,02,c0,14,00,13,00,05,01,01,01,00,00,00,00,00,01,00,00,\
00,00,02,c0,14,00,ff,ff,1f,00,01,01,00,00,00,00,00,05,07,00,00,00,02,00,6c,\
00,03,00,00,00,00,00,14,00,0c,00,02,00,01,01,00,00,00,00,00,01,00,00,00,00,\
00,00,18,00,1f,00,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,00,\
00,38,00,0c,00,02,00,01,0a,00,00,00,00,00,0f,03,00,00,00,00,04,00,00,de,a2,\
28,67,21,3e,d2,af,19,ad,5d,79,b0,c1,07,29,27,56,fc,20,d8,ad,66,f6,10,f2,68,\
fa,df,2a,f8,0f,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,00,\
00,00,00,05,20,00,00,00,20,02,00,00,41,00,64,00,6d,00,69,00,6e,00,69,00,73,\
00,74,00,72,00,61,00,74,00,6f,00,72,00,73,00,41,00,64,00,6d,00,69,00,6e,00,\
69,00,73,00,74,00,72,00,61,00,74,00,6f,00,72,00,73,00,20,00,68,00,61,00,76,\
00,65,00,20,00,63,00,6f,00,6d,00,70,00,6c,00,65,00,74,00,65,00,20,00,61,00,\
6e,00,64,00,20,00,75,00,6e,00,72,00,65,00,73,00,74,00,72,00,69,00,63,00,74,\
00,65,00,64,00,20,00,61,00,63,00,63,00,65,00,73,00,73,00,20,00,74,00,6f,00,\
20,00,74,00,68,00,65,00,20,00,63,00,6f,00,6d,00,70,00,75,00,74,00,65,00,72,\
00,2f,00,64,00,6f,00,6d,00,61,00,69,00,6e,00,1a,18,01,05,00,00,00,00,00,05,\
15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,b6,28,e8,f4,01,00,00,01,05,00,00,00,\
00,00,05,15,00,00,00,18,c2,d0,a4,1e,89,2c,7f,46,aa,28,54,00,02,00,00,01,05,\
00,00,00,00,00,05,15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,b6,28,e8,eb,03,00,\
00,01,05,00,00,00,00,00,05,15,00,00,00,18,c2,d0,a4,1e,89,2c,7f,46,aa,28,54,\
03,16,00,00,01,05,00,00,00,00,00,05,15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,\
b6,28,e8,f0,03,00,00

zu '010500000000000515000000b17bcdcc19629170dbb628e8f0030000' ?
Mitglied: colinardo
colinardo 27.01.2020 aktualisiert um 17:15:25 Uhr
Goto Top
Hiervon aus dem Regedit Part einfach die Komma's den Slash und Leerzeichen entfernen und oben an den PS Schnippsel verfüttern, eine SID wird ja üblicherweise in 28 Byte dargestellt.
01,05,00,00,00,00,00,05,15,00,00,00,b1,7b,cd,cc,19,62,91,70,db,\
b6,28,e8,f0,03,00,00

Wie und aus welchen Teilen eine SID üblicherweise besteht kannst du hier nachschlagen
http://www.selfadsi.de/deep-inside/microsoft-sid-attributes.htm

Die Offsets und die Lange ab denen die SIDs im HEX stehen lese ich aus dem 52 Byte Header des HEX Werts aus. Die genauen Offsets kannst du in meinem PS Code erkennen. Hier liegen die SIDs alle immer am Ende des HEX-Bereiches. Der Bereich in dem die SIDs beginnen, berechnet sich aus 52 Byte Header + SID-AREA-Offset
Mitglied: LeeX01
LeeX01 27.01.2020 aktualisiert um 17:42:17 Uhr
Goto Top
Danke für den Link und die Erklärung , das muss ich mir in ner ruhigen Minute mal genauer ansehen.

Edit:
Ich denke was mich etwas irretiert hat ist das du in deinem 1. Script eine SID fürs Exclude angibts. Die kannst du im Normalfall aber noch gar nicht wissen (falls sie nicht unaufgelöst in der Userverwaltung steht) weil die im Hex steht was das Script erst zerlegt. Oder sieht man die SID in einem Screenshot in der Fehlermeldung?

Beste Grüße
Mitglied: colinardo
colinardo 27.01.2020 aktualisiert um 17:57:30 Uhr
Goto Top
Zitat von @LeeX01:

Edit:
Ich denke was mich etwas irretiert hat ist das du in deinem 1. Script eine SID fürs Exclude angibts. Die kannst du im Normalfall aber noch gar nicht wissen (falls sie nicht unaufgelöst in der Userverwaltung steht) weil die im Hex steht was das Script erst zerlegt. Oder sieht man die SID in einem Screenshot in der Fehlermeldung?

Das erste Skript war eigentlich nur ein Schnellschuss und für DWW gedacht für den Fall das man die SID selbst angeben will welche entfernt werden soll, das zweite Skript dagegen entfernt automatisch alle nicht auflösbaren SIDs! Bitte die Kommentare über den Skripten lesen, DANKE!

DWW sollte IMHO am besten das zweite Skript als Lösung markieren, dann kann es auch ein DAU direkt benutzen face-wink.

Hab darauf jetzt nochmal nachträglich über dem ersten Skript explizit darauf hingewiesen.

So hoffe nun ist alles klar face-wink

Grüße Uwe
Mitglied: LeeX01
LeeX01 27.01.2020 um 18:07:57 Uhr
Goto Top
Nix für ungut, finde das Script und deine Hilfe echt Super...war keine Kritik! Grüße