AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ein gültiges Token für CreateProcessAsuser bekommen
Thema durchsuchen
Ansicht
Themen-Optionen

Ein gültiges Token für CreateProcessAsuser bekommen

Ein Thema von Luckie · begonnen am 9. Sep 2004 · letzter Beitrag vom 8. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 9. Sep 2004, 22:56
MSDN-Library durchsuchenCreateProcessAsUser verlangt als ersten Parameter einen Token. Den kann man mit LogonUser bekommen. Nur leider schlägt LogonUser bei mir immer fehl:
Delphi-Quellcode:
function RunAs(const User, PW, App, Params: string): DWORD;
var
  bReturn: Boolean;
  dwReturn: DWORD;
  hLogon: THandle;
  si: TStartupInfo;
  pi: TProcessInformation;
begin
  SetLastError(0);
  if EnablePrivilege('SeTcbPrivilege') = 0 then
  begin
    bReturn := LogonUser(PChar(User), nil, PChar(PW), LOGON32_LOGON_INTERACTIVE,
      LOGON32_PROVIDER_WINNT50, hLogon);
    if bReturn then
    begin
      ZeroMemory(@si, sizeof(si));
      si.cb := sizeof(si);
      ZeroMemory(@pi, sizeof(pi));
      if CreateProcessAsUser(hLogon, PChar(App), PChar(Params), nil, nil, False,
        CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pi) then
        dwReturn := 0
      else
        dwReturn := GetLastError;
      CloseHandle(hLogon);
      ZeroMemory(@PW[1], length(PW));
    end
    else
      dwReturn := GetLastError;
  end
  else
    dwReturn := GetLastError;
  result := dwReturn;
end;
Wie Motzi hier im Forum schon gesagt hat, braucht man dazu das Privileg 'SeTcbPrivilege'. Das bekomme ich auch. Aber LogonUser schlägt trotzdem fehl.
Zu Testezwecken wollte ich einfach eine Konsole als Admin öffen (bin selber nur Benutzer). Als fehlermeldung bekomme ich immer:
Zitat:
---------------------------
Project1
---------------------------
Der Client besitzt ein erforderliches Recht nicht
---------------------------
OK
---------------------------
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 00:04
Moin Luckie,

unter Windows 2000 ist auch noch SE_TCB_NAME erforderlich.

Woher hast Du eigentlich EnablePrivilege?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 00:11
Hatte ich mal von Nico für SeDebugPrivilege. Ich habe es verallgemeinert. Ist da ein Fehler drin?

Jetzt bekomme ich nach:
if (EnablePrivilege('SeTcbPrivilege') = 0) and (EnablePrivilege('SeTcbName') = 0)
Zitat:
---------------------------
Project1
---------------------------
Ein angegebenes Recht ist nicht vorhanden
---------------------------
OK
---------------------------
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 00:45
Zitat von Luckie:
Nur leider schlägt LogonUser bei mir immer fehl
Schau mal in die Unit JclMiscel vom Project Jedi. Dort findest du die Funktion CreateProcAsUserEx. Anhand des Quellcodes kannst du dann auch leicht nachvollziehen wie das alles funktioniert.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 01:25
Letztendlich mache ich doch auch nichts anderes. Die Jedis setzten sogar noch nicht mal irgendwelche Privilegien. Ungetestet kann ich mir dann nicht vorstellen, dass deren Methode funktionieren sollte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 01:50
Zitat von Luckie:
Letztendlich mache ich doch auch nichts anderes. Die Jedis setzten sogar noch nicht mal irgendwelche Privilegien. Ungetestet kann ich mir dann nicht vorstellen, dass deren Methode funktionieren sollte.
Hast du dir diese Artikel von Microsoft durchgelesen?Besonders der erste Link ist sehr interessant. Ich frage mich nur, wie du auf die Idee kommst, das der in deinem ersten Posting genantte Privileg gesetzt werden muss.


Edit: Ahh, ich hab gerade was gefunden.
Zitat:
The key to successfully calling LogonUser is by ensuring that the user
account the code is executing under (normally the interctively logged on
user) has the SE_TCB_NAME privilege assigned to his/her account. You see,
there is a difference between having a privilege and enabling a privilege
(you're code only attempts to do the latter). You can assign this privilege
through either the LSA API or using the Local Security Policy MMC snapin
(Start | Programs | Adminstrative Tools). After you've done that you must
logout/login again for the privilege to become available. After that calling
LogonUser should succeed (even without explicitly enabling the privilege).
As an aside a word of caution, the SE_TCB_NAME privilege is an enormously
powerfull privilege. Unless there really is no other way to achieve way
you're attempting to do, you should not assign this privilege to just any
user - it effectively makes the user even more powerfull than the
Administrator user itself!
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 10. Sep 2004, 02:35
Zitat von Sprint:
Hast du dir diese Artikel von Microsoft durchgelesen?
Der zweite und dritte sind aus dem PSDK, die kenne ich. das Beispeil kenne ich nicht, aber das kann doch nicht wahr sein, dass so viel Code nötig ist einen Prozess unter einem anderem Benutzer zu starten.

Zitat:
Ich frage mich nur, wie du auf die Idee kommst, das der in deinem ersten Posting genantte Privileg gesetzt werden muss.
Motzi hat es in einem Posting mal erwähnt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 11. Sep 2004, 16:08
Das Problem ist, dass du das Privilege nicht haben wirst. Es ist ein Unterschied ob man ein Privilege _besitzt_ oder ob man es besitzt aber es nicht _aktiviert_ ist. Das Debug-Privilege besitzt man als Admin zB, aber es ist deaktiviert. Ergo kann man es aktivieren und es benutzen, anders sieht es bei SeTcbPrivilege aus. Das besitzt man standardmäßig nicht (auch nicht als Admin), die System-LogonSession hat es -> ein Service besitzt das Privilege und kann LogonUser aufrufen. Du kannst es auch als Admin haben, wenn du in den lokalen Sicherheitsrichtlinien den Benutzer bei "Einsetzen als Teil des Betriebssystems" einträgst.

Privilegien die man nicht besitzt kann man auch nicht aktivieren!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#9

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 11. Sep 2004, 17:55
Hmm also ich mach das immer so:

Delphi-Quellcode:
function CreateProcessWithLogonW(
  lpUsername,
  lpDomain,
  lpPassword:PWideChar;
  dwLogonFlags:dword;
  lpApplicationName: PWideChar;
  lpCommandLine: PWideChar;
  dwCreationFlags: DWORD;
  lpEnvironment: Pointer;
  lpCurrentDirectory: PWideChar;
  const lpStartupInfo: tSTARTUPINFO;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll';

function StartProgramm(Benutzer:string;Passwort:string;Domain:string;EXE:string):boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  result:=false;
  FillChar (StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  if CreateProcessWithLogonW(StringToOleStr(Benutzer),StringToOleStr(Domain), StringToOleStr(Passwort), 0, StringToOleStr(Exe), nil, 0, nil, nil, StartupInfo, ProcessInfo) then
    result:=true;
end;
Hoffe das war auch das was gesucht war.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Ein gültiges Token für CreateProcessAsuser bekommen

  Alt 12. Sep 2004, 08:15
@Motzi: Dann habe ich da wohl Pech. Ich dachte, ich hätte sie zu mindest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz