Deutsch
Forum

API CreateProcessAsUser

 
Hallo Profaner...

Folgender Code (NT/2000/XP) bringt bei mir beim Starten der EXE unter einem Usernamen mit eingeschränkten Rechten eine Fehlermeldung. Wenn ich die EXE unter einem Adminprofile starte, hauts halbwegs hin. Eingelogt habe ich mich selbst als Admin mit ausreichenden Rechten (keine 1314 Fehlermeldung).
Was mache ich falsch???
KompilierenMarkierenSeparieren
DEF @LookupAccountName(7) !"advapi32","LookupAccountNameA"
DEF @LogonUser(6) !"advapi32","LogonUserA"
DEF @CreateProcessAsUser(11) !"advapi32","CreateProcessAsUserA"
DEF @SetLastError(1) !"kernel32","SetLastError"
DEF @GetLastError(0) !"kernel32","GetLastError" Liefert letzten API Fehler.
DEF @ZeroMemory(2) ! "Kernel32","RtlZeroMemory"
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
Declare Protokoll&,FEHLER&,DOMAIN$,SID_Size#,lpStartupInfo#,lpProcessInformation#
Declare lpCommandLine#,DOMAINNAME_SIZE_ADDR#
Declare SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,Attribut#,ALLPRIVS#,COUNT#,SID#
DIM DOMAIN#,256
DIM SID#,800
DIM SID_Size#,4
DIM DOMAINNAME_SIZE_ADDR#,4
DIM SID_TYPE_INDICATOR#,256

