2013-03-23 133 views
3

我需要模擬特定Windows服務的LogOn用戶帳戶。如何獲取Windows服務的LogOn用戶的安全令牌?

我已經能夠使用WMI獲取用戶名(可惜LogOn用戶身份似乎沒有使用任何常規的Windows服務相關的.NET類暴露)。但是,只有用戶名(可以是本地帳戶或域帳戶),我如何獲得該窗口標識的標記?

可以提供令牌的LogonUser WinAPI調用期望將密碼作爲參數,這顯然不可用。用戶輸入不是一個選項。

任何洞察力將不勝感激。

+1

是否要模擬運行服務的帳戶下的用戶?如果是這樣,你可以使用CreateRemoteThread – 2013-03-23 00:43:11

+0

讓我直截了當地說,你想模仿服務運行的用戶嗎?或者完全不同的用戶? – 2013-03-23 00:43:50

+0

@parapurarajkumar謝謝。將探索。我想到,也許我也可以使用OpenProcessToken。 – Manas 2013-03-23 00:46:36

回答

3

最終做以下幾點:

  1. 檢查服務正在運行。如果不啓動服務。
  2. 使用WMI從服務名稱獲取PID。
  3. 使用.NET Process類從PID獲取進程句柄。
  4. 使用OpenProcessHandle獲取進程令牌
  5. 使用DuplicateToken來複制令牌以驗證足夠的權限。
  6. 使用步驟令牌獲得4
  7. 模仿此新的WindowsIdentity創建新的WindowsIdentity,在模擬做了手術,然後撤消模擬,使用WindowsImpersonationContext。

希望這對任何需要冒充運行服務的用戶帳戶的人都很有用。

+0

請問您可以發佈此代碼嗎? – user1438082 2014-05-08 20:58:26

+0

我害怕的代碼是專有的。然而,我可以根據你需要澄清的步驟來指出...... – Manas 2014-05-12 21:37:59

1

儘管Microsoft完全沒有提供這方面的文檔,因爲他們希望假設服務登錄在登錄時不需要明文密碼,但事實上它和services.exe都使用正確的密碼調用LogonUser。

密碼被塞進註冊表的某處,只有SYSTEM有權訪問並加密才能啓動,但SYSTEM帳戶可以獲取機器密鑰並解密密碼。

http://www.computersecurityarticles.info/security/decrypting-lsa-secrets/

請注意,因爲這是沒有證件,你不應該使用它。

相關問題