Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzerrechte: Token Handle woher? (https://www.delphipraxis.net/35896-benutzerrechte-token-handle-woher.html)

freakfly 13. Dez 2004 14:13


Benutzerrechte: Token Handle woher?
 
Hallo!

Ich arbeite gerade mit der Funktion MSDN-Library durchsuchenCreateProcessAsUser. Ich will damit aus einem Programm, dass unter einem anderen Benutzer läuft, wieder eine .exe starten aber unter den Rechten des angemeldeten Benutzers.
Wenn ich das richtig Verstanden habe, kann mich mit dem ersten Argument (hToken) von MSDN-Library durchsuchenCreateProcessAsUser wieder einen Token holen mit den Rechten des angemeldeten Benutzers. Aber woher bekomm ich diesen Token? MSDN-Library durchsuchenSetTokenInformation hab ich gelesen, bin aber nicht schlau draus geworden!

Bin für jeden Hinweis / Tip dankbar!!!!!!

Gruß, freakfly

Luckie 13. Dez 2004 15:05

Re: Benutzerrechte: Token Handle woher?
 
Probier es mal hiermit: http://www.luckie-online.de/Delphi/S...ithLogonW.html -> CreateProcessAsLogonW.html. Die benötigte Unit findest du auch in dem Verzeichnis.

freakfly 13. Dez 2004 15:22

Re: Benutzerrechte: Token Handle woher?
 
Hallo!

Die Funktion ist soweit ja ganz in Ordnung, und ich verwende sie auch, um das erste Programm unterm anderen Benutzer zu starten, aber ein bisschen nervig ist da halt, das ich ne Passwortabfrage einbauen müsste. Eigentlich will ich ja nur ein Programm mit den Rechten vom angemeldeten Benutzer starten.

1. Programm (Benutzer: Normal) -> startet mit MSDN-Library durchsuchenCreateProcessAsLogonW:
2. Programm (Benutzer: Spezial) -> startet :
3. Programm (Benutzer soll der gerade angemeldete Benutzer sein.)

So solls schauen.....

Luckie 13. Dez 2004 15:27

Re: Benutzerrechte: Token Handle woher?
 
Irgendwie diskutieren wir hier wieder in zwei Foren gleichzeitig. Und irgendwie habe ich keine Lust alles zweimal zu schreiben. Und auch keine Lust jetzt den Link in das andere Forum rauszusuchen.

freakfly 13. Dez 2004 15:35

Re: Benutzerrechte: Token Handle woher?
 
Kann ich gut verstehen, aber es ist vielleicht nicht jeder in zwei Foren aktiv....

Was ich meinte war überigens nicht, das man ein Programm unter den Rechten startet unter denen man angemeldet ist. Und sowas müsste ja ohne Passwortabfrage gehen.

Luckie 13. Dez 2004 15:45

Re: Benutzerrechte: Token Handle woher?
 
Nein. Wenn du ein Programm unter einem anderen Benutzer startest, erben alle anderen Programme, die du in dem Prozess startest dessen Rechte. Willst du aus dem ersten Programm wieder ein Prozess unter einem anderem Benutzer starten, ist das wie bei dem ersten Programm. Du brauchts das Passwort.

freakfly 13. Dez 2004 15:53

Re: Benutzerrechte: Token Handle woher?
 
Argh.... so ein Schrott.
Und mit dem Token dingends lässt dich das nicht hinbiegen?
hab gerade gesehen, das ich ein im vorherigen Beitrag ein bisschen Schrott geschrieben hab:

Zitat:

Was ich meinte war überigens nicht, das man ein Programm unter den Rechten eines anderen Benutzer startet, sondern unter dem bereits angemeldeten User. Und sowas müsste ja ohne Passwortabfrage gehen.
Haste du ne Ahnung wos zu dem Token noch irgendwelche Infos gibt? Außer beim MS, das ist immer englisch und schwer verständlich für Anfänger.

freakfly

Luckie 13. Dez 2004 18:48

Re: Benutzerrechte: Token Handle woher?
 
Wenn du das Programm unter dem angemeldeten Benutzer starten willst, dann reicht doch ein einfache Shellexecute oder CreateProcess. :gruebel:

freakfly 13. Dez 2004 21:01

Re: Benutzerrechte: Token Handle woher?
 
Hmmm.. der Theorie nach schon, aber hat die dann nicht auch die Rechte von der Exe von der aus sie aufgerufen wurde??

Luckie 13. Dez 2004 21:14

Re: Benutzerrechte: Token Handle woher?
 
Ja was denn nun?
Zitat:

Was ich meinte war überigens nicht, das man ein Programm unter den Rechten eines anderen Benutzer startet, sondern unter dem bereits angemeldeten User.
:gruebel:
Benutzer ruft mit Admin Account Programm A auf. Programm B ruft Programm C mit den rechnten des Benutzers auf, der Programm A gestartet hat. Genau das wird nur mit Passwort gehen. Es ist ja genauso, als wenn du als anderer Benutzer eingeloggt bist und willst ein programm unter einem anderen Account starten.

Motzi 13. Dez 2004 22:13

Re: Benutzerrechte: Token Handle woher?
 
Zitat:

Zitat von Luckie
Benutzer ruft mit Admin Account Programm A auf. Programm B ruft Programm C mit den rechnten des Benutzers auf, der Programm A gestartet hat. Genau das wird nur mit Passwort gehen.

Nein, sofern Programm B sich per OpenProcess und OpenProcessToken erfolgreich das Token von Programm A holt kann man dieses benutzen um einen Prozess im selben Security-Kontext wie Programm A zu starten. Eine andere Möglichkeit wäre, dass Programm A sein Token per DuplicateHandle direkt an Programm B weitergibt...

Luckie 13. Dez 2004 22:14

Re: Benutzerrechte: Token Handle woher?
 
Argh. Das habe ich vergessen.

freakfly 14. Dez 2004 07:47

Re: Benutzerrechte: Token Handle woher?
 
Danke für die Posts! Ich glaub so langsam weiß ich selber nichtmehr was ich eigentlich wollte... :shock:

Ich bin am Computer angemeldet als Benutzer "David".
David startet ein Programm, dieses Programm (start.exe) startet dann ein anderes Programm (Daten.exe) mittels MSDN-Library durchsuchenCreateProcessWithLogonW unter dem Benutzer "Software".
Programm start.exe beendet sich nach 30 Sekunden selber.
Das Programm Daten.exe soll nun ein Programm starten, mit den Rechten des angemeldeten Benutzers in dem jetztigen Fall "David". Es kann aber sein, dass morgen ein anderer Benutzer angemeldet ist!

Wenn ichs jetzt richtig sehe müsste das dass sein, was ich will.
Soweit... Werde jetzt mal CreateProcess und Shellexecute ausprobieren, wobei das die Rechte eigentlich vererben müsste. Und somit ungeeigent wäre.

Gruß, freakfly

Motzi 14. Dez 2004 09:59

Re: Benutzerrechte: Token Handle woher?
 
Zitat:

Zitat von freakfly
Ich bin am Computer angemeldet als Benutzer "David".
David startet ein Programm, dieses Programm (start.exe) startet dann ein anderes Programm (Daten.exe) mittels MSDN-Library durchsuchenCreateProcessWithLogonW unter dem Benutzer "Software".
Programm start.exe beendet sich nach 30 Sekunden selber.
Das Programm Daten.exe soll nun ein Programm starten, mit den Rechten des angemeldeten Benutzers in dem jetztigen Fall "David". Es kann aber sein, dass morgen ein anderer Benutzer angemeldet ist!

Dann würde ich so vorgehen:
start.exe startet Daten.exe per CreateProcessWithLogonW und erhält daraufhin ein Prozess-Handle des neuen Prozesses. Über dieses Handle kann start.exe nun sein Token per DuplicateHandle an Daten.exe vererben. Daten.exe kann dieses Token dann benutzen um einen neuen Prozess unter diesem Security-Kontext zu starten.

freakfly 14. Dez 2004 11:57

Re: Benutzerrechte: Token Handle woher?
 
Also wenn ich dich richtig verstehe, baue ich die start.exe als einen Art Wrapper, oder?
Denn das Problem ist das Daten.exe eine 16bit Appl. ist, die ich nicht beeinflussen kann.
Im ganzen werde ich aber erstmal so vorgehen, wie du das beschrieben hast, wie das mit dem Handle kopieren u.s.w. geht muss ich mir mal anschauen.
Wichtig ist mir jetzt, dass ich weiss, das ich den Handle kopieren kann. Noch besser wäre natürlich wenn ich den Handle des angemeldeten Benutzers irgendwo herbekommen würde.

Danke euch soweit!!!

Motzi 14. Dez 2004 12:20

Re: Benutzerrechte: Token Handle woher?
 
Zitat:

Zitat von freakfly
Wichtig ist mir jetzt, dass ich weiss, das ich den Handle kopieren kann. Noch besser wäre natürlich wenn ich den Handle des angemeldeten Benutzers irgendwo herbekommen würde.

Es gibt kein Handle für einen angemeldeten Benutzer, es gibt nur einen sogenannten Token (ok, genau genommen ist das auch wieder nur ein Handle), der alle Daten des Security-Kontext enthält. Wichtig ist: Handles können nicht "einfach so" kopiert werden, sondern müssen per DuplicateHandle dupliziert werden.

Aber wenn Daten.exe ein Programm ist, dass du nicht beeinflussen kannst, was bringt es dann wenn du ihm das Token vererbst? Schließlich weiß das Programm nicht was es damit anfangen soll... oder?

freakfly 15. Dez 2004 06:53

Re: Benutzerrechte: Token Handle woher?
 
@Motzi, da hast du recht. Aber wenn ich im "Wrapper" per CreateProcessWithLogonW die Daten.exe mit erweiterten Rechten starte, und gleichzeitig im Wrapper den Token (Handle, wie auch immer) bereithalte, dann kann ich doch vom Wrapper aus auch Programme starten mit den Rechten des angemeldeten Users, ich muss nur noch den Wrapper dazu bringen, auf bestimmt Windows Messages oder ähnliches zu reagieren....
(Oje, ein drei-zeilen Satz)

Gruß, freakfly

Motzi 15. Dez 2004 10:20

Re: Benutzerrechte: Token Handle woher?
 
OK.. ganz prinzipiell - wenn du ein Token hast, kannst du über diesen Token einen Prozess in diesem Security-Kontext starten, egal wie du zu diesem Token gekommen bist.

Hast du jetzt schon eine Idee / einen Ansatz wie du das ganze lösen kannst?

freakfly 15. Dez 2004 11:30

Re: Benutzerrechte: Token Handle woher?
 
Hmm.. mein Plan bisher sieht folgendermaßen aus:

Die start.exe wird gestartet, und wird der Token kopiert und im Programm gehalten. Das Programm startet mit CreateProcessWithLogonW die daten.exe. start.exe minimiert sich. Die daten.exe wiederum über gibt irgendwie die Parameter an start.exe weiter, die Infos enthalten welches Programm gestartet werden soll. Das Programm holten den alten, ersten Token wieder und startet mit dieser Berechtigung das Programm "x.exe".

So in der Art.. Jetzt muss ich nur noch Zeitfinden, um das umzusetzen......


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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