繁体   English   中英

如何获取Windows服务的LogOn用户的安全令牌?

[英]How to get security token of a windows service's LogOn user?

我需要模拟特定Windows服务的LogOn用户帐户。

我已经能够使用WMI获取用户名(遗憾的是,LogOn用户身份似乎没有使用任何常规的Windows服务相关的.NET类公开)。 但是,仅使用用户名(可以是本地帐户或域帐户),如何获取该窗口标识的令牌?

可以提供令牌的LogonUser WinAPI调用需要将密码作为参数,这显然是不可用的。 用户输入不是一个选项。

任何见解将不胜感激。

完成以下操作:

  1. 检查服务是否正在运行。 如果没有开始服务。
  2. 使用WMI从服务名称获取PID。
  3. 使用.NET Process类从PID获取进程句柄。
  4. 使用OpenProcessHandle获取进程令牌
  5. 使用DuplicateToken复制令牌,以验证足够的权限。
  6. 使用在步骤4中获取的令牌创建新的WindowsIdentity。
  7. 冒充这个新的WindowsIdentity,在模拟下进行操作,然后使用WindowsImpersonationContext撤消模拟。

希望这对需要模拟运行服务的用户帐户的任何其他人都有用。

虽然这完全没有被Microsoft记录,因为他们想假装服务登录在登录时不需要明文密码,但事实上它和services.exe使用正确的密码调用LogonUser。

密码被推送到注册表深处某个地方,只有SYSTEM可以访问并加密才能启动,但SYSTEM帐户可以获取机器密钥并解密密码。

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

请注意,因为这是未记录的,所以不应该使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM