![]() |
AW: Lokal Adminrechte erlangen
Zitat:
PS: In Luckie's Bespiel ist noch ein ReversToItself enthalten. Ist das auch aus der API? |
AW: Lokal Adminrechte erlangen
Schon mit Vista fing der Spaß mit UAC und Co. an, wo die Rechte der gestarteten Programme nicht mehr direkt mit den Rechten des eingeloggten Benutzers übereinstimmen.
![]() Der Rest des Programms läuft ja noch mit geringeren Rechten, da sollte die Zeit mit den höheren Rechten nicht unbegrenzt andauern. (nur so lang wie nötig) Entweder schnell wieder zurücksetzen oder den jeweiligen Thread beenden. Damit böse Buben es nicht zu einfach ausnutzen können sich in dein Programm zu hacken und von da in den Thread zu kommen. Wenn man z.B. auf einen anderen Desktop kommen will, dann geht das nur direkt beim Start des Threads, bevor die Messagebehandlung anläuft. Siehe Anmeldebildschirm oder die UAC-Passwortabfrage. So Manches geht nur, wenn es noch nicht andersweitig initialisiert/benutzt wurde und in punkto Sicherheit sollte man sicherheitshalber nichts zu lange unsicher lassen. Zwischen Impersonate und Revert wird jeder Code in diesem Thread mit dessen Rechten ausgeführt, also eigentlich auch ein ForceDirectories. Es gibt noch ein paar Fallstricke mit Dingen die zwar in dem Thread aufgerufen/gestartet, aber in einem anderen Thread ausgeführt werden. |
AW: Lokal Adminrechte erlangen
Es gibt keinen "Rest" des Programms. Es hat auch nichts wirklich mit Rechten eines Benutzers zu tun. Entweder der Prozess hat beim Start Admin-RechteFähigkeiten mitbekommen, oder er hat sie nicht. Man durch diese "Impersonation" sich als anderer Benutzer ausgeben, auf dessen Resourcen (z.B. Registry oder Dateien) zugreifen, aber die Admin-Fähigkeiten kommen dadurch nicht nach.
Das ist auch einer der Gründe weshalb ich bei diesen klassischen alten "setup.exe" am Schluss nie das Häkchen "Anwendung direkt starten" (oder so ähnlich) anhake, denn das Setup vererbt die Admin-Fähigkeiten gleich an den zu startenden Prozess weiter. Zumindest die allermeisten. |
AW: Lokal Adminrechte erlangen
Zitat:
|
AW: Lokal Adminrechte erlangen
Zitat:
![]() Kann es sein, daß du eher ![]() Zitat:
Zitat:
Also redest du über ![]() ![]() Zitat:
![]() ![]() Ich verweise auf ![]() ![]() Die Lektüre des Codes von ![]() Also entweder reden wir aufgrund mangelnder gemeinsam akzeptierter Definition von "Admin-Fähigkeiten" aneinander vorbei, oder du bist auf dem Holzweg. |
AW: Lokal Adminrechte erlangen
Zitat:
Nachteilig sehe ich es für die Benutzer, die gerne Anwendungen auf anderen Festplatten auslagern, dazu zähle ich mich auch. Dadurch, dass der User Installer aber ins Benutzerprofil installiert wird und dieses in der Regel auf dem gleichen Laufwerk liegt wie die Windows Installation, funktioniert das nicht und der Speicher wird dort verbraucht. Aber ich glaube, das geht jetzt langsam etwas am Thema vorbei. :oops: |
AW: Lokal Adminrechte erlangen
Zitat:
![]() ![]() |
AW: Lokal Adminrechte erlangen
Zitat:
|
AW: Lokal Adminrechte erlangen
Zitat:
Ich benutze das schon seit weit über einer Dekade um bspw. das Profil von Browser und Email-Programm in einen verschlüsselten Container zu verbannen. Ganz selten habe ich damit auch andere Daten (bspw. riesige Spiele) "ausgelagert" oder Programme welche sich selbst zickig anstellen, wenn sie nicht auf der Systemplatte landen. Keine Ahnung warum man das nicht einsetzen wollen würde. Es hat jedenfalls nicht die gleichen Sicherheitsimplikationen wie symbolische Links und braucht daher auch nicht das entsprechende Benutzerrecht. |
AW: Lokal Adminrechte erlangen
Zitat:
Ganz konkret:
Kann er das? Dein Beitrag liest sich so als ginge das. Wenn ja, was ist dann hieran falsch?
Delphi-Quellcode:
Selbst bei TeamViewer kann man das beobachten: Der Benutzer führt einen TeamViewer-QuickSupport aus. Authentifiziert sich jemand von außen mit den Kontodaten eines Administrator-Accounts startet TeamViewer sich selbst noch einmal und beendet sich dann. So kannte ich es bislang.
uses
System.SysUtils, WinApi.Windows; const adminName = 'localAdmin'; adminPwd = 'localAdmin'; function getAdminToken(): THandle; begin Win32Check( LogonUser( adminName, nil, adminPwd, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Result ) ); end; procedure p(); var adminToken: THandle; begin adminToken := getAdminToken(); try Win32Check( ImpersonateLoggedOnUser(adminToken) ); try Win32Check( CreateDirectory('C:\Program Files\Watzn', nil) ); finally Win32Check( RevertToSelf() ); end; finally CloseHandle(adminToken); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz