Tips +1
关于RID
RID(Relative Identifier 相对标识符,简称RID)是在Windows操作系统中用于唯一标识本地用户、本地组和域用户的一种数字标识符。RID通常与安全标识符(Security Identifier,SID)结合使用,SID是一个全局唯一的字符串,用于标识安全主体(如用户或组)的身份。RID是SID中的一部分,它用于区分同一域或计算机内不同的用户或组。
在Windows中,每个本地用户帐户、本地组和域用户都有一个唯一的SID,而每个SID都包含一个相对标识符。RID的作用是确保在同一域或计算机中,不同的安全主体(用户或组)可以具有不同的标识符,以便进行有效的身份验证和授权。
一个典型的SID由以下部分组成:
-
安全标识符的权威机构(Authority Identifier):用于标识SID的创建者,如Windows域控制器或计算机的SID权威机构。
-
子机构标识符(Subauthority Identifier):用于标识特定用户或组的唯一部分,其中之一就是RID。
RID通常是一个相对小的整数,它只在特定的权威机构(如Windows域或计算机)内是唯一的。通过将RID与权威机构的标识符组合,可以创建全局唯一的SID。
总的来说,相对标识符(RID)是Windows操作系统中用于标识本地用户、本地组和域用户的一种数字标识符,它有助于确保不同的安全主体在同一域或计算机中具有唯一的标识符,以进行身份验证和授权。
我们通过如下命令查看SID
whoami /user
wmic useraccount get name,sid
administrator S-1-5-21-2359173339-1706851880-142975045-500
在SID值中,我们看到最后的500 就是administrator的RID值了。
S-1-5-21-{域的权威机构标识符}-RID
在Windows中,默认RID通常是特定的整数,用于标识内置的本地用户和组。这些默认RID用于标识一些常见的内置帐户和组。以下是一些常见的默认RID:
-
Administrator 用户: RID 500
-
默认情况下,Windows系统的管理员用户的RID是500。
-
Guest 用户: RID 501
-
Guest用户是用于访客访问的默认用户帐户,其RID是501。
-
安全主体:RID 1000
-
这个RID通常用于普通的本地用户帐户。
-
用户组: RID 513
-
这个RID用于内置的"Users"组,包括所有本地用户。
-
Administrators 组: RID 544
-
"Administrators"组是本地管理员组,其RID是544。
实现原理
在windows系统中,有部分应用是根据当前会话用户的RID值来判断权限的,因此我们可以到定位帐户的注册表文件,修改代表RID信息的位置实现RID 劫持。
实现思路
-
获得system权限
-
读取指定帐户的注册表信息
-
修改固定偏移地址,指定为新的RID
-
导入注册表,完成修改
不足之处:
-
帐户重新登录才能生效
-
环境变量被修改,影响正常使用
-
用户名的显示存在问题,容易被发现
-
模拟ADMINISTRATOR的权限会新建用户文件夹
利用场景:
-
启用帐户guest,修改RID,登录帐户guest,获得高权限
-
修改低权限用户RID,登录获得高权限
操作步骤
1、环境准备
我们创建两个账户user1 和 user2 ,其中user1 加入administrator 管理者。
通过写入测试,没有替换rid前,我们没有权限进行写入。
2、查看注册表信息
Windows 将用户的RID以及其他安全描述符保存在注册表HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsersNames 中,每个帐户的默认键值对应该帐户详细信息的注册表位置
我们可以看到Names 注册表 user1 账户的类型为0x3ed,将其转换成十进制则是user1账户的RID值1005。0x3ee,将其转换成十进制则是user2账户的RID值1006。
3、修改RID值
查看user1 的F值,在红框中偏移位置0x30f和0x31f为RID值对应的小端序(ED 03 00),转换过来就是0003ED(user1 账户的类型为0x3ed),再转换成十进制则为1005
查看user2 的F值,在红框中的小端序为EE 03 00,转换过来就是0003EE(user2 账户的类型为0x3ee),再转换成十进制则为1006
小端序(Little-Endian),将一个多位数的低位放在较小的地址处,高位放在较大的地址处,则称小端序。小端序与人类的阅读习惯相反,但更符合计算机读取内存的方式,因为CPU读取内存中的数据时,是从低地址向高地址方向进行读取的
最后我们通过更改user2的F值小端序值EE 03 00 为 user1的值,即可达到RID劫持的效果。
我们登录user2账户,可以发现user2 继承了user1的权限,但在部分功能的显示上还保留帐户user2
同样的操作我们将RID值替换成administrator的RID
如何排查
我们可以通过wmic 命令所有用户 的sid或者注册表f值里面的rid 、还有通过第三方软件进行扫描排查,如D盾。
1、使用命令查看
wmic useraccount get name,sid
whoami /user
2、使用regedit打开注册表编辑器找到[HKEY_LOCAL_MACHINE]——[SAM]——[SAM]——[Domains]——[Account]——[Users]
3、使用D盾_web查杀工具,集成了对克隆账号检测的功能
日志排查
在Windows安全事件日志中,帐户创建事件通常由以下两个事件ID表示:
-
事件ID 4720:这个事件ID表示用户帐户已成功创建。当新用户帐户在系统上创建时,通常会生成此事件。该事件提供了有关用户帐户的信息,包括用户名、帐户的SID(Security Identifier)、创建时间和日期,以及执行创建操作的主体信息。
-
事件ID 4722:这个事件ID表示用户帐户的密码已重置。虽然不是严格意义上的帐户创建事件,但当管理员或用户重置现有用户帐户的密码时,通常会生成此事件。这个事件提供了帐户的信息和密码更改的相关信息。
在Windows中,查看登录事件(登录成功或失败)的事件ID通常位于“安全”事件日志中。以下是查看登录事件ID的步骤:
-
打开事件查看器:
-
在Windows中,按下"Win + X"键,然后选择"事件查看器",或者在运行对话框中输入"eventvwr.msc"并按Enter。
-
还可以使用命令行,输入eventvwr并按Enter来打开事件查看器。
-
在事件查看器中,导航到 "Windows 日志",然后展开 "安全" 日志,因为登录事件通常记录在安全日志中。
-
在 "安全" 日志中,您可以使用筛选功能来查找特定的登录事件。以下是一些筛选的示例:
-
使用事件ID筛选:成功登录事件通常使用事件ID 4624 表示,而登录失败事件通常使用事件ID 4625 表示。
-
使用关键字筛选:使用关键字筛选以查找成功或失败的登录事件。关键字通常包括 "成功登录" 或 "登录失败"。
-
使用日期和时间筛选:指定一个日期和时间范围,以缩小搜索范围。
-
点击 "查找" 或 "确定" 按钮来查找相关的登录事件。事件查看器将显示匹配筛选条件的事件。
-
单击事件以查看详细信息,包括登录的用户名、计算机名称、登录类型、时间戳和其他相关信息。
通过检查事件查看器中的安全日志,您可以查找成功和失败的登录事件,以了解哪些用户在系统上登录或尝试登录,以及登录的结果。这些登录事件通常记录了有关登录的详细信息,包括用户帐户、登录时间、来源 IP 地址(如果适用)、计算机名称等。
请注意,为了查看安全事件日志,您通常需要具有管理员权限,因为这些日志包含敏感信息,只有管理员才能访问。登录事件的审计和监控对于维护系统的安全性非常重要。
参考链接:https://mp.weixin.qq.com/s/zu1dZB06dJCfRDR-7F3C2g
End
“点赞、在看与分享都是莫大的支持”
原文始发于微信公众号(贝雷帽SEC):【Tips+1】Windows 持久化之RID 劫持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论