2.隐藏账户

【实验原理】

隐藏账户,顾名思义就是在控制面板与开机选择中看不见的账户。它可以用输账号密码的方式进入。有了隐藏账户别人不会发现,即使别人设了密码也可以直接进入而不删掉密码。只要在输密码阶段用ctrl+alt+del就可以自己输密码进入。通过"$"符创建在命令行中不会显示的用户账户,从注册表中导出该用户信息,在命令行窗口下删除用户,导入注册表,隐藏账户创建完成

🕵️‍♂️ 隐藏账户实验原理拆解

描述的是 Windows 系统中一种通过特殊符号 + 注册表操作实现的隐藏账户技术,核心是让账户在常规界面(控制面板、登录界面)中不可见,但仍可通过手动输入账号密码登录。


✨ 核心实现步骤拆解

  1. 创建带 $ 符号的隐藏用户

    • 在命令行中创建用户名末尾带 $ 的账户(如 test$),这类账户在常规用户列表中会被隐藏。

    • 示例命令: cmd

      复制代码
      net user test$ 123456 /add
    • 这个 $ 符号是关键,它会让系统在默认的用户枚举中 "忽略" 该账户。

  2. 导出该用户的注册表信息

    • 打开注册表编辑器(regedit),定位到:

      plaintext

      复制代码
      HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
    • 找到刚创建的 test$ 对应的子项,将其导出为 .reg 文件备份。

  3. 命令行删除该用户

    • 在命令行中执行删除命令: cmd

      复制代码
      net user test$ /del
    • 此时系统会从 SAM 数据库中移除该用户,但我们已备份了它的注册表信息。

  4. 导入注册表恢复隐藏账户

    • 双击之前导出的 .reg 文件,将用户信息重新导入注册表。
    • 完成后,该账户会重新存在于系统中 ,但因为注册表中没有对应的 "可见性" 标记,所以在登录界面、控制面板和 net user 命令中都不会显示,实现了真正的隐藏。

🔒 登录方式与安全提示

  • 登录方法 :在登录界面按 Ctrl+Alt+Del 切换到经典登录框,手动输入隐藏的用户名(如 test$)和密码即可登录。
  • ⚠️ 重要风险提示
    1. 这种技术极易被用于恶意入侵 ,未经授权创建隐藏账户属于违法行为
    2. 现代 Windows 系统(如 Win10/11、Server 2016+)已加强了 SAM 权限和安全策略,该方法可能失效或触发安全警报。
    3. 仅可在自己拥有完全控制权的实验环境中学习,严禁用于破坏他人系统或窃取信息。

📌 实验本质

这是利用了 Windows 早期版本对 $ 结尾用户名的隐藏特性,结合注册表备份恢复的技巧,实现了 "账户存在但不可见" 的效果,是渗透测试与系统安全研究中的经典案例

【实验步骤】

1.命令行创建隐藏账户

右键点击开始,选择运行,输入cmd,查看用户。

添加普通隐藏用户"hack$",注意这里需要满足密码策略的要求。

隐藏账户提权添加到Administrators组中

命令行查看用户

选择"开始"->"Windows管理工具"->"计算机管理"->"本地用户和组"->"用户"查看用户。

一、$ 后缀用户到底藏在哪?(重点)

Windows 原生规则(Win7~Win11 都一样):

  • 用户名以 ** 结尾 \*\*(如 \`hack`):
    1. CMD:net user默认不显示(这是它唯一 "隐藏" 的地方)
    2. 计算机管理 → 本地用户和组(lusrmgr.msc)一定会显示
    3. 控制面板 → 用户账户会显示
    4. 登录界面会显示(除非你额外改注册表)
1. 先把现象对应到规则

你现在:

  • 建了 hack$(带 $ 结尾)
  • 图形界面(计算机管理 → 用户):能看到 hack$
  • 命令行 net user看不到 hack$

这不是你做错了,也不是系统 bug,这是 Windows 原生设计


2. 为什么 net user 看不见?(命令行规则)

net user 内部调用了一个系统 API:NetUserEnum。 这个 API 写死了一条过滤规则:

默认不枚举、不返回以 $ 结尾的用户名

所以:

  • net user → 直接被过滤掉 → 看不到
  • net user hack$ → 指名道姓查 → 能看到

Windows 这么设计,本来是为了隐藏一些系统服务账号 (比如 IIS、SQL 这类后台用的账号),不让管理员随手 net user 就看到一堆系统账号,界面干净点。

结论:$ 后缀 = 被 NetUserEnum 过滤 = 命令行默认不显示。


3. 为什么图形界面(lusrmgr.msc)还能看到?(GUI 规则)

图形界面不走 NetUserEnum 那套过滤!

