2012-11-25 69 views
2

啓用UAC時,操作系統爲Windows 7或更高版本。呼叫過程具有管理員權限,已由UAC框確認。如何獲取Windows SYSTEM用戶令牌

我想在用戶系統下產生一個新的控制檯窗口(cmd.exe)(不要問爲什麼)。我可以通過使用Sysinternals的PsExec工具或類似的工具交互地完成這個工作,但是我沒有源代碼,我需要了解它的工作原理。

我知道我必須調用CreateProcessAsUser(),並且第一個參數(hToken)設置爲NULL時工作正常,但現在我需要知道如何獲取hToken。我明白我可以通過調用LogonUser()來獲得這樣的標記 - 但不能用於SYSTEM。我將如何獲得SYSTEM的令牌?

我想過使用DuplicateTokenEx(),但這需要原始令牌,我沒有。

我必須查詢進程列表,找到任何SYSTEM進程,並嘗試獲取該令牌重複或什麼?我不想對PsExec工具進行反向工程,或者其他人正在做這件事。

+0

如果您不想對其編程,請搜索「runassystem」。 – ChristianWimmer

回答

3

通常,您會安裝並啓動一個服務,配置爲以SYSTEM身份登錄。然後您可以使用OpenProcessTokenDuplicateTokenEx複製令牌。

您可能需要使用SetTokenInformation來更改令牌的會話ID以與交互式用戶的會話ID相匹配。您需要將Act作爲操作系統特權的一部分來執行此操作,因此您應該從服務內部執行此操作。一旦重複令牌可以使用,您可以使用DuplicateHandle將句柄複製到管理進程中,或者(使用正確的選項),您也可以直接從服務啓動命令shell。

0

替代方法打開winlogon進程並允許最大訪問權限,嘗試打開進程標記(也允許最大值),然後嘗試用impersonate權限複製此winlogon句柄。在win8.1上,這將會成功。在其他情況下,您需要臨時更改令牌dacl,使用null或您自己的管理進程令牌

+0

我仍然會建議安裝自己的服務,而不是使用系統進程,但如果由於某種原因而無法實現,這聽起來像是一個可行的選擇。請注意,啓用備份和恢復權限可以繞過大多數權限檢查,因此它在這種情況下也可以正常工作,並且可以幫助您避免與DACL發生危險的混淆。如果你必須弄亂DACL,絕對不要使用空DACL--這會引發安全漏洞。 –

相關問題