实验环境:Windows Server 2008 R2 Standard

实现原理:在Windows系统中,系统会为每个用户账户建立一个唯一的安全标识符(Security Identifier,SID),在Windows系统的内部核心,都是利用SID而不是用户的账户名称来表示或识别每个用户的。SID综合用户账户创立的时间以及用户名等信息创建,因而是唯一的,并且不会被重复使用,通俗的说windows的账户的SID相当于身份证号码一样,能够唯一的标识某个系统用户的身份。
用户账户在注册表中的F值就是上述的用户的SID号。

“影子账户”从字面上来看,就是依附于某个特定的内置用户,这样创建的账户无法使用net user 命令进行查看也无法在控制面板中查看到,但是可以在用户管理器中看到末尾以$终结的账户。不过可以通过修改注册表可以实现在用户管理器(本地用户和组)中也看不到的效果。这两种实现之后的效果有很大的不同,在文中前者用 “半影子账户“ 后者 用 “完全影子账户“ 来区分

“半影子账户” 与 “完全影子账户” 实现的效果

image-20220107235727104

完全影子账户“是由 “半影子账户“继续操作注册表实现的。由于实现后的效果不同,可根据不同的需要,选择使用不同的账户类型。

半影子账户:无法在控制面板查看到,无法使用net user查看到,但是可以在用户管理器(本地用户和组)中看到,也可以在注册表中看到。可以使用net user test$ /del 删除。是一个独立的账户,登录之后拥有自己的HOME目录,并且可以和管理员用户同时在线,不会发生冲突。

完全影子账户:只能在注册表中看到,其他地方都看不到。并且不能够通过net user test$ /del来删除用户。但是是和依附的账户共用一个SID。它没有自己的HOME目录,也就是说使用自己设置的账户名和密码登录,登录后的用户却是你依附的用户(Administrator)。所以如果你登录前Administrator在线,登录后,Administrator将会被你顶掉。

复现步骤

添加用户

首先使用命令行新建一个用户 net user test$ [密码] /add $ 符号可以使该用户在使用net user命令时隐藏,但在注册表或者其他地方依然可以查看到。

如果仅仅想要实现半影子账户的效果,仅需要再添加一行net localgroup administrators test$ /add命令来给用户权限,如果不给权限将不能登录。至此,半影子账户已经实现。

image-20220107205350123

接下来的操作是由半影子账户成为完全影子账户的操作。

修改注册表

接着用命令行或者运行中输入 regedit

找到HKEY_LOCAL_MACHINE\SAM\SAM

image-20220107205637970

目前还没有内容,因为权限不足,所以现在更改一下权限。

image-20220107205758620

选择当前的用户,并选择 “完全控制”

image-20220107205927495

这时候再按F5或者手动刷新一下,其他项就出来了。

再找到这个目录

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Administrator

接着观察管理员用户对应的是哪个类型,然后去选择点击哪个文件夹。(一般都是图中这个)

image-20220107210529445

双击”F“ ,并将其中所有内容复制出来

image-20220107211034475

找到刚才创建的test$用户,再去查看它所对应的类型

image-20220107211411296

再次双击”F“,将刚才复制的内容替换进去。

image-20220107211541472

复制进去后,再把test$对应的类型的文件夹以及Names下对应的test$文件夹导出。

image-20220107211829957

image-20220107211913950

删除用户

然后使用命令行 net user test$ /del 删除这个用户

image-20220107212125014

此时注册表里对应的两个表项已经没了。

image-20220107212154955

使用net user 命令查看,发现用户已经被删除。

image-20220107212639801

恢复用户

现在我们将刚刚导出的两个注册表表项导入进去(双击reg文件即可) 注意:要先导入Users下面用户对应的那个类型的表项,再去导入Namestest$表项

image-20220107212452911

image-20220107212520704

image-20220107212756712

对2也同样操作

image-20220107212833769

image-20220107212853698

这时候注册表已经恢复了

image-20220107212922811

再次使用命令查看用户发现,test$用户并没有出现。

image-20220107213115791

在本地用户和组这里可以看到,”3个用户” (再次复现的时候发现是2个,可能第一次忘了刷新),但是只显示出了两个用户名。

image-20220107213221350

在控制面板中也无法看到添加的用户。

image-20220107213619212

但是使用 net user test$ 命令可以发现,用户其实是存在的。

image-20220107213741621

并且该用户可以正常登录计算机具有管理员权限。

删除隐藏用户方法

尝试使用 net user test$ /del 删除用户发现会提示”用户不属于此组”

image-20220107213916774

所以想要删除用户,就再把这两个表项删除即可。

image-20220107214832497

删除后,又变成了”2个用户”

image-20220107221102745

image-20220107221158938

至此,完全影子账户创建完成。

防御

查看 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\的表项。

查看Windows的登录日志。