lusrmgr.msc(本地用户和组)是直接读 SAM 数据库 里的全部用户不跳过 $ 结尾的账户

流程大概是:

  • SAM 里有啥用户 → 图形界面就列啥
  • 不管你名字是不是 $ 结尾
  • 所以 hack$ 一定会显示

2.注册表创建隐藏账户

Windows SAM 注册表项 是系统存放所有本地账户、密码哈希、权限配置 的核心数据库,正常管理员都无权限直接查看,这一步就是篡改 SAM 实现彻底隐身

选择"开始"->"运行",输入"regedit"打开注册表编辑器。

打开"HKEY_LOCAL_MACHINE\SAM\SAM",无法查看SAM下的内容,需要选中"SAM"右键单击选择"权限"。(SAM 存储全部本地用户数据,默认权限锁定,普通管理员无法读取 / 修改)

1️⃣ 为什么要给 SAM 注册表项加管理员权限?
  • HKEY_LOCAL_MACHINE\SAM\SAM 是 Windows 的 "账户密码保险柜",系统默认把它锁死了,就算是管理员也没有读取 / 修改权限。
  • 你现在要做的是修改账户的底层信息,不把权限打开,连里面的内容都看不到,更别说复制粘贴了。
  • 所以这一步是给管理员解锁 "保险柜钥匙",让你能读写里面的账户数据。

添加管理员权限。

刷新注册表编辑器界面。

打开"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names"找到"hack$"用户,选中并查看其类型。

"hack$"用户的类型为"0x3ed",选中"Users"中"000003E9"查看其内容(类型以实际为准)

定位刚创建的 hack$ 账户对应的注册表项编号

2️⃣ 为什么要找到 hack$ 对应的注册表项编号(比如 000003E9)?
  • 每个 Windows 本地用户,在 SAM 里都有一个唯一的RID(相对 ID)0x3E9 就是 hack$ 这个用户的 RID,对应的注册表项就是 000003E9
  • 这个编号就是账户在系统底层的 "身份证号",后面所有修改权限的操作,都要通过这个编号找到对应的账户。
  • 找到它,你才能拿到 hack$ 的底层配置,才能对它进行 "权限改造"。

查看管理员"Administrator"的注册表内容。

查看"Administrator"对应类型的注册表信息

双击"000001F4"中的"F"值,在弹窗中右键单击鼠标选择"全选",再次右键单击选择"复制"

点击"确定"并选择"000003E9"中的"F"值进行编辑,右键单击"全选",右键单击"粘贴"。

3️⃣ 为什么要复制 Administrator 账户的 F 值,粘贴到 hack$F 值里?

这是整个流程最核心、最关键的一步,也是实现 "克隆管理员" 的关键:

  • 注册表 F 值,是账户的权限 / 身份核心数据,里面包含了账户的管理员权限标识、登录权限、安全描述符等关键信息。
  • 你把 AdministratorF 值复制给 hack$,就相当于把 "管理员的身份卡" 复制给了 hack$
  • 这样一来,系统底层会把 hack$ 识别成和 Administrator 完全一样的管理员账户,拥有和真正管理员完全相同的权限。

粘贴完成后点击"确定",选中"000003E9"并右键选择"导出"。

输入文件名"user"保存在桌面上。

同样的,导出"hack$"的注册表信息。保存到桌面。

4️⃣ 为什么要导出这两个注册表项?
  • 导出 000003E9hack$ 的用户配置)和 Names\hack$(用户名映射)的注册表文件,是为了备份篡改后的账户数据
  • 因为下一步你要把 hack$ 从系统里删掉,而删掉之后,本地用户管理器和 net user 就找不到它了,但只要把导出的注册表文件再导入,系统就会直接从注册表加载这个账户,不会再被用户管理器识别。

一、先解释:这里的用户管理器指什么

日常说的「用户管理器」,主要就是这两个系统组件:

  1. 图形界面lusrmgr.msc(本地用户和组 / 计算机管理里的用户列表)
  2. 命令行接口net userwmic useraccount 这类查询用户的命令

它们统一调用系统用户管理接口,读取系统标准用户库;而我们后面做的注册表影子账户,会绕过这套接口,所以在上面两处都看不到。


二、假设:不提前导出注册表,直接执行 net user hack$ /del 删除账户

分两层讲结果:

1. 执行删除命令时发生了什么

net user 用户名 /del标准账户删除操作: 系统会同时做两件事:

  • 系统用户管理列表里移除该账户;
  • 同步删除 SAM 注册表中对应 Names\hack$ + 对应 RID 项(000003ED)

👉 也就是说:你之前修改的 F 值、权限配置,会跟着一起被删掉

2. 删完之后还能不能登录、保留篡改的权限?

