渗透技巧——Windows 帐户的 RID Hijacking

发布于 2024-11-01 08:28:10 字数 5394 浏览 9 评论 0

layout: post title: 渗透技巧——Windows 帐户的 RID Hijacking

0x00 前言

在之前的文章 《渗透技巧——Windows 系统的帐户隐藏》 介绍过利用帐户克隆建立隐藏帐户的技巧,是通过复制目标帐户对应注册表项 F 键的值,使得隐藏帐户获得了相同的权限。

如果换一种思路,将目标帐户对应注册表项 F 键的部分内容覆盖已有帐户,那么已有帐户能否获得目标帐户的权限呢?

这就是本文将要介绍的方法——RID Hijacking

注:该方法最早公开于 2017 年 12 月,地址如下:http://csl.com.co/rid-hijacking/

0x01 简介

本文将要介绍以下内容:

  • RID 劫持的方法
  • 编写脚本的实现思路
  • 利用分析
  • 防御检测

0x02 相关概念

SID

全称 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,如下图

Alt text

SID 为: S-1-5-21-2752016420-1571072424-526487797-1001

S 表示该字符串是 SID 1 表示 SID 的版本号 5-21-2752016420-1571072424-526487797 对应 ID authority 1001 表示 RID

RID

Windows 系统帐户对应固定的 RID:

  • 500: ADMINISTRATOR
  • 501: GUEST
  • 502: krbtgt(域环境)
  • 512: Domain Admins(域环境)
  • 513: Domain Users(域环境)
  • 514: Domain Guests(域环境)
  • 515: Domain Computers(域环境)
  • 516: Domain Controllers(域环境)

0x03 RID 劫持方法

对于 Windows 系统来说,注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 下包含当前系统的所有帐户列表,每个帐户的默认键值对应该帐户详细信息的注册表位置(即 RID 的十六进制表示)

注:需要获得 system 权限才能读取

举例如图

Alt text

帐户 a 的注册表默认值为 0x3e9

注:帐户 a 为普通用户权限

详细信息的注册表位置为 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003E9

详细信息如下图

Alt text

F 键的内容如下图

Alt text

偏移位置 0x30f0x31f 对应 RID

由于是 litte-endian 字节存储,所以上图中从 F 键获得的 RID 值为 0x03E9 ,转换为十进制为 1001

使用帐户 a 登录,执行 whoami /all 获得帐户 a 的 SID,如下图

Alt text

内容相同

测试 1: 伪造成内置管理员帐户 ADMINISTRATOR

将帐户 a 的 RID 修改为 500(固定值,表示 windows 系统内置管理员 ADMINISTRATOR),对应十六进制为 01F4 ,如下图

Alt text

注:帐户 a 需要重新登录才能生效

登录帐户 a,帐户 a 继承了 ADMINISTRATOR 的权限,成为了管理员

登录用户名为: 原用户名.机器名,如下图

Alt text

用户文件夹也随之改变,如下图

Alt text

直观理解:

帐户 a 变成了新帐户 a.WIN-BH7SVRRDGVA,继承了 ADMINISTRATOR 的权限

测试 2: 伪造成管理员帐户 1

新建管理员帐户 1,RID 为 1000(0x03e8),如下图

Alt text

将帐户 a 的 RID 修改为 1000(0x03e8)

修改后如下图

Alt text

重新登录帐户 a

帐户 a 继承了帐户 1 的权限,成为了管理员

登录用户名变为 1,执行 whoami /all 输出的用户名为 a,但 RID 为 1000(帐户 1 的 RID),如下图

Alt text

环境变量对应为用户 1,如下图

Alt text

直观理解:

帐户 a 变成了原有帐户 1,继承了 1 的权限,但在部分功能的显示上还保留帐户 a

0x04 编写脚本的实现思路

实现思路

  1. 获得 system 权限
  2. 读取指定帐户的注册表信息
  3. 修改固定偏移地址,指定为新的 RID
  4. 导入注册表,完成修改

具体实现细节上可参考文章 《渗透技巧——Windows 系统的帐户隐藏》 中的说明

参考代码:https://github.com/3gstudent/Windows-User-Clone

由于功能较为简单,因此实现代码留给读者完成

msf 对应的实现模块: windows/manage/rid_hijack

0x05 利用分析

对于 RID Hijacking,实现原理上很简单: 定位帐户的注册表文件,修改代表 RID 信息的位置即可

但在利用上存在以下不足:

  • 帐户重新登录才能生效
  • 环境变量被修改,影响正常使用
  • 用户名的显示存在问题,容易被发现
  • 模拟 ADMINISTRATOR 的权限会新建用户文件夹

利用场景

  1. 启用帐户 guest,修改 RID,登录帐户 guest,获得高权限
  2. 修改低权限用户 RID,登录获得高权限

0x06 防御检测

站在防御的角度,攻击者首先需要获得当前系统的 system 权限

检测思路:

  • 查看注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\ 下的信息是否存在异常
  • 帐户 guest 是否被开启

0x07 小结

本文介绍了 RID Hijacking 的实现方法,分析利用条件,给出防御建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

柠檬心

暂无简介

文章
评论
26 人气
更多

推荐作者

七七

文章 0 评论 0

囍笑

文章 0 评论 0

盛夏尉蓝

文章 0 评论 0

ゞ花落谁相伴

文章 0 评论 0

Sherlocked

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文