netzwerkdude
Goto Top

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
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
führt

Jemand eine Idee wie das zu lösen wäre?

Content-Key: 384201

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: Tektronix
Tektronix Aug 23, 2018 at 09:18:05 (UTC)
Goto Top
Moin,
mache Dir eine Systemshell mit Pstools auf.
psexec -s -i cmd
In der Systemshell Regedit aufrufen, dann solltest Du Systemrechte im Regedit haben.
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 09:23:46 (UTC)
Goto Top
mh, brauche ich ja nicht, in der Regedit gehts ja sowieso - würde das gern in cmd oder powershell lösen da ich es in ein skript einbauen will.
Member: bloodstix
bloodstix Aug 23, 2018 at 09:45:02 (UTC)
Goto Top
Hallo,

das wird ohne externe Hilfe nicht gehen.
Schau dir das mal an: Superuser.com - Takeown on Registry key
Member: erikro
erikro Aug 23, 2018 at 10:03:25 (UTC)
Goto Top
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
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 10:04:42 (UTC)
Goto Top
Ist leider der selbe link den ich oben erwähnt habe face-smile

Es ist auch ein anderen szenario: wenn man owner ist, aber keinen zugriff hat
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 10:10:19 (UTC)
Goto Top
Geht nicht, gibts nicht
Member: erikro
erikro Aug 23, 2018 at 10:15:07 (UTC)
Goto Top
Zitat von @NetzwerkDude:

Ist leider der selbe link den ich oben erwähnt habe face-smile

Oooops. Sorry, der ist bei mir in den Lesezeichen. Dachte, der passt. ;)
Member: colinardo
Solution colinardo Aug 23, 2018 updated at 13:45:30 (UTC)
Goto Top
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"  
}
Grüße Uwe
Member: Penny.Cilin
Penny.Cilin Aug 23, 2018 at 13:36:46 (UTC)
Goto Top
Zitat von @NetzwerkDude:

Ist leider der selbe link den ich oben erwähnt habe face-smile

Es ist auch ein anderen szenario: wenn man owner ist, aber keinen zugriff hat
Was ist das denn für ein Murks bzw. Gedankengang.
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
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 13:54:52 (UTC)
Goto Top
Geil, Danke Uwe!
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 13:55:30 (UTC)
Goto Top
Genau darum gehts, die Berechtigungen sind vermurkst face-smile
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 updated at 14:08:45 (UTC)
Goto Top
Kannst du erklären was Zeile 10+11 macht? Weil das scheint ja die Permission magic zu sein...
Member: colinardo
Solution colinardo Aug 23, 2018 updated at 14:12:28 (UTC)
Goto Top
Zitat von @NetzwerkDude:

Kannst du erklären was Zeile 10+11 macht?
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
Member: NetzwerkDude
NetzwerkDude Aug 23, 2018 at 14:58:19 (UTC)
Goto Top
Schöne Sache, danke auch für die komplette function face-smile