windows中常见后门持久化方法总结
windows中常见后门持久化方法总结
文章来源:先知社区
文章链接:https://xz.aliyun.com/t/6461
前言
当我们通过各种方法拿到一个服务器的权限的时候,我们下一步要做的就是后渗透了,而后门持久化也是我们后渗透很重要的一部分,下面我来总结一下windows下常见的后门持久化的方法
后门持久化
我的操作环境是:
-
无AV、管理员权限(提权、免杀等是后门持久化的铺垫,当然有的方法也并不是全部需要这些铺垫)
-
操作系统:
win7,windows server 2008R2,xp
shift后门
这个是比较老的方式了,这里简单讲一下,在windows中有一些辅助功能,能在用户未登录系统之前可以通过组合键来启动它,类似的辅助功能有:
-
C:\Windows\System32\sethc.exe粘滞键,启动快捷键:按五次shift键 -
C:\Windows\System32\utilman.exe设置中心,启动快捷键:Windows+U键
在低版本的windows中,我们可以直接把setch.exe替换成我们的后门程序,下面我们把setch.exe替换为cmd.exe
映像劫持
这个和shift后门差不多,只不过在低版本的windows中,我们可以简单地替换程序,但是在高版本的windows版本中替换的文件受到了系统的保护,所以这里我们要使用另外一个知识点:映像劫持。
"映像劫持",也被称为"IFEO"(Image File Execution Options)
简单来说就是当目标程序被映像劫持时,当我们启动目标程序时,启动的是劫持后的程序而不是原来的程序
操作也很简单,在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option下添加一个项sethc.exe,然后在sethc.exe这个项中添加debugger键,键值为我们恶意程序的路径,如下图
效果如下
注册表自启动项
MSF的Persistence模块利用的就是写注册表自启动项来实现的,一般自启动项是这两个键:Run和RunOnce,两者的区别如下
-
Run:该项下的键值即为开机启动项,每一次随着开机而启动。
-
RunOnce:RunOnce和Run差不多,唯一的区别就是RunOnce的键值只作用一次,执行完毕后就会自动删除
常见注册表启动项键的位置:
用户级
系统级
修改一下:
执行结果:
定时任务
windows下定时任务的命令有两个分别是:at和schtasks,他们两者主要区别是at命令在win7、08等高版本的windows中是不能将任务在前台执行的,也就是只会打开一个后台进程,而schtasks是将定时的任务在前台执行,下面我们逐个看看
at的一些参数
at的执行如下:
schtasks一些参数:
schtasks的执行如下:
用户登陆初始化
Userinit的作用是用户在进行登陆初始化设置时,WinLogon进程会执行指定的login scripts,所以我们可以修改它的键值来添加我们要执行的程序
注册表路径为:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit,我们添加一个我们启动的程序,多个程序用逗号隔开
效果如下:
Logon Scripts
Logon Scripts优先于av先执行,我们可以利用这一点来绕过av的敏感操作拦截
注册表路径为:HKEY_CURRENT_USER\Environment,创建一个键为:UserInitMprLogonScript,其键值为我们要启动的程序路径
效果如下:
屏幕保护程序
在对方开启屏幕保护的情况下,我们可以修改屏保程序为我们的恶意程序从而达到后门持久化的目的
其中屏幕保护的配置存储在注册表中,其位置为:HKEY_CURRENT_USER\Control Panel\Desktop,关键键值如下:
-
SCRNSAVE.EXE- 默认屏幕保护程序,我们可以把这个键值改为我们的恶意程序 -
ScreenSaveActive- 1表示屏幕保护是启动状态,0表示表示屏幕保护是关闭状态 -
ScreenSaverTimeout- 指定屏幕保护程序启动前系统的空闲事件,单位为秒,默认为900(15分钟)
设置如下:
效果图:
自启动服务
自启动服务一般是在电脑启动后在后台加载指定的服务程序,我们可以将exe文件注册为服务,也可以将dll文件注册为服务
为了方便起见我们可以直接用Metasploit来注册一个服务
meterpreter > run metsvc -A
运行之后msf会在%TMP%目录下创建一个随机名称的文件夹,然后在该文件夹里面生成三个文件:metsvc.dll、metsvc-server.exe、metsvc.exe
同时会新建一个服务,其显示名称为Meterpreter,服务名称为metsvc,启动类型为"自动",默认绑定在31337端口。
如果想删除服务,可以执行
meterpreter > run metsvc -r
影子用户
影子用户顾名思义就是一个隐藏用户,只能通过注册表查看这个用户,其它方式是找不到这个用户的信息的
在用户名后面加一个$可以创建一个匿名用户,创建完毕后我们再把这个用户添加到administrator组
可以看到net user是看不到我们创建的用户,但是计算机管理-用户和组中可以看到
所以这时候我们就需要修改一下注册表,其键位置为:HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
注意:SAM键值默认是只能system权限修改的,所以我们要修改一下SAM键的权限,给予administrator完全控制和读取的权限
然后我们将administrator用户对应的项中的F值复制到test$对应xiang中的F值,然后保存
然后我们将test$删除掉
然后再双击导出的注册表文件,然后我们再看一下
net user和计算机管理-用户和组中都查看不到用户了,但是我们可以用net user test$查看用户信息
这个时候我们再用net user test$ /del是删除不掉这个用户的,只能通过注册表来删除。
waitfor
关于waitfor手册中是这么解释的:
waitfor的语法
参数解释:
关于waitfor更多的信息可以看一下微软提供的手册:链接
我们来测试一下看看
结果如下
但是这样只能执行一次,这对我们后门持久化很不利,所以我们得想办法让它持久化。
这里就要借用一下三好师傅的powershell脚本:链接,三好师傅的分析:链接
执行效果如下:
该方法的优点就是能主动激活,但是缺点也明显就是只能在同一网段才能接收和发送激活信号、服务器重启之后就不行了。
CLR
CLR的简述(来自百度百科)
需要注意的是CLR能够劫持系统中全部.net程序,而且系统默认会调用.net程序,从而导致我们的后门自动触发,这是我们后门持久化的一个好的思路,下面来实现一下
修改一下注册表,注册表路径:HKEY_CURRENT_USER\Software\Classes\CLSID\,新建子项{11111111-1111-1111-1111-111111111111}(名字随便,只要不与注册表中存在的名称冲突就行),然后再新建子项InProcServer32,新建一个键ThreadingModel,键值为:Apartment,默认的键值为我们dll的路径
然后在cmd下设置一下:
PS:要注册为全局变量,不然只能在当前cmd窗口劫持.net程序
然后执行一波,效果如下,可以看到已经成功劫持了
Hijack CAccPropServicesClass and MMDeviceEnumerator
什么是COM(来自WIKI)
这个和CRL劫持.NET程序类似,也是通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator的劫持,而系统很多正常程序启动时需要调用这两个实例,所以这个很适合我们的后门持久化。
经测试貌似64位系统下不行(或许是我姿势的问题),但是32位系统下可以,下面说一下32位系统利用方法:
在%APPDATA%\Microsoft\Installer\{BCDE0395-E52F-467C-8E3D-C4579291692E}\下放入我们的后门dll,重命名为test._dl
PS:如果Installer文件夹不存在,则依次创建Installer\{BCDE0395-E52F-467C-8E3D-C4579291692E}
然后就是修改注册表了,在注册表位置为:HKCU\Software\Classes\CLSID\下创建项{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7},然后再创建一个子项InprocServer32,默认为我们的dll文件路径:C:\Users\qiyou\AppData\Roaming\Microsoft\Installer\{BCDE0395-E52F-467C-8E3D-C4579291692E},再创建一个键ThreadingModel,其键值为:Apartment
然后就是测试了,打开iexplore.exe,成功弹框
PS:{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7}对应CAccPropServicesClass,{BCDE0395-E52F-467C-8E3D-C4579291692E}对应MMDeviceEnumerator
劫持MruPidlList
在注册表位置为HKCU\Software\Classes\CLSID\下创建项{42aedc87-2188-41fd-b9a3-0c966feabec1},再创建一个子项InprocServer32,默认的键值为我们的dll路径,再创建一个键ThreadingModel,其键值:Apartment
该注册表对应COM对象MruPidlList,作用于shell32.dll,而shell32.dll是Windows的32位外壳动态链接库文件,用于打开网页和文件,建立文件时的默认文件名的设置等大量功能。其中explorer.exe会调用shell32.dll,然后会加载COM对象MruPidlList,从而触发我们的dll文件
当用户重启时或者重新创建一个explorer.exe进程时,就会加载我们的恶意dll文件,从而达到后门持久化的效果。这里我们直接结束一个explorer.exe进程再起一个进程来看一下效果
office系列
Word WLL
把dll文件保存在%APPDATA%\Microsoft\Word\Startup,然后把后缀名改为wll
PS:Startup支持启动多个wll
打开word,成功弹框
Excel XLL
Excel dll的编写可以参考三好师傅这个项目:链接
用三好师傅powershell脚本生成现成的Excel dll:链接
将生成的DLL文件复制到%appdata%\Microsoft\AddIns目录下,然后再修改一下注册表,office版本对应的注册表位置如下:
我这里使用的2010的,所以我们要修改的是HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options,添加一个键OPEN,键值为:/R test.dll
然后打开Excel,发现成功弹出计算器
PowerPoint VBA add-ins
用三好师傅powershell脚本生成现成的PowerPoint dll:链接
将生成的DLL文件复制到%appdata%\Microsoft\AddIns目录下,然后参考前面我给出的office版本对应的注册表位置,在HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\PowerPoint下新建一个子项:AddIns,然后在AddIns下面新建一个子项test,新建一个键为Autoload,类型为DWORD,键值为:1;新建一个键为Path,类型为SZ,键值为我们dll文件的路径
打开PowerPoint成功弹出计算器
文件关联
什么是文件关联
我们可以用assoc命令显示或修改文件扩展名关联,我们可以看一下.txt文件的关联
我们可以用ftype命令显示或修改用在文件扩展名关联中的文件类型
相关注册表
我们以.txt为例,通过文件关联来修改它默认打开的程序。
修改\HKEY_CLASS_ROOT\txtfile\shell\open\command的默认值为我们要执行的程序
效果如下:
AppInit_DLLs
User32.dll被加载到进程时,会读取AppInit_DLLs注册表项,如果有值,调用LoadLibrary() api加载用户dll。
其注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,把AppInit_DLLs的键值设置为我们dll路径,将LoadAppInit_DLLs设置为1
效果如下:
Netsh helper
netsh(全称:Network Shell) 是windows系统本身提供的功能强大的网络配置命令行工具,它可以添加自定的dll从而拓展其功能,我们可以使用netsh add helper yourdll.dll来添加拓展功能,添加了之后,在启动netsh的时候就会加载我们dll文件
添加自定义helper dll
关于helper dll的编写可以参考这个项目:链接
我们可以使用两种方式来添加helper:
-
通过cmd添加helper
-
通过注册表添加helper
其位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh,创建一个键,名称随便,键值为我们dll的路径
效果如下:
利用BITS
BITS (后台智能传送服务) 是一个 Windows 组件,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输。
bitsadmin是一个命令行工具,用于创建下载或上传任务并监视其进度。你可以执行bitsadmin /?或bitsadmin /HELP获取帮助列表。
常见的bitsadmin命令
下面我们来测试一下:
效果如下:
重启电脑之后任务还是存在
重启电脑之后任务会再一次被激活,大概几分钟之后我们的命令会再次执行(由于时间太长了就不录制gif了)
如果我们想让任务完成,可以执行bitsadmin /complete test,calc.exe也会复制到桌面上
利用inf文件实现后门
inf文件
inf文件的结构
想了解更多可以看一下微软的手册:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc939869(v=technet.10)#information-inf-file-entries
下面举一个calc.inf弹计算器的例子
命令行下执行:
效果如下:
后门实现:
在注册表HKEY_CURRENT_USER\Software\Microsoft\处依次新建子项\IEAK\GroupPolicy\PendingGPOs,然后再新建几个键,如下:
-
键:
Count,类型:REG_DWORD,键值:1 -
键:
Path1,类型:REG_SZ,键值:C:\Users\Administrator\Desktop\test\calc.inf//这个为我们inf文件的路径,这里以上面那个inf文件例子为例 -
键:
Section1,类型:REG_SZ,键值:DefaultInstall
如下图所示:
重启电脑之后成功弹出计算器
但是重启之后PendingGPOs该项就会被清除,需要我们重新修改注册表
后记
以上就是我所总结后门持久化的所有内容了,当然还有很多方法没有在文章内提及,虽然有的方法都是老生常谈的了,但是还是在一些实战环境中屡试不爽,有一句话说的好(这句话忘记是哪位师傅说的了=。=):知识面宽度决定攻击面广度,知识链深度决定攻击链的长度

浙公网安备 33010602011771号