完全不能

  1. 注册表内 hack$ 整条数据被清空,系统底层已经没有这个账户;
  2. 无法用 hack$ 账号密码登录系统;
  3. 之前复制过来的管理员权限、篡改的注册表配置全部失效;
  4. 相当于前面所有改 F 值的操作全部白费。

三、反过来:为什么必须「先导出 → 再删用户 → 再导入」?

完整逻辑链:

  1. 改 F 值 :把 hack$ 底层权限改成管理员;
  2. 导出注册表 :把改好的完整账户数据 单独存成 .reg 文件(相当于 "存档备份");
  3. 执行 net user /del :系统正常删除账户,原生 SAM 里的这条账户数据被清除
  4. 双击 reg 文件导入 : 把备份好的账户数据重新写回 SAM 注册表

关键变化:

  • 现在这个账户不是通过「用户管理器」创建 的,是直接手写进注册表
  • 系统标准用户查询接口(net user、本地用户和组)遍历不到这类特殊写入的账户
  • 但系统登录、权限校验会读取 SAM 底层数据,所以依然可以正常登录、保有管理员权限

四、一句话总结

  1. 用户管理器 = net user + 本地用户和组图形界面,是系统公开的用户查询入口;
  2. 不导出直接删账户 → SAM 里账户数据连带篡改内容一起删除,账户消失、无法登录
  3. 先导出再删除再导入 → 脱离公开用户列表,变成注册表级影子账户,隐身且可正常登录使用

打开命令行窗口,删除用户"hack$"。

查看用户

双击桌面上的两个注册表信息将其导入注册表,选择"是"。

命令行中查看用户。

"本地用户和组"中查看用户

命令行中查看用户"hack$",隐藏账户创建成功。

如果想验证登录隐藏账户,需进行以下操作。打开"运行"输入"gpedit.msc"命令,打开本地组策略编辑器,找到"计算机配置->Windows设置"->"安全设置"->"本地策略"->"安全选项",在右侧的内容中找到"交互式登录:不显示最后的用户名",右键点击进入"属性"窗口开启该功能,开启后可尝试切换用户登录隐藏账户。

1. 这个策略本身是什么?

交互式登录:不显示最后的用户名 是 Windows 的一项安全策略:

  • 默认情况下,系统登录界面会显示上一次成功登录的用户名,方便用户直接点选登录;
  • 开启这个策略后,登录界面不再显示上一次登录的用户名,而是只显示空白的用户名输入框。

2. 为什么要给隐藏账户开这个?

这和你之前做的注册表后门是配套的,目的就是避免留下痕迹

  • 如果你用 hack$ 登录过系统,默认情况下,下次开机的登录界面就会直接显示 hack$ 这个名字,这就直接暴露了后门账户;
  • 开启这个策略后,不管谁最后登录,界面都不显示用户名,别人就不会看到 hack$,也不会起疑心;
  • 它是整个 "影子账户" 流程的最后一步:让账户在登录界面也消失,做到从命令行、图形用户列表、登录界面都看不到痕迹

3. 补充说明:它不影响登录,只是隐藏痕迹

开启这个策略后:

  • 你还是可以用 hack$ 账号密码正常登录,只是登录时必须手动输入用户名和密码,不能点选;
  • 它不会影响账户的权限和存在,只是让系统不把账户名 "写在脸上"。

一句话总结

这一步的核心目的,就是擦除隐藏账户的登录痕迹,避免在登录界面暴露后门,让整个攻击链路更隐蔽。

注销当前用户,或者切换用户尝试使用hack$用户进行登录。可以成功登录

相关推荐
吃胖点儿2 小时前
RAG系统优化完整路径:从30%到90%准确率的工程实践
服务器·数据库·windows
技术不好的崎鸣同学3 小时前
Windows 命令提示符(CMD)内容补缺&输入输出重定向及管道
运维·windows
vistaup3 小时前
windows hermes agent 使用记录
windows·hermes
夜郎king3 小时前
PostgreSQL 16 搭配 PgVector:Windows 11 完整安装教程
数据库·windows·postgresql
慵懒的猫mi3 小时前
从 Windows 到 deepin:Electron 软件无损移植实战
linux·windows·deepin
码农阿强4 小时前
OpenAI Codex 全平台详细安装与配置教程(Windows/Mac/Linux)
linux·windows·macos·ai
思麟呀4 小时前
C++工业级日志项目(四)日志落地
linux·开发语言·c++·windows
玖釉-5 小时前
单词搜索:二维网格中的 DFS 回溯与剪枝优化
c++·windows·算法·深度优先·剪枝
诸葛务农5 小时前
如何用windows自带的录音机录制(内录)电脑播放的音乐
windows·电脑