0x00 前言在渗透过程中拿下一台主机后很多时候会选择开3389进远程桌面查看一下对方主机内有无一些有价值的东西可以利用 , 但是这也引出了一个问题,只要是登录进程就一定会留下痕迹,虽然在渗透完成后可以通过痕迹清理的方法清除自己登录的"证据" , 但是在多次渗透的过程中我不禁产生了思考,有没有一种方法能够最大化的隐藏自己登陆过对方主机呢,于是便有了下文
0x01 隐藏用户(影子用户)的创建与利用进行权限维持这里先提一个概念,在windows环境下创建用户如果后面带了一个"$"符号,在net user时默认是不显示的,下文基于这个特性展开
利用条件:①获得管理员权限;②得到cmdshell等shell环境(即管理员cmd)
操作步骤(我这里以Windows10 为例):
1.首先利用cmdshell添加一个用户名带$的用户 , 如:admin$:123456
命令如下:
net user admin$ 123456 /add #添加用户admin$net localgroup administrators admin$ /add #将admin$用户添加到管理员组administrators
文章插图
文章插图
使用命令net user查看用户发现并没有这个用户
文章插图
文章插图
此时可以直接登录3389进行操作,但隐蔽性仍不足,可以在控制面板的管理工具中用户与用户组查看到该用户的存在,还需要进一步操作
2.对注册表进行修改,在命令提示符与管理工具中无法查看
当你利用shell创建了一个影子用户的时候,利用这个影子用户可以开启3389进行登录,在目标机上对注册表进行数据操作,达到提高影子用户的隐蔽性
利用 运行 输入regedit 打开注册表 ,找到如下图的SAM
文章插图
文章插图
选择SAM 项 , 在工具栏上的“编辑 > 权限” 中设置权限 ,将 System与Administrators权限进行拒绝访问,可防止管理员删除这个用户)
两个权限都修改为允许
设置好后,回到注册表主页面,发现SAM项下出现了隐藏的子项 , 找到
SAM > Domains > Account > Users 和 Names
文章插图
文章插图
分别找到Administrator用户和admin$用户的两个项
Administrator用户的F值(SID):
文章插图
文章插图
将Administrator F表内的二进制数据复制下来
文章插图
文章插图
找一下admin$用户对应的SID和F值 , 如下所示:
文章插图
文章插图
将admin$目录下的F值修改为从administrator复制得来的F值
文章插图
文章插图
复制后如图所示
文章插图
文章插图
导出Users下对应admin$项
文章插图
文章插图
我这里保存到桌面
文章插图
文章插图
再把Names下对应的admin$项导出
文章插图
文章插图
同样导出到桌面
文章插图
文章插图
导出后如图所示
文章插图
文章插图
利用cmdshell(管理员权限)将admin$删除,删除后发现注册表中的admin$用户相关项已经消失
net user admin$ /del
文章插图
文章插图
这时候我们导入已经备份好的项与数值(导出后双击进行导入或者在注册表中导入)
我这里在注册表进行导入
文章插图
文章插图
文章插图
文章插图
可以看见导入已经成功了
文章插图
文章插图
导入成功后回到管理工具中的查看用户与用户组的页面,发现用户组和用户已经没有admin$这个用户的存在了,但实际上我们仍可以用这个用户的密码进行登录RDP,而且可以相当于Administrator管理员进行登录操作
文章插图
文章插图
开启3389进行登录,发现问题
文章插图
文章插图
【win7管理员账户不见了 win7真正建立隐藏账户方法】发现用户未授权 , 这时候又多了一个利用条件,要在右下的选择用户下 , 添加admin$用户的用户名,才能正常登录3389
文章插图
文章插图
文章插图
文章插图
修改后成功登录
文章插图
文章插图
0x02 细节拓展那我们在实战中 , 是以远程登录界面为基础的 。这时,我们又要拓展另一个权限,userauthentication权限,该权限主要是用于远程连接的身份验证,称之为鉴权
我们以图片直观地查看该权限开启与关闭的区别:
开启状态:
关闭状态就会直接进入微软官方对这个验证的解释:https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-terminalservices-rdp-winstationextensions-securitylayer
概括起来就是:
0 就是连接前使用 rdp 协议进行身份验证 , rdp 即远程桌面连接,可以简单理解为就是关闭验证 。1 是指在连接前两端协商来进行身份验证 , 这个是默认值 。2 就是使用 tls 协议来进行
将其参数设置为0,命令如下:
REG ADD "HKLMSYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0
这里注意一下,我在测试过程中,两个参数同时关闭(也存在关掉一个参数而不用验证的情况,但最好还是两个参数都关闭)才可以不用输入正确凭证进入3389的登录页面
文章插图
文章插图
以上操作的基础是目标机开启了远程桌面连接,如果没有开启远程连接需要先配置一下防火墙,设置为允许远程桌面连接,命令:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
这里解释一下:
netsh 是 windows 的网络配置命令,advfirewall firewall 意思为防火墙的高级设置,add rule 是添加一条规则,name 指定规则名称,protocol 指定协议 , dir 指定是出站还是入站,localport 指定端口,action 指定动作 allow 允许
设置后 , 我们再通过注册表来设置一下允许远程桌面连接,执行以下命令:
REG ADD "HKLMSYSTEMCurrentControlSetControlTerminalServer" /v fDenyTSConnections /t REG_DWORD /D 0 /f
做好以上工作,服务器的RDP远程登录界面就可以在无输入正确密码的情况下打开 , 远程桌面连接输入 ip 就会直接跳到目标锁屏页
不用凭证验证进入到登录页面:
文章插图
文章插图
0x03 思路拓展在这里展示的是代表新用户的影子用户的创建利用,如果遇上有意识的管理员,极有可能会在注册表中被发现,如果设置不可逆性的权限(查看访问设置完全控制的拒绝选项)可以暴力有效解决这个账号被删除的问题,但后面也会引发更大的问题
利用新的影子用户登录3389 , 会生成数据容易被发现,而且还需要在3389上添加条件才能进行正常登录(Windows10下是如此情况)
此处可以扩展两种方法:
①所以说这里我们可以开启来宾账户Guest在注册表对其F值进行更换,开启Guest账户,我们就可以登录而且减少了一些不必要的关注 。
②在添加授权用户那个选项中 , 将所有已知的用户进行添加,防止管理员过早发现创建的影子用户的存在 。
- ie浏览器版本过低怎么升级win7 w7系统可以用ie9浏览器吗
- windows色彩管理 win7看视频没色彩怎么办
- windows7端口号 win7打开3389端口详细方法
- win11管理员账户为啥不能改 win11怎么设置开机密码
- win7重装后开机很慢 win7又卡又慢怎么办
- win10家庭版账户被停用 win11账户被停用怎么办
- win7hosts文件无法保存 win7系统hosts找不到怎么办
- 百度下载速度限制解除 win7下载速度受限制怎么办
- win10底部任务栏无响应 win764系统怎么找隐藏应用
- 蜘蛛纸牌无法运行 win7蜘蛛纸牌怎么打开