【实验原理】隐藏账户顾名思义就是在控制面板与开机选择中看不见的账户。它可以用输账号密码的方式进入。有了隐藏账户别人不会发现即使别人设了密码也可以直接进入而不删掉密码。只要在输密码阶段用ctrlaltdel就可以自己输密码进入。通过“$”符创建在命令行中不会显示的用户账户从注册表中导出该用户信息在命令行窗口下删除用户导入注册表隐藏账户创建完成️‍♂️ 隐藏账户实验原理拆解描述的是 Windows 系统中一种通过特殊符号 注册表操作实现的隐藏账户技术核心是让账户在常规界面控制面板、登录界面中不可见但仍可通过手动输入账号密码登录。✨ 核心实现步骤拆解创建带$符号的隐藏用户在命令行中创建用户名末尾带$的账户如test$这类账户在常规用户列表中会被隐藏。示例命令cmdnet user test$ 123456 /add这个$符号是关键它会让系统在默认的用户枚举中 “忽略” 该账户。导出该用户的注册表信息打开注册表编辑器regedit定位到plaintextHKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users找到刚创建的test$对应的子项将其导出为.reg文件备份。命令行删除该用户在命令行中执行删除命令cmdnet user test$ /del此时系统会从 SAM 数据库中移除该用户但我们已备份了它的注册表信息。导入注册表恢复隐藏账户双击之前导出的.reg文件将用户信息重新导入注册表。完成后该账户会重新存在于系统中但因为注册表中没有对应的 “可见性” 标记所以在登录界面、控制面板和net user命令中都不会显示实现了真正的隐藏。 登录方式与安全提示登录方法在登录界面按CtrlAltDel切换到经典登录框手动输入隐藏的用户名如test$和密码即可登录。⚠️ 重要风险提示这种技术极易被用于恶意入侵未经授权创建隐藏账户属于违法行为。现代 Windows 系统如 Win10/11、Server 2016已加强了 SAM 权限和安全策略该方法可能失效或触发安全警报。仅可在自己拥有完全控制权的实验环境中学习严禁用于破坏他人系统或窃取信息。 实验本质这是利用了 Windows 早期版本对$结尾用户名的隐藏特性结合注册表备份恢复的技巧实现了 “账户存在但不可见” 的效果是渗透测试与系统安全研究中的经典案例【实验步骤】1.命令行创建隐藏账户右键点击开始选择运行输入cmd查看用户。添加普通隐藏用户“hack$”注意这里需要满足密码策略的要求。隐藏账户提权添加到Administrators组中命令行查看用户选择“开始”-“Windows管理工具”-“计算机管理”-“本地用户和组”-“用户”查看用户。一、$ 后缀用户到底藏在哪重点Windows 原生规则Win7~Win11 都一样用户名以 **$ 结尾 **如 hack$CMDnet user→默认不显示这是它唯一 “隐藏” 的地方计算机管理 → 本地用户和组lusrmgr.msc→一定会显示控制面板 → 用户账户→会显示登录界面→会显示除非你额外改注册表1. 先把现象对应到规则你现在建了hack$带 $ 结尾图形界面计算机管理 → 用户能看到 hack$命令行net user看不到 hack$这不是你做错了也不是系统 bug这是 Windows原生设计。2. 为什么net user看不见命令行规则net user内部调用了一个系统 APINetUserEnum。 这个 API 写死了一条过滤规则默认不枚举、不返回以$结尾的用户名所以net user→ 直接被过滤掉 →看不到net user hack$→ 指名道姓查 →能看到Windows 这么设计本来是为了隐藏一些系统服务账号比如 IIS、SQL 这类后台用的账号不让管理员随手net user就看到一堆系统账号界面干净点。结论$ 后缀 被 NetUserEnum 过滤 命令行默认不显示。3. 为什么图形界面lusrmgr.msc还能看到GUI 规则图形界面不走 NetUserEnum 那套过滤lusrmgr.msc本地用户和组是直接读SAM 数据库里的全部用户不跳过 $ 结尾的账户。流程大概是SAM 里有啥用户 → 图形界面就列啥不管你名字是不是$结尾所以hack$一定会显示2.注册表创建隐藏账户WindowsSAM 注册表项是系统存放所有本地账户、密码哈希、权限配置的核心数据库正常管理员都无权限直接查看这一步就是篡改 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相对 ID0x3E9就是hack$这个用户的 RID对应的注册表项就是000003E9。这个编号就是账户在系统底层的 “身份证号”后面所有修改权限的操作都要通过这个编号找到对应的账户。找到它你才能拿到hack$的底层配置才能对它进行 “权限改造”。查看管理员“Administrator”的注册表内容。查看“Administrator”对应类型的注册表信息双击“000001F4”中的“F”值在弹窗中右键单击鼠标选择“全选”再次右键单击选择“复制”点击“确定”并选择“000003E9”中的“F”值进行编辑右键单击“全选”右键单击“粘贴”。3️⃣ 为什么要复制Administrator账户的F值粘贴到hack$的F值里这是整个流程最核心、最关键的一步也是实现 “克隆管理员” 的关键注册表F值是账户的权限 / 身份核心数据里面包含了账户的管理员权限标识、登录权限、安全描述符等关键信息。你把Administrator的F值复制给hack$就相当于把 “管理员的身份卡” 复制给了hack$。这样一来系统底层会把hack$识别成和Administrator完全一样的管理员账户拥有和真正管理员完全相同的权限。粘贴完成后点击“确定”选中“000003E9”并右键选择“导出”。输入文件名“user”保存在桌面上。同样的导出“hack$”的注册表信息。保存到桌面。4️⃣ 为什么要导出这两个注册表项导出000003E9hack$的用户配置和Names\hack$用户名映射的注册表文件是为了备份篡改后的账户数据。因为下一步你要把hack$从系统里删掉而删掉之后本地用户管理器和net user就找不到它了但只要把导出的注册表文件再导入系统就会直接从注册表加载这个账户不会再被用户管理器识别。一、先解释这里的用户管理器指什么日常说的「用户管理器」主要就是这两个系统组件图形界面lusrmgr.msc本地用户和组 / 计算机管理里的用户列表命令行接口net user、wmic useraccount这类查询用户的命令它们统一调用系统用户管理接口读取系统标准用户库而我们后面做的注册表影子账户会绕过这套接口所以在上面两处都看不到。二、假设不提前导出注册表直接执行net user hack$ /del删除账户分两层讲结果1. 执行删除命令时发生了什么net user 用户名 /del是标准账户删除操作 系统会同时做两件事在系统用户管理列表里移除该账户同步删除 SAM 注册表中对应Names\hack$ 对应 RID 项000003ED。 也就是说你之前修改的 F 值、权限配置会跟着一起被删掉。2. 删完之后还能不能登录、保留篡改的权限完全不能。注册表内hack$整条数据被清空系统底层已经没有这个账户无法用hack$账号密码登录系统之前复制过来的管理员权限、篡改的注册表配置全部失效相当于前面所有改F值的操作全部白费。三、反过来为什么必须「先导出 → 再删用户 → 再导入」完整逻辑链改 F 值把hack$底层权限改成管理员导出注册表把改好的完整账户数据单独存成.reg文件相当于 “存档备份”执行net user /del系统正常删除账户原生 SAM 里的这条账户数据被清除双击 reg 文件导入 把备份好的账户数据重新写回 SAM 注册表。关键变化现在这个账户不是通过「用户管理器」创建的是直接手写进注册表系统标准用户查询接口net user、本地用户和组遍历不到这类特殊写入的账户但系统登录、权限校验会读取 SAM 底层数据所以依然可以正常登录、保有管理员权限。四、一句话总结用户管理器net user 本地用户和组图形界面是系统公开的用户查询入口不导出直接删账户 → SAM 里账户数据连带篡改内容一起删除账户消失、无法登录先导出再删除再导入 → 脱离公开用户列表变成注册表级影子账户隐身且可正常登录使用。打开命令行窗口删除用户“hack$”。查看用户双击桌面上的两个注册表信息将其导入注册表选择“是”。命令行中查看用户。“本地用户和组”中查看用户命令行中查看用户“hack$”隐藏账户创建成功。如果想验证登录隐藏账户需进行以下操作。打开“运行”输入“gpedit.msc”命令打开本地组策略编辑器找到“计算机配置-Windows设置”-“安全设置”-“本地策略”-“安全选项”在右侧的内容中找到“交互式登录不显示最后的用户名”右键点击进入“属性”窗口开启该功能开启后可尝试切换用户登录隐藏账户。1. 这个策略本身是什么交互式登录不显示最后的用户名是 Windows 的一项安全策略默认情况下系统登录界面会显示上一次成功登录的用户名方便用户直接点选登录开启这个策略后登录界面不再显示上一次登录的用户名而是只显示空白的用户名输入框。2. 为什么要给隐藏账户开这个这和你之前做的注册表后门是配套的目的就是避免留下痕迹如果你用hack$登录过系统默认情况下下次开机的登录界面就会直接显示hack$这个名字这就直接暴露了后门账户开启这个策略后不管谁最后登录界面都不显示用户名别人就不会看到hack$也不会起疑心它是整个 “影子账户” 流程的最后一步让账户在登录界面也消失做到从命令行、图形用户列表、登录界面都看不到痕迹。3. 补充说明它不影响登录只是隐藏痕迹开启这个策略后你还是可以用hack$账号密码正常登录只是登录时必须手动输入用户名和密码不能点选它不会影响账户的权限和存在只是让系统不把账户名 “写在脸上”。一句话总结这一步的核心目的就是擦除隐藏账户的登录痕迹避免在登录界面暴露后门让整个攻击链路更隐蔽。注销当前用户或者切换用户尝试使用hack$用户进行登录。可以成功登录