【发布时间】:2011-04-18 14:39:03
【问题描述】:
我有一个从受限制的 UAC 启动进程中复制的用户令牌,我想从中删除拒绝组 SID。我怎么做? 如果我使用 TOKEN_GROUPS 信息类类型调用 SetTokenInformation,则会收到无效参数错误。
谢谢。
【问题讨论】:
我有一个从受限制的 UAC 启动进程中复制的用户令牌,我想从中删除拒绝组 SID。我怎么做? 如果我使用 TOKEN_GROUPS 信息类类型调用 SetTokenInformation,则会收到无效参数错误。
谢谢。
【问题讨论】:
事实证明,这是一种受支持的方式。基本上你需要做一个双重间接来完成这项工作。首先,您想使用WTSQueryUserToken 获取用户令牌的会话。接下来,您需要使用GetTokenInformation 获取关联的管理用户令牌(查找 TokenLinkedToken 信息)。现在您有了 admintokn,您可以使用该令牌调用 CreateProcessAsUser。如果需要环境块,可以调用CreateEnvironmentBlock获取正确的环境变量。
这是我从一位同事那里得到的一段 VB 代码(他传递了这个技巧):
Public Function StartAppInSessionAsAdmin(ByVal SessionID As String, ByVal WinstationName As String, ByVal AppName As String) As Integer
Dim hToken As IntPtr
Dim hLinkedToken As IntPtr
Dim bRet As Boolean
Dim pi As New PROCESS_INFORMATION
Dim si As New STARTUPINFO
Dim err As Integer
Dim iret As Integer
Dim lpEB As IntPtr
Dim TLT As New TOKEN_LINKED_TOKEN
Dim TLTSize As Integer
Dim retSize As Integer
si.lpDesktop = WinstationName '”Winsta0\default”
si.cb = Marshal.SizeOf(si)
TLTSize = Marshal.SizeOf(TLT.LinkedToken)
'get SessionID token
bRet = WTSQueryUserToken(Integer.Parse(SessionID), hToken)
'we need to get the TokenLinked Token
bRet = GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS.TokenLinkedToken, hLinkedToken, TLTSize, retSize)
'Use CreateEnvironment Block with the original token to create an environment for the new program with the USER Environment
bRet = CreateEnvironmentBlock(lpEB, hToken, False)
If bRet Then
'Call CreateProcessAsUser to create the process using the user's modified Token
iret = CreateProcessAsUser(hLinkedToken, Nothing, AppName, 0, 0, False, 1072, lpEB, Nothing, si, pi)
'Give user a feedback
If iret <> 0 Then
GiveFeedback(SessionID, "Message from StartAppInSessionAsAdmin", "CreateProcessAsUser succeeded", 2)
Else
err = Marshal.GetLastWin32Error
GiveFeedback(SessionID, "Message from StartAppInSessionAsAdmin", "CreateProcessAsUser failed with error " & err.ToString, 5)
End If
End If
End Function
他还写了一篇博文,提供更多信息:http://blogs.msdn.com/b/itasupport/archive/2010/03/29/uac-bypass-o-meglio-il-modo-supportato-e-by-design-di-aggirare-la-uac.aspx
【讨论】: