渗透技巧——Windows帐户的RID Hijacking
在之前的文章《渗透技巧——Windows系统的帐户隐藏》介绍过利用帐户克隆建立隐藏帐户的技巧,是通过复制目标帐户对应注册表项F键的值,使得隐藏帐户获得了相同的权限。
如果换一种思路,将目标帐户对应注册表项F键的部分内容覆盖已有帐户,那么已有帐户能否获得目标帐户的权限呢?
这就是本文将要介绍的方法——RID Hijacking
注:
该方法最早公开于2017年12月,地址如下:
http://csl.com.co/rid-hijacking/
本文将要介绍以下内容:
RID劫持的方法
编写脚本的实现思路
利用分析
防御检测
全称Security Identifiers(安全标识符),是Windows系统用于唯一标识用户或组的可变长度结构
官方说明地址:
https://msdn.microsoft.com/en-us//library/windows/desktop/aa379594(v=vs.85).aspx
SID包含以下信息:
The revision level of the SID structure
48-bit identifier authority value
relative identifier (RID)
Windows命令行执行whoami /all
可获得当前用户的SID,如下图
SID为: S-1-5-21-2752016420-1571072424-526487797-1001
S表示该字符串是SID 1表示SID的版本号 5-21-2752016420-1571072424-526487797对应ID authority 1001表示RID
Windows系统帐户对应固定的RID:
500: ADMINISTRATOR
501: GUEST
502: krbtgt(域环境)
512: Domain Admins(域环境)
513: Domain Users(域环境)
514: Domain Guests(域环境)
515: Domain Computers(域环境)
516: Domain Controllers(域环境)
对于Windows系统来说,注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
下包含当前系统的所有帐户列表,每个帐户的默认键值对应该帐户详细信息的注册表位置(即RID的十六进制表示)
注:
需要获得system权限才能读取
举例如图
帐户a的注册表默认值为0x3e9
注:
帐户a为普通用户权限
详细信息的注册表位置为HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003E9
详细信息如下图
F键的内容如下图
偏移位置0x30f
和0x31f
对应RID
由于是litte-endian字节存储,所以上图中从F键获得的RID值为0x03E9
,转换为十进制为1001
使用帐户a登录,执行whoami /all
获得帐户a的SID,如下图
内容相同
将帐户a的RID修改为500(固定值,表示windows系统内置管理员ADMINISTRATOR),对应十六进制为01F4
,如下图
注:
帐户a需要重新登录才能生效
登录帐户a,帐户a继承了ADMINISTRATOR的权限,成为了管理员
登录用户名为: 原用户名.机器名,如下图
用户文件夹也随之改变,如下图
直观理解:
帐户a变成了新帐户a.WIN-BH7SVRRDGVA,继承了ADMINISTRATOR的权限
新建管理员帐户1,RID为1000(0x03e8),如下图
将帐户a的RID修改为1000(0x03e8)
修改后如下图
重新登录帐户a
帐户a继承了帐户1的权限,成为了管理员
登录用户名变为1,执行whoami /all
输出的用户名为a,但RID为1000(帐户1的RID),如下图
环境变量对应为用户1,如下图
直观理解:
帐户a变成了原有帐户1,继承了1的权限,但在部分功能的显示上还保留帐户a
获得system权限
读取指定帐户的注册表信息
修改固定偏移地址,指定为新的RID
导入注册表,完成修改
具体实现细节上可参考文章《渗透技巧——Windows系统的帐户隐藏》中的说明
参考代码:
https://github.com/3gstudent/Windows-User-Clone
由于功能较为简单,因此实现代码留给读者完成
msf对应的实现模块: windows/manage/rid_hijack
对于RID Hijacking,实现原理上很简单: 定位帐户的注册表文件,修改代表RID信息的位置即可
但在利用上存在以下不足:
帐户重新登录才能生效
环境变量被修改,影响正常使用
用户名的显示存在问题,容易被发现
模拟ADMINISTRATOR的权限会新建用户文件夹
启用帐户guest,修改RID,登录帐户guest,获得高权限
修改低权限用户RID,登录获得高权限
站在防御的角度,攻击者首先需要获得当前系统的system权限
检测思路:
查看注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\
下的信息是否存在异常
帐户guest是否被开启
本文介绍了RID Hijacking的实现方法,分析利用条件,给出防御建议
渗透技巧——Windows帐户的RID Hijacking