0x00:前言
持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常遇见windows用的比较多的一些持久化方式方便以后排查问题使用.
Windows
0x01:"经典的"shift后门
这个算是比较古老还比较"经典的"的隐藏方式了,这里简单讲一下,在windows中有一些辅助功能,能在用户未登录系统之前可以通过组合键来启动它,类似的辅助功能有:
代码语言:javascript复制C:WindowsSystem32sethc.exe 粘滞键,启动快捷键:按五次shift键
C:WindowsSystem32utilman.exe 设置中心,启动快捷键:Windows U键
在低版本的windows中,我们可以直接把setch.exe替换成我们的后门程序.并在用户的登录页面敲击五次shift键就可以出现CMD窗口.
0×2 注册表自启动
MSF的Persistence模块利用的就是写注册表自启动项来实现的,一般自启动项是这两个键:Run和RunOnce,两者的区别如下
代码语言:javascript复制Run:该项下的键值即为开机启动项,每一次随着开机而启动。
RunOnce:RunOnce和Run差不多,唯一的区别就是RunOnce的键值只作用一次,执行完毕后就会自动删除
用户级
代码语言:javascript复制HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce
系统级
代码语言:javascript复制HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce
HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionRunOnce
举个栗子(windown10用户级)
0x03:定时任务
Windows实现定时任务主要有schtasks与at二种方式.简单的说schtasks是at的升级版本.
at:at命令在win7-08等高版本的windows中是不能将任务在前台执行的,也就是只会打开一个后台进程.
schtasks:是将定时的任务在前台执行.
0x04:WMI
WMI是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机.主要与Powershell命令配合使用可以实现无文件攻击重要方式,具有良好的隐蔽性也是目前较为常用的持久化手段.
利用方式参考:
代码语言:javascript复制https://github.com/mattifestation/WMI_Backdoor
利用WinRM实现内网无文件攻击反弹shell
0x05:屏幕保护程序
原创干货 | 利用屏幕保护程序进行权限维持
0x06:自启动服务
自启动服务一般是在电脑启动后在后台默认或者加载指定的服务程序,可以将exe应用程序注册为服务,也可以将dll文件注册为服务.
MSF可以使用Metsvc创建服务,此类操作极容易被AV查杀.
代码语言:javascript复制meterpreter > run metsvc -A
运行run metsvc -A完将会在目标主机上以Meterpreter的服务的形式注册在服务列表中,并开机自动自动:
代码语言:javascript复制meterpreter > run metsvc -r
0x07:DLL劫持
如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL.
如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行.
具体参考
看我如何利用微信反弹shell
另外一种思路是通过查看被劫持的DLL的导出函数表,编程实现劫持DLL向原DLL的导出函数的转发,并加入你的恶意代码达到一个劫持的效果.
0x08:影子账户
CMD创建用户时 后面加一个$可以创建一个匿名用户,创建完毕后我们再把这个用户添加到administrator组
代码语言:javascript复制net user jaky$ luomiweixiong /add
net localgroup administrators jaky$ /add
可以看到net user是看不到我们创建的用户,但是计算机管理-用户和组中可以看到.这时我们还需要更改一下注册表
其键位置为:
代码语言:javascript复制HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsers
注意:SAM键值默认是只能system权限修改的,所以我们要修改一下SAM键的权限,给予administrator完全控制和读取的权限.
参考
https://jingyan.baidu.com/article/ca00d56c537a9fe99febcf79.html
0x09:COM劫持
主要通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实例,所以,这就可以用作后门来使用,并且,该方法也能够绕过Autoruns对启动项的检测.
参考
https://www.gdatasoftware.com/blog/2014/10/23941-com-object-hijacking-the-discreet-way-of-persistence
Powershell版本的poc
https://github.com/3gstudent/COM-Object-hijacking
0x10:BITS Jobs后门
BITS Jobs是windows后台智能传输服务,全称Background Intelligent Transfer Service (BITS),用于HTTP或SMB文件传输.
它可以给任务设置优先级和异步下载,智能调节带宽,从而不占用其他应用的网络资源.
Powershell和bitsadmin.exe都可用于创建和管理Bits Job,但Powershell似乎只支持文件传输,windows原生程序bitsadmin.exe还支持传输完成后执行代码.
常见的bitsadmin命令
代码语言:javascript复制bitsadmin /create [type] DisplayName //创建一个任务
bitsadmin /cancel <Job> //删除一个任务
bitsadmin /list /allusers /verbose //列出所有任务
bitsadmin /AddFile <Job> <RemoteURL> <LocalName> //给任务test添加一个下载文件
bitsadmin /SetNotifyCmdLine <Job> <ProgramName> [ProgramParameters] //设置在任务完成传输时或任务进入状态时将运行的命令行命令。
bitsadmin /Resume <Job> //激活传输队列中的新任务或挂起的任务。
bitsadmin /cancel <Job> //删除某个任务
bitsadmin /reset /allusers //删除所有任务
bitsadmin /complete <Job> //完成某个任务
举个栗子
代码语言:javascript复制bitsadmin /create test #创建一个任务
bitsadmin /addfile test C:windowssystem32calc.exe C:UsersmacDesktopcalc.exe #给任务添加一个下载或者负责对象,我这里直接复制本地calc.exe
bitsadmin /SetNotifyCmdLine test cmd.exe "cmd.exe /c calc.exe" #设置任务完成时将运行的命令
bitsadmin /resume test #激活任务
0x11:INF文件后门
INF文件或安装信息文件是Microsoft Windows用于安装软件和驱动程序的纯文本文件.
INF文件最常用于安装硬件组件的设备驱动程序.Windows包含用于创建基于INF的安装的IExpress工具.
INF文件是Windows安装程序API及其后续版本Windows Installer的一部分.
举个栗子
0x12:文件关联
文件关联就是将一种类型的文件与一个可以打开它的程序建立起一种依存关系.一个文件可以与多个应用程序发生关联.可以利用文件的"打开方式"进行关联选择.
我们可以用assoc命令显示或修改文件扩展名关联,我们可以看一下.txt文件和jpg文件的关联
可以用ftype命令显示或修改用在文件扩展名关联中的文件类型
代码语言:javascript复制txtfile=C:Windowssystem32calc.EXE %1
举个栗子