没有密码的CreateProcessAsUser和LogonUser

时间:2010-12-09 23:32:22

标签: windows service authentication

使用WTSGetActiveConsoleSessionId和WTSQueryUserToken,我知道在不使用密码的情况下,作为SYSTEM运行的服务可以launch an application onto the current desktop。是否启动CreateProcessAsUser而不需要LogonUser的密码,前提是程序启动进程有足够的权限?

编辑1 :情况与this instance模糊地相似,但我需要能够以用户身份启动流程,无论他们是否登录到系统当时。

3 个答案:

答案 0 :(得分:1)

有可能使用未记录的NtCreateToken函数;我认为this example project使用它。没错,这是不可能的。

答案 1 :(得分:0)

根据您尝试伪造的令牌,您将需要某些特权,特别是TCB会让您想到。服务有这个。 Nebett的“Windows NT / 2000 Native API Reference”就是一个例子。

然而,自Vista以来,在当前桌面上以SYSTEM形式创建进程的服务已经不那么容易了。改进的会话分离是这里的问题。但是,您可以在管道的另一端模拟用户,并且当前线程应该能够充当该用户(例如,SYSTEM)。

答案 2 :(得分:0)

理论上,至少,您可以实现自己的authentication package,然后使用它来生成合适的令牌。

根据您的具体要求,另一种可能的选择是使用CreateRestrictedToken函数的SidsToRestrictPrivilegesToDelete选项以及SetTokenInformation来创建经过适当修改的衍生产品你自己的令牌。

但是,如果您要运行不受信任的代码,我不会相信这种方法:我并不完全确定一个足够聪明的攻击者使用这样的代码是不可能的。用于攻击父进程或其他特权进程的令牌。 (特别是我不确定您是否能够创建新的登录会话并将其分配给受限制的令牌;这可能不是唯一的问题。)