2013-02-13 63 views
2

我有一個在Windows XP及以下版本上作爲LocalSystem運行的進程。我試圖找到一種方法讓它啓動另一個進程來冒充另一個用戶而不需要必須提供用戶密碼。在Windows上假冒用戶爲LocalSystem

原則上這應該是可能的,因爲LocalSystem有權「作爲操作系統的一部分行事」。但我無法找到正確的API。

有人能告訴我如何做到這一點無論是:

  • 與API,或從一個批處理文件

回答

2

您可以先通過WTSQueryUserToken獲取用戶的令牌,然後調用CreateProcessAsUser來啓動該過程。請注意,您只能爲當前登錄系統的用戶執行此操作。

+0

太好了,謝謝。爲了驗證,我將使用帶有「\\。\」的WTSOpenServer來獲取當前機器的句柄,WTSEnumerateSessions獲取可用的會話ID,WTSQueryUserToken爲其中一個會話獲取用戶令牌,並使用CreateProcessAsUser啓動該過程? – ARF 2013-02-13 15:10:35

+1

@ArikRaffaelFunke你可以簡單地調用'WTSGetActiveConsoleSessionId'獲取活動的會話ID。另外,不要忘記通過調用'DuplicateTokenEx'來複制令牌。 – JosephH 2013-02-13 15:27:19

+0

+1。爲了擴大這一點:理論上可能(但可能相當困難)爲未登錄的用戶做同樣的事情,儘管最終的過程無法訪問任何加密的數據或通過網絡。我相信你會通過註冊爲SSP/AP並使用CreateTokenEx和相關函數來實現這一點,但我從未嘗試過,因此我不知道可能遇到什麼樣的問題。 – 2013-02-13 22:35:15