驻留的艺术在于是否能够成功地利用漏洞。有时候很难维持对特定环境的访问,尤其是在无法在特权用户组中创建或添加用户、复制凭证或哈希、实现<bind/reverse> shell
时。本文介绍如何在获取目标的高访问权限后用离散和静默的方法来保持后门可用。
研究人员发现和创建了一个名为RID劫持的后利用技术。
通过利用系统资源,可以在受害者设备上劫持任意原有的账户(包括500个内置的管理员账户)的RID,并分配到另一个用户账户。攻击可以:
研究人员发现之前没有这种技术的记载,因此参考enable_support_account post开发了Metasploit模块。该模块利用前面提到的漏洞,修改了内置账户support_388945a0
的安全描述,但仅能工作在XP/2003 Windows系统上。
但rid_hijack模块可以用受害者设备上的任意原有账户自动化攻击,具体见post/windows/manage/rid_hijack。
该模块在Windows受害者设备上建立了meterpreter session,然后创始检查权限并修改与特定账户相关的注册表。下面是对每个参数的简单描述:
SYSTEM
权限;Guest
账户作为劫持者账户;500
。GUEST_ACCOUNT
,该参数会被忽略。该攻击在Windows XP, Windows Server 2003, Windows 8.1和Windows 10上进行了测试。以Windows 8.1 Pro虚拟机作为受害者,其中有一个用户账户user
,两个内置账户Administrator账户(Administrador
)和Guest账户 (Invitado
)。
建立meterpreter session
后,运行该模块来劫持RID值为500
的内置Administrator账号,并将RID值分配给Guest账号。很明显,Guest账号并没有密码,所以需要设置一个密码。
然后就可以以Guest账号和指定的密码登陆设备。
然后就会发现成功地以Guest登陆机器了,还可以执行以下命令:
cmd.exe
打开console,可以看到是以Administrator 账号运行的。whoami
和检查默认路径查看。system32
中写文件。因为XP是使用Security Account Manager (SAM)来保存本地用户和被指账号的安全描述。每个账号都有一个分配的RID值来识别它。与域名控制器不同,Windows工作站和服务器会将部分数据保存在HKLM\SAM\SAM\Domains\Account\Users key
中,访问需要SYSTEM权限。
Names子项中含有包括内置账号在内的所有本地用户账号名。这些子项都保存为二进制值,定义了其类型属性,账号的RID是十六进制的0x1f4 = 500, 0x1f5 = 501
。每个账号的RID和上面的子项都是一一对应的。
从这些子项中,可以找出一些有趣的REG_BINARY
值,F和V
。这些值含有与每个账号安全描述相关的重要数据,包括账号RID的副本和是否启用标志。F值是低字节序的,RID值保存在offset 30h
处,enabled/disabled flag
在offset 38h
处。
但是怎么找到这个值呢?在研究了Windows Authentication & Auhtorization结构后,就可以发现F二进制中保存的RID副本是LSASS和SRM在将username
翻译为security identifier (SID)
时,与MSV1_0.dll通信后,用来生成primary access token
的。
因为LSASS信任从中获取的信息,因此会根据从SAM提取的安全数据创建access token
。SAM中提取的安全数据包括RID copy
,这也是用来定义登陆用户的安全环境的。
RID劫持包含在特定offset的F值设置RID来覆写一些字节。因为完整性问题,修改会导致Windows在大多数关键操作系统进程中将劫持者账号的误认为是被劫持者的账号,因此就拥有了相应的访问权限。
攻击对系统内置账号和用户创建的用户都有效。