2010-06-03 9 views
5

Przeczytałem wszystkie posty dotyczące przepełnienia stosu dotyczące CreateProcessAsUser i jest bardzo mało pytań, więc nie wstrzymuję się od tego. Ale wygląda na to, że zdecydowanie czegoś brakuje, więc może to być łatwe.LogonUser -> CreateProcessAsUser ze usługi systemowej

Docelowy system operacyjny to Windows XP. Mam usługę działającą jako "System lokalny", z której chcę utworzyć proces działający jako inny użytkownik. Dla tego użytkownika mam nazwę użytkownika i hasło, więc LogonUser idzie dobrze i dostaję token dla użytkownika (w tym przypadku konto administratora). Następnie próbuję użyć tokena do wywołania CreateProcessAsUser, ale nie powiedzie się, ponieważ token nie ma SeAssignPrimaryTokenPrivilege - jednak ma SeIncreaseQuotaPrivilege. (Użyłem funkcji GetTokenInformation do zrzucenia wszystkich uprawnień związanych z tym tokenem.) Zgodnie ze stroną MSDN dla CreateProcessAsUser, aby uzyskać połączenie z programem CreateProcessAsUser, potrzebne są oba uprawnienia.

Mówi także, że nie potrzebujesz SeAssignPrimaryTokenPrivilege, jeśli token, który przekazujesz do CreateProcessAsUser(), jest "podstawową tokenem procesu", który można utworzyć za pomocą CreateRestrictedToken(), ale potem zostanie skojarzony z użytkownikiem systemu lokalnego, a nie użytkownikiem docelowym, który próbuję uruchomić proces jako.

Jak utworzyć znacznik logowania, który jest jednocześnie ograniczoną wersją podstawowego tokena procesu wywołującego, ORAZ jest powiązany z innym użytkownikiem? Dzięki!

Zauważ, że nie ma potrzeby ingerencji użytkownika w tutaj - to wszystko bez nadzoru - nie ma więc potrzeby, aby robić rzeczy, jak chwytając WINSTA0 itp

+1

Co powoduje zwrot GetLastError po niepowodzeniu CreateProcessAsUser? – Anders

+0

Rozwiązałeś to? Potrzebuję też rozwiązania :) – AgentFire

+0

Chłopaki z Google Chrome rozwiązali ten problem również za pomocą nieudokumentowanego interfejsu API serwera uruchomieniowego, który istnieje aż do XP. Jeśli możesz zdobyć token dla użytkownika, który chcesz utworzyć proces ten można śledzić tutaj: http://src.chromium.org/chrome/trunk/src/remoting/host/win/launch_process_with_token.cc –

Odpowiedz

4

SE_ASSIGNPRIMARYTOKEN_NAME jest przywilejem można włączyć w proces/wątek z OpenProcessToken/OpenThreadToken + LookupPrivilegeValue + AdjustTokenPrivileges (łatwo jest mylić tego z TOKEN_ASSIGN_PRIMARY i MSDN mówi, trzeba zarówno do mocowania podstawowy token do procesu)

na tej XP: maszynę SP2, po prostu wywołanie LogonUser (... , LOGON32_LOGON_INTERACTIVE, ...) + CreateProcessAsUser działa dobrze bez naruszania jakichkolwiek uprawnień (Korzystanie z fałszywej usługi cmd.exe, ale to nie powinno tter)

ten cytat na MSDN:

Jeśli niezbędne uprawnienia nie są już włączona, CreateProcessAsUser pozwala im na czas trwania rozmowy

oraz fakt, że jesteś działając jako SYSTEM i powinien być w stanie włączyć dowolny przywilej, wierzę, że to przypisanie podstawowych rzeczy nie jest problemem.

+0

Masz rację, okazało się, że jest to śledź czerwony . Jest to przydatna wiedza na później. Dziękuję Ci. –

Powiązane problemy