| |
|
|
| 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??? KompilierenMarkierenSeparierenDEF @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
|
|
|
| |
|
|
|
| Hallo Andreas...
Ich glaube DuplikateTokenEx ist die Lösung für dein Problem.... |
|
|
| |
|
|
|
| Hallo Andreas...
JA GENAU. Das muß es sein! Besten Dank, Andreas...
|
|
|
| |
|
|
|
Frank Abbing | Hi,
ich glaube, du hast hier ein Thema angesprochen, das die breite Mehrheit eher scheut. Darum die Selbstgespräche? |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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... |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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... |
|
|
| |
|
|