Windows创建影子账户复现
实验环境:Windows Server 2008 R2 Standard
实现原理:在Windows系统中,系统会为每个用户账户建立一个唯一的安全标识符(Security Identifier,SID),在Windows系统的内部核心,都是利用SID而不是用户的账户名称来表示或识别每个用户的。SID综合用户账户创立的时间以及用户名等信息创建,因而是唯一的,并且不会被重复使用,通俗的说windows的账户的SID相当于身份证号码一样,能够唯一的标识某个系统用户的身份。
用户账户在注册表中的F值就是上述的用户的SID号。
“影子账户”从字面上来看,就是依附于某个特定的内置用户,这样创建的账户无法使用net user 命令进行查看也无法在控制面板中查看到,但是可以在用户管理器中看到末尾以$终结的账户。不过可以通过修改注册表可以实现在用户管理器(本地用户和组)中也看不到的效果。这两种实现之后的效果有很大的不同,在文中前者用 “
半影子账户
“ 后者 用 “完全影子账户
“ 来区分。
“半影子账户” 与 “完全影子账户” 实现的效果
“完全影子账户
“是由 “半影子账户
“继续操作注册表实现的。由于实现后的效果不同,可根据不同的需要,选择使用不同的账户类型。
半影子账户:无法在控制面板查看到,无法使用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
命令来给用户权限,如果不给权限将不能登录。至此,半影子账户
已经实现。
接下来的操作是由半影子账户
成为完全影子账户
的操作。
修改注册表
接着用命令行或者运行
中输入 regedit
找到HKEY_LOCAL_MACHINE\SAM\SAM
键
目前还没有内容,因为权限不足,所以现在更改一下权限。
选择当前的用户,并选择 “完全控制”
这时候再按F5
或者手动刷新一下,其他项就出来了。
再找到这个目录
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Administrator
接着观察管理员用户对应的是哪个类型,然后去选择点击哪个文件夹。(一般都是图中这个)
双击”F
“ ,并将其中所有内容复制出来
找到刚才创建的test$
用户,再去查看它所对应的类型
再次双击”F
“,将刚才复制的内容替换进去。
复制进去后,再把test$
对应的类型的文件夹以及Names
下对应的test$文件夹导出。
删除用户
然后使用命令行 net user test$ /del
删除这个用户
此时注册表里对应的两个表项已经没了。
使用net user 命令查看,发现用户已经被删除。
恢复用户
现在我们将刚刚导出的两个注册表表项导入进去(双击reg文件即可) 注意:要先导入Users
下面用户对应的那个类型的表项,再去导入Names
下test$
表项
对2也同样操作
这时候注册表已经恢复了
再次使用命令查看用户发现,test$
用户并没有出现。
在本地用户和组这里可以看到,”3个用户” (再次复现的时候发现是2个,可能第一次忘了刷新),但是只显示出了两个用户名。
在控制面板中也无法看到添加的用户。
但是使用 net user test$
命令可以发现,用户其实是存在的。
并且该用户可以正常登录计算机具有管理员权限。
删除隐藏用户方法
尝试使用 net user test$ /del
删除用户发现会提示”用户不属于此组”
所以想要删除用户,就再把这两个表项删除即可。
删除后,又变成了”2个用户”
至此,完全影子账户
创建完成。
防御
查看 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\
的表项。
查看Windows的登录日志。