Windows 操作系统使用 RID(相对标识符)来区分组和用户帐户。它是安全标识符 (SID) 的一部分,每次创建新帐户或组时,该数字都会增加一。本地管理员组 RID 始终为 500,GUEST组501,标准用户或组通常以数字 1001 开头。这可以帮助渗透测试人员和红队操作员在 RID 枚举期间区分帐户是提升的还是标准的。发现可以在注册表中进行修改,以便通过劫持有效帐户的 RID 使访客帐户成为管理员。此技术需要 SYSTEM 级别权限,因为注册表中的位置在标准或管理员权限下是不可见的。在攻击性操作期间,它可以用作仅使用属于系统一部分的帐户来保持持久性的方法。活动将在事件日志中填充为被劫持的用户而不是劫持者帐户。
注册表 SAM(安全帐户管理器)密钥存储有关系统本地帐户的信息。但是,此密钥的内容对标准用户和高级用户是隐藏的。
1
|
HKEY_LOCAL_MACHINE\SAM\SAM\
|
SAM 注册表项的内容可以通过以 SYSTEM 身份访问注册表来获取。这可以通过使用以下参数通过“ PsExec ”打开注册表来实现。
1
|
PsExec64.exe -s -i regedit.exe
|
以 SYSTEM 身份打开注册表
Windows“来宾”帐户的信息存储在以下注册表项中。十六进制值“ 0x1f5 ”转换为 501,即来宾帐户的 RID。管理员帐户的十六进制值是“ 0x1f4 ”,因为它转换为 500。
1
|
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Guest
|
这可以通过使用 Windows 实用程序 wmic 运行以下 WMI 查询来验证,该实用程序将为来宾帐户返回 501。
1
|
wmic useraccount where (name='Guest') get name,sid
|
![](https://img-blog.csdnimg.cn/img_convert/52e5173b777f32a160a5df7dc11522f3.png)
检索访客 SID
Guest 帐户的 RID 在“ 000001F5 ”键的值 F 中指定。偏移量30的十六进制值为“ 0xF501 ”,需要修改为“ 0xF401 ”(500)以劫持管理员帐户的 RID。偏移量38确定帐户是启用还是禁用(1502 禁用 - 1402 启用)。
1
|
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F5
|
RID 劫持 – 默认注册表值
RID 劫持 – 劫持的注册表值
更改这些值将启用来宾帐户(默认禁用)并将劫持提升的 RID(本地管理员)。Guest 帐户将拥有管理员权限,但该帐户仍不会出现在本地管理员组中。
根据场景,该技术已被添加到各种攻击性安全工具中。Metasploit Framework、Empire、Crackmapexec、ibombshell 和 PowerShell 脚本可用于自动化流程并通过 RID 劫持获得持久性。
Metasploit
Sebastian Castro 开发了一个 Metasploit 后期利用模块作为概念的初步证明。该模块需要一个提升的 Meterpreter 会话,并具有三个阶段:
- 检查权限并尝试提升到 SYSTEM
- 启用访客帐户
- 覆盖 RID
1
2
3
4
5
6
|
use post/windows/manage/rid_hijack
set SESSION 1
set GETSYSTEM true
set GUEST_ACCOUNT true
set PASSWORD pentestl
exploit
|