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

发布于 2024-11-01 08:28:10 字数 5394 浏览 2 评论 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技术交流群

发布评论

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

关于作者

柠檬心

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

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