Besitzer von RegKey ändern, wenn man keinen Zugriff hat + nicht der Besitzer ist
Moin,
eine faulige Software hat im HKEY_Current_User einige Keys hinterlegt mit der Sie sich selbst vom funktionieren abhält.
Leider hat Sie dabei für die Keys keine Rechte für niemanden gegeben & der besitzer des Keys wird nicht angezeigt.
Nun kann ich im GUI von Regedit mit Administratorrechten trotzdem auf den Key rechtsklicken und auf Berechtigungen klicken, dann kommt zwar
"Sie sind nicht berechtigt, die aktuellen Berechtigungseinstellung für "Keyname" anzuzeigen. Sie können diese Berechtigungen jedoch ändern"
Und dann kann ich den Key in Besitz nehmen + Rechte vergeben - soweit sogut.
Nun wäre es praktisch diese fauligen Keys bei allen profilen zu löschen - d.h. per Kommandozeilen Skript.
Nur: Wie kann ich den besitz eines Regkeys übernehmen in cmd oder Powershell?
Das einzige was ich gefunden habe (was mit boardmitteln machbar ist) ist das hier:
https://powertoe.wordpress.com/2010/08/28/controlling-registry-acl-permi ...
Wobei bei mir der Typ + Methode:
$key = [Microsoft.Win32.Registry]::Users.OpenSubKey("S-ID\SOFTWARE\fauligerkey",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
leider zu
führt
Jemand eine Idee wie das zu lösen wäre?
eine faulige Software hat im HKEY_Current_User einige Keys hinterlegt mit der Sie sich selbst vom funktionieren abhält.
Leider hat Sie dabei für die Keys keine Rechte für niemanden gegeben & der besitzer des Keys wird nicht angezeigt.
Nun kann ich im GUI von Regedit mit Administratorrechten trotzdem auf den Key rechtsklicken und auf Berechtigungen klicken, dann kommt zwar
"Sie sind nicht berechtigt, die aktuellen Berechtigungseinstellung für "Keyname" anzuzeigen. Sie können diese Berechtigungen jedoch ändern"
Und dann kann ich den Key in Besitz nehmen + Rechte vergeben - soweit sogut.
Nun wäre es praktisch diese fauligen Keys bei allen profilen zu löschen - d.h. per Kommandozeilen Skript.
Nur: Wie kann ich den besitz eines Regkeys übernehmen in cmd oder Powershell?
Das einzige was ich gefunden habe (was mit boardmitteln machbar ist) ist das hier:
https://powertoe.wordpress.com/2010/08/28/controlling-registry-acl-permi ...
Wobei bei mir der Typ + Methode:
$key = [Microsoft.Win32.Registry]::Users.OpenSubKey("S-ID\SOFTWARE\fauligerkey",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
leider zu
Ausnahme beim Aufrufen von "OpenSubKey" mit 3 Argument(en): "Der angeforderte Registrierungszugriff ist unzulässig."
In Zeile:1 Zeichen:1
+ $key = [Microsoft.Win32.Registry]::users.OpenSubKey("S-1-5-21-2009597 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) , MethodInvocationException
+ FullyQualifiedErrorId : SecurityException
Jemand eine Idee wie das zu lösen wäre?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 384201
Url: https://administrator.de/forum/besitzer-von-regkey-aendern-wenn-man-keinen-zugriff-hat-nicht-der-besitzer-ist-384201.html
Ausgedruckt am: 31.03.2025 um 23:03 Uhr
14 Kommentare
Neuester Kommentar
Hallo,
das wird ohne externe Hilfe nicht gehen.
Schau dir das mal an: Superuser.com - Takeown on Registry key
das wird ohne externe Hilfe nicht gehen.
Schau dir das mal an: Superuser.com - Takeown on Registry key
Moin,
guck mal hier:
https://powertoe.wordpress.com/2010/08/28/controlling-registry-acl-permi ...
Zweiter Abschnitt "Changing Permissions when you don’t have access".
hth
Erik
guck mal hier:
https://powertoe.wordpress.com/2010/08/28/controlling-registry-acl-permi ...
Zweiter Abschnitt "Changing Permissions when you don’t have access".
hth
Erik
Oooops. Sorry, der ist bei mir in den Lesezeichen. Dachte, der passt. ;)
Der angeforderte Registrierungszugriff ist unzulässig.
Wundert mich nicht, es muss erst OwnerShip des Keys übernommen werden und die Shell natürlich elevated ausgeführt werden.function Take-RegKeyOwnerShip {
param(
[Parameter(Mandatory=$true)][string][ValidateSet('CurrentUser','LocalMachine','ClassesRoot','CurrentConfig ','Users')]$root,
[string]$key,
[System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-544',
[bool]$recurse = $true
)
# Adjust Privilege Tokens
$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}
# recurse function
$adjustkey = {
param($root, $key, $sid, $recurse, $level = 0)
# set ownership
$regKey = [Microsoft.Win32.Registry]::$root.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership')
$acl = New-Object System.Security.AccessControl.RegistrySecurity
$acl.SetOwner($sid)
$regKey.SetAccessControl($acl)
# enable inheritance
$acl.SetAccessRuleProtection($false, $false)
$regKey.SetAccessControl($acl)
### change permissions for top key and propagate it for subkeys
if ($level -eq 0) {
$regKey = $regKey.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions')
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($sid, 'FullControl', 'ContainerInherit', 'None', 'Allow')
$acl.ResetAccessRule($rule)
$regKey.SetAccessControl($acl)
}
# dive into subkeys if recursion is on
if ($recurse) {
foreach($subKey in $regKey.OpenSubKey('').GetSubKeyNames()) {
& $adjustkey $root ("$key\$subKey") $sid $recurse ($level+1)
}
}
}
& $adjustkey $root $key $sid $recurse
}
gci REGISTRY::HKEY_USERS -Name | ?{$_ -match '^S-1-5-21-\d+-\d+-\d+-\d+$'} | %{
Take-RegKeyOwnerShip -root Users -sid $_ -key "$_\SOFTWARE\fauligerkey"
}
Zitat von @NetzwerkDude:
Ist leider der selbe link den ich oben erwähnt habe
Es ist auch ein anderen szenario: wenn man owner ist, aber keinen zugriff hat
Was ist das denn für ein Murks bzw. Gedankengang.Ist leider der selbe link den ich oben erwähnt habe
Es ist auch ein anderen szenario: wenn man owner ist, aber keinen zugriff hat
Wenn man Besitzer (Owner) ist, hat man auch Zugriff. Es gibt#s nicht, daß man Besitzer ist, aber keinen Zugriff hat.
Es sei denn die Berechtigungen sind vermurkst.
Und mittels psexec -s -i wie schon geschrieben hat das SYSTEM die höchsten Berechtigungen.
Also übernehme den Besitz und ändere die Berechtigungen.
Gruss Penny
Das setzt die Privilege Tokens des Users im aktuellenProzess, folgende Privilegien werden gesetzt:
SeTakeOwnership = 9
SeBackup = 17
SeRestore = 18
https://www.pinvoke.net/default.aspx/ntdll.RtlAdjustPrivilege
SeTakeOwnership = 9
SeBackup = 17
SeRestore = 18
https://www.pinvoke.net/default.aspx/ntdll.RtlAdjustPrivilege