Proc StartWithUserRights

    @ADDSTRING(Protokoll&,"Start der Prozedur zum Impersonifizieren anderer User")
    Parameters PUSERNAME$,PPASSWORT$,PPROGRAMM$
    Declare UserHandle&,UserHandle#
    DIM UserHandle#,4
    CLEAR SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,SID#,DOMAINNAME_SIZE_ADDR#
    Long SID_Size#,0=800
    LONG DOMAINNAME_SIZE_ADDR#,0=255
    LET Fehler&=@LookupAccountName(0,@addr(PUSERNAME$),SID#,SID_Size#,DOMAIN#,DOMAINNAME _SIZE_ADDR#,SID_TYPE_INDICATOR#)
    @ADDSTRING(Protokoll&,"Fehler LookupAccountName: "+@str$(Fehler&))
    LET DOMAIN$=@STRING$(DOMAIN#,0)
    @ADDSTRING(Protokoll&,"Domain: "+DOMAIN$)
    @SetLastError(0)
    LET FEHLER&=@LogonUser(@addr(PUSERNAME$),@ADDR(DOMAIN$),@ADDR(PPASSWORT$),2,0,UserHa ndle#)
    @ADDSTRING(Protokoll&,"Fehler LogonUser: "+@str$(Fehler&))
    @ADDSTRING(Protokoll&,"Letzter API Fehler: "+@str$(@GetLastError()))
    Let UserHandle&=@LONG(UserHandle#,0)
    @ADDSTRING(Protokoll&,"UserHandle: "+@str$(UserHandle&))
    Dim lpStartupInfo#,68
    ZeroMemory(lpStartupinfo#,68)
    Long lpStartupInfo#,0=68
    Dim lpProcessInformation#,16
    Dim lpCommandLine#,@len(PPROGRAMM$)+1
    ZeroMemory(lpProcessInformation#,16)
    String lpCommandLine#,0=PPROGRAMM$
    LET FEHLER&=@CreateProcessAsUser(UserHandle&,0,lpCommandLine#,0,0,0,0,0,0,lpStartupI nfo#,lpProcessInformation#)
    @ADDSTRING(Protokoll&,"Fehler CreateProcessAsUser: "+@str$(Fehler&))
    @ADDSTRING(Protokoll&,"Letzter API Fehler: "+@str$(@GetLastError()))
    LET FEHLER&=@CloseHandle(UserHandle&)
    @ADDSTRING(Protokoll&,"Fehler CloseHandle: "+@str$(Fehler&))
    Dispose UserHandle#
    Dispose lpStartupInfo#
    Dispose lpProcessInformation#
    Dispose lpCommandLine#
    @ADDSTRING(Protokoll&,"Ende der Prozedur zum Impersonifizieren anderer User")

ENDPROC

CLS
LET Protokoll&=@createlistbox(%HWND,"",10,10,600,400)
StartWithUserRights @INPUT$("Bitte einen Usernamen eingeben: ","Login Name?",""),@INPUT$("Bitte das Passwort dazu eingeben: ","Passwort?",""),,@LoadFile$("EXE auswählen","*.EXE")
Dispose DOMAIN#
Dispose SID_Size#
Dispose DOMAINNAME_SIZE_ADDR#
Dispose SID_TYPE_INDICATOR#
Dispose SID#
Waitinput
 
19.12.2004  
 



Hallo Andreas...

Ich glaube DuplikateTokenEx ist die Lösung für dein Problem....
 
19.12.2004  
 



Hallo Andreas...

JA GENAU. Das muß es sein! Besten Dank, Andreas...

 
19.12.2004  
 




Frank
Abbing
Hi,

ich glaube, du hast hier ein Thema angesprochen, das die breite Mehrheit eher scheut. Darum die Selbstgespräche?
 
19.12.2004  
 



Sowas habe ich ehrlichgesagt auch noch nicht erlebt - AH das ist echt scharf - ich glaube aber auf diesem Gebiet bist Du hier der Profi weshalb Dir leider bisher niemand half. (<-- helfen konnte, geholfen hatte, ... )

Salve, iF
 
19.12.2004  
 



Hallo ihr beiden...


Ich hab mir nur mal einen leinen Spaß gegönnt, um die Unterhaltung etwas anzuregen. Bin damit schon ein klein bischen weiter, hab die Lösung aber immer noch nicht komplett.

Ich bin im Augenblick dabei, Privaktivate etwas zu erweitern. Das Hinzufügen von Privilegien zu bestehenden Accounts habe ich schon eingebaut (läuft bestens).
Privaktivate wird demnächst also bestehende Privilegien aktivieren und nicht vorhandene Privilegien hinzufügen könen.
Ich möchte ganz gerne noch eine RunAs Funktion mit einbauen - da hakt es aber im Augenblick noch wie man sieht.
Auch eine Funktion zum Knacken von Login Passwörter schwebt mir im Augenblick im Kopf herum, dafür wird Profan aber wohl zu langsam sein.

Damit, das mir nicht großartig einer weiterhelfen kann, habe ich eigentlich schon gerechnet. Weltweit sind zu diesem Thema kaum irgendwelche vernünftigen Artikel und Postings zu finden. Die meisten hatten da irgendwelche Fragen zu den Themen Privilegien und impersonifizieren von Usern die keiner vernünftig beantworten konnte.
Bei vielen Quelltexten könnte ich als Anfänger sogar schon sagen, wo es da hakt, ohne überhaupt die Programmiersprache zu können, in der der Quelltext geschrieben wurde...

Das die breite Mehrheit dieses Thema scheut, finde ich sehr schade, da diese Sachen wohl der eigentliche Grund sind, warum 2000 und XP auf NT-Technologie basieren...
 
20.12.2004  
 



Da kann ich nur sagen wir freuen uns schon auf eine höllisch-gute PCU .

Wenn Du magst - wegen der Andeutung Profan wäre da zu langsam - bau ich Dir für diese Unterfunktion ne DLL. Muddu nur genau sagen was die Tun soll. Dank Frank Abbings Datengenerator könntest dann diese ca. 4kb große dll einfach in deine PCU tun und man müsste keine DLL mitführen.

Salve, iF
 
20.12.2004  
 



Ok, Problem ist gelöst. Wenn die eine API nicht will, warum nicht mal eine neue Testen?

Es lag im Endeffekt doch nicht an DouplicateTokenEx, ich hatte wohl schon einen PrimaryToken, sondern es lag und liegt wohl direkt an CreateProcessAsUser. Da scheint es mir irgendwo an Zugriffsberechtigung zu fehlen und es kann deshalb kein vernünftiges Fenster erzeugt werden. Bin jetzt zu CreateProcessWithLogonW übergeschwenkt - haut super hin und ist sehr einfach zu handhaben.

Ich habe mal unter [...]  eine Vorabversion von PrivAktivate 2.1 hochgeladen.
Was mir hier unter anderem noch nicht so gut gefällt:
- Vorhandene Privilegien werden nicht angezeigt
- Wenn Privilegien fehlen, sieht man dies nur im Ablaufprotokoll

Zu der Passwortgeschichte: Ich habe selbst schon an eine MSAM32 DLL gedacht - sind aber im Augenblick nur Hirngespinste. Über vernünftige Wörterbücher müßte das ganze auf jeden Fall zu regeln sein. Die Sache ist eigentlich ziemlich primitiv und auf Anfängerniveau - man braucht nur über das Rumpelstilzchenprinzip nachzufragen - Windows gibt brav und artig immer die richtige Antwort. Alzuviele Privilegien dürften ebenfalls dafür nicht nötig sein...
 
20.12.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.088 Betrachtungen

Unbenanntvor 0 min.
H.Brill19.04.2022
ChristopH22.02.2012

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

unbekannt (7x)
Frank Abbing (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie