上一篇文章中学习了下linux下的一些权限维持常用的技术手段,Linux、Windows权限维持常用后门学习总结之Linux,接着学习下Windows下的常用技术手段。
MSF模块
Metasploit自带有权限维持相关后门,常用的有:通过服务启动(metsvc);通过启动项启动(persistence);通过计划任务(scheduleme&schtasksabuse)。
|
|
Metsvc
|
|
检测及查杀
|
|
Persistence
|
|
检测及查杀
|
|
Scheduleme&Schtasksabuse
|
|
检测及查杀
|
|
计划任务
无论是windows还是linux操作系统都提供计划任务功能,来实现定时或者周期性的执行一些指令。
|
|
检测及查杀
|
|
影子账户
影子账户是指除了在注册表里面有用户记录,其他地方都不存在用户的信息。net user
或计算机管理里本地用户和用户组是看不到用户信息的,具有很好的隐蔽性质。
|
|
检测及查杀
|
|
PowerShell后门
Empire框架
|
|
Schtasks-Backdoor
|
|
MSF
|
|
MOF
|
|
注册表
注册表可以理解为一个树状结构的数据库,它具有一些特殊的数据类型用来存储一些数据满足应用程序的需要。
名称 | 作用 |
---|---|
HKEY_CLASSES_ROOT | 用于存储一些文档类型、类、类的关联属性 |
HKEY_CURRENT_CONFIG | 用户存储有关本地计算机系统的当前硬件配置文件信息 |
HKEY_CURRENT_USER | 用于存储当前用户配置项 |
HKEY_CURRENT_USER_LOCAL_SETTINGS | 用于存储当前用户对计算机的配置项 |
HKEY_LOCAL_MACHINE | 用于存储当前用户物理状态 |
HKEY_USERS | 用于存储新用户的默认配置项 |
Run/RunOnce Keys
Run键值代表着开机启动项,也就是说在这个项下的键值会随着开机启动(这里的开机是指用户登录,也就是说只要有登录操作就会执行)。
RunOnce键值类似于 Run 键值,唯一的区别在于,RunOnce 键值只执行一次,操作执行后会被自动删除。
用户级
|
|
管理员
|
|
检测及查杀
|
|
BootExecute Key
可以通过它来实现启动Natvice程序,Native程序在驱动程序和系统核心加载后将被加载,此时会话管理器(smss.exe)进行windowsNT用户模式并开始按顺序启动native程序。由于smss.exe
在Windows子系统加载之前启动,因此会调用配置子系统来加载当前的配置单元。具体注册表键值为:
|
|
上述注册表下有一个名为BootExecute的多字符串值键,它的默认值是autocheck autochk *
,用于系统启动时的某些自动检查。这个启动项目里的程序是在系统图形界面完成前就被执行的,所以具有很高的优先级。
检测及查杀
|
|
Userinit Key
Userinit注册表键的作用是在用户进行登陆时,WinLogon进程加载的指定的login scripts,可以更改它的值来添加与删除程序。具体键值:
|
|
一般情况下,其默认值为userinit.exe
,由于该子键的值中可使用逗号分隔开多个程序,因此,在键值的数值中可加入其它程序。
结合上面powershell中的msf方法,可以达到无文件后门效果:
|
|
检测及查杀
|
|
LogonScripts key
Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截,具体键值:
|
|
检测及查杀
|
|
Startup Keys
开始菜单启动项,指示启动文件夹的位置,User Shell Folders优先于Shell Folders。
|
|
检测及查杀
|
|
Browser Helper Objects
本质上是Internet Explorer启动时加载的DLL模块
|
|
检测及查杀
|
|
AppInit_DLLs
注册表中默认存在两个注册表项:AppInit_DLLs
和LoadAppInit_DLLs
(win2003没有,但是可以新建),User32.dll被加载到进程时,会读取AppInit_DLLs注册表项,如果有值,调用LoadLibrary() api加载用户dll。PS:xp系统会忽略LoadAppInit_DLLs
注册表项
严格来讲,此dll注入不是注入到所有运行进程,而是注入到加载User32.dll的进程中
|
|
检测及查杀
|
|
文件关联
文件关联就是指系统把指定扩展名的文件自动关联到相应的应用程序,例如 .doc
默认打开方式是 Microsoft Word,当用户双击.doc
文件时时就会启动 Word 打开该文件。
Windows的资源管理器识别文件类型是由扩展名决定的(而并不是文件头决定文件类型)。首先扩展名会对应一种文件类型,这种文件类型的不同操作再对应到不同的具体命令。
比如:
|
|
相关的注册表:
|
|
检测及查杀
|
|
映像劫持(IFEO)
映像劫持(Image File Execution Options)其实是Windows内设的用来调试程序的功能,但是现在却往往被病毒恶意利用。当用户双击对应的程序后,操作系统就会给外壳程序(例如”explorer.exe”)发布相应的指令,其中包含有执行程序的路径和文件名,然后由外壳程序来执行该程序。事实上在该过程中,Windows还会在注册表的上述路径中查询所有的映像劫持子键,如果存在和该程序名称完全相同的子键,就查询对应子健中包含的”dubugger”键值名,并用其指定的程序路径来代替原始的程序,之后执行的是遭到”劫持”的虚假程序。
简单点说就是:当你打开的是程序A,而运行的确是程序B。
注册表位置:
|
|
比如:
|
|
但是这样设置直接是可以看到的,根据文章隐蔽后门——Image File Execution Options新玩法了解到可以修改GlobalFlag的值,达到程序A静默退出结束后,会执行程序B的效果,且在注册表看不到具体值,同时Autorun检测不到。
|
|
检测及查杀
|
|
COM劫持
COM(组件对象模型)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。为开发人员提供一个允许开发人员控制和操纵其他应用程序的对象的接口,每个COM对象都由一个名为CLSID的唯一ID定义,大多数COM类都在操作系统中注册,并由表示注册表中的类标识符(CLSID)的GUID标识,也就是说CLSID就是对象的身份证号,而当一个应用程序想要调用某个对象时,也是通过CLSID来寻找对象的。
|
|
比如:
|
|
使用ProcessMonitor可以看到应用程序的寻找过程:
|
|
当进程寻找COM组件时,首先会寻找: HKCU\Software\Classes\CLSID
,所以直接在CLSID下新建一个对象ID,就能够劫持某个进程或多个进程。
与DLL劫持原理相近,但是COM组件的劫持目标不一定是一个进程,也可以是一个Windows API,劫持所需的文件不一定是一个DLL,它可以是一个.com
文件、二进制PE文件、DLL文件。
MSF中自带了利用COM劫持的模块:exploit/windows/local/bypassuac_comhijack
,该模块同时直接可以绕过UAC,具体原理参考:COM Hijacking
CLR
CLR全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。无需管理员权限的后门,并能够劫持所有.Net程序。
|
|
要使CLR能够劫持系统中全部.net程序,需要设置环境变量,可以图形化界面操作,也可以使用WMI(通过WMI修改环境变量需要系统重启或注销重新登录才能生效)。
x86系统
|
|
x64系统
|
|
POC: https://github.com/3gstudent/CLR-Injection
检测及查杀
|
|
CAccPropServicesClass&MMDeviceEnumerato
通过CLR劫持所有.Net
程序的方法,无需管理员权限,可用作后门。但是通过WMI添加环境变量需要重启系统。 CAccPropServicesClass和MMDeviceEnumerato后门原理与之类似,但是不需要重启系统,同样也不需要管理员权限,同时可以绕过Autoruns对启动项的检测。
x86系统
|
|
x64系统
|
|
POC:https://github.com/3gstudent/COM-Object-hijacking
检测及查杀
|
|
MruPidlList
不同于上面两种COM劫持后门,前两种是被动触发的后门,MruPidlList是主动触发的后门
|
|
因为注册表对应COM对象MruPidlList,作用于shell32.dll,shell32.dll用于打开网页和文件,所以当系统启动时必定会执行,于是后门也就会主动启动,相当于一个主动后门。
直观的理解:系统在启动时默认启动进程explorer.exe,explorer.exe会调用shell32.dll,加载COM对象MruPidlList
此类型的后门多次被恶意软件使用:comRAT,ZeroAccess rootkit,bbsrat
检测和查杀
|
|
系统软件
wmi
WMI(Windows Management Instrumentation)即 Windows 管理规范,由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统。
WMI相关知识参考翻译:
- WMI 的攻击,防御与取证分析技术之攻击篇
- WMI 的攻击,防御与取证分析技术之防御篇
- WMI 的攻击,防御与取证分析技术之取证分析篇
Drops: 三好学生:
- WMI Attacks: http://drops.xmd5.com/static/drops/tips-8189.html
- WMI Backdoor: http://drops.xmd5.com/static/drops/tips-8260.html
- WMI Defense: http://drops.xmd5.com/static/drops/tips-8290.html
- 不在Client和Server留下任何文件,实际位于硬盘上的一个复杂的数据库中(objects.data)
- 不改动注册表
- 仅使用powershell实现
存储payload
|
|
隐蔽定时启动程序
|
|
Example:
通常是通过powershell进行调用,配合schtasks进行定时启动,绕过杀软,也可以执行JavaScript脚本。
|
|
通过远程下载js脚本,进行命令调用。
优点:无文件落地
缺点:目前杀软对powershell这类监管较严格,容易被发现
检测及查杀
|
|
Waitfor.exe
Waitfor是用来接收或发送来自同一域内主机的信号。位于System32文件夹下,以命令行方式启动。
思路1:有文件
|
|
思路2:无文件
将powershell payload命令通过编码保存在WMI类中,进行存储、读取、使用payload(需要管理员权限)
|
|
POC:https://github.com/3gstudent/Waitfor-Persistence
检测及查杀
|
|
bitsadmin
bitsadmin.exe是windows自带的可用于创建下载或上载作业并监视其进度,bistadmin可以指定下载成功之后要进行什么命令。可绕过autorun、常见杀软检测。
|
|
检测及查杀
|
|
msdtc
MSDTC,是微软分布式传输协调程序,Windows系统默认启动该服务。当计算机加入域中,MSDTC服务启动时,会搜索注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
分别加载3个DLL:oci.dll
,SQLLib80.dll
,xa80.dll
然而Windows系统默认并不包含oci.dll
所以可以将payload.dll重名为oci.dll并保存在%windir%\system32\下
域中的计算机启动服务MSDTC时就会加载该dll,实现代码执行。
利用MSDTC服务加载dll,实现自启动,并绕过Autoruns对启动项的检测。
检测及查杀
|
|
Netsh
netsh是windows系统本身提供的功能强大的网络配置命令行工具
|
|
helper dll添加成功后,每次调用netsh,均会加载c:\test\netshtest.dll
检测及查杀
|
|
DoubleAgent
该方式主要是对微软系统自带的Application Verifier(应用程序检验器)进行利用
利用过程如下:
- 编写自定义Verifier provider DLL
- 通过Application Verifier进行安装
- 注入到目标进程执行payload
- 每当目标进程启动,均会执行payload,相当于一个自启动的方式
|
|
POC : https://github.com/Cybellum/DoubleAgent
检测及查杀
|
|
Office
利用劫持系统的DLL,执行相关命令,同时可绕过Autoruns的后门检测。主要有两种方法:
- 劫持office特定功能
- 利用Office加载项
劫持Office软件的特定功能
通过DLL劫持,在Office软件执行特定功能时触发后门
- 劫持Word-审阅-视图【管理员权限】:位于
C:\Program Files\Common Files\microsoft shared\RRLoc14\LOCALSVC.DLL
- 劫持word-插入-图片【TrustedInstaller权限】:位于
C:\Program Files\Common Files\microsoft shared\ink\tiptsf.dll
- 劫持word-文件-页面布局-主题-浏览主题【管理员权限】:位于
C:\Program Files\Microsoft Office\Office14\2052\GrooveIntlResource.dll
- 劫持Excel-插入-图片【管理员权限】:位于
C:\Program Files\Common Files\microsoft shared\OFFICE14\MSPTLS.DLL
利用Office加载项
- Word WLL
- Excel XLL
- Excel VBA add-ins
- PowerPoint VBA add-ins
以word为例:
|
|
其他POC:https://github.com/3gstudent/Office-Persistence
检测及查杀
|
|
shift后门
通过远程桌面连接到Windows后,在没有输入用户名和密码前,连接按5次Shift
键,可以调用c:\windows\system32\sethc.exe
,所以需要把c:\windows\system32\sethc.exe
替换成其他的执行程序即可执行该程序。
|
|
在windows xp过后,sethc组件属于完全受信用的用户TrustInstall,我们无法修改名字,这时候即使administrators都只有名义上的只读和可执行权,我们可以手动修改其所属为administrators。
也可以使用命令,比如:使用MSSQL的xp_cmdshell
|
|
检测及查杀
|
|
RDP会话劫持
RDP劫持简单的说就是在不知道另一账户密码的情况下直接切换到该用户会话下。
|
|
无凭据时的会话劫持技巧是Benjamin Delpy(Mimikatz作者)在2011年提到的,所以Mimikatz模块也集成了此项功能
|
|
检测及查杀
|
|
other
.NET后渗透下的权限维持:https://github.com/Ivan1ee/NetDLLSpy
密码记录:WinlogonHack、Gina
利用服务:sc create [ServerName] binPath= BinaryPathName
快捷方式后门: https://github.com/Ridter/Pentest/blob/master/powershell/MyShell/Backdoor/LNK_backdoor.ps1
。。。
感谢大佬们分享的文章,还有很多要学习的。
参考文章:
https://www.bodkin.ren/index.php/archives/431/
https://www.anquanke.com/post/id/171891
http://vinc.top/2015/09/15/metasploit-web-delivery/
https://kionf.com/2018/09/13/metasploit-presistence/
https://www.jianshu.com/p/0cfcbba813ac
https://blog.csdn.net/gaojinshan/article/details/8480185
https://payloads.online/archivers/2018-10-14/1
https://www.anquanke.com/post/id/151425
https://3gstudent.github.io/3gstudent.github.io/Use-CLR-to-maintain-persistence/
https://3gstudent.github.io/Use-COM-Object-hijacking-to-maintain-persistence-Hijack-explorer.exe/
https://github.com/Ridter/Intranet_Penetration_Tips/blob/master/README.MD
https://www.4hou.com/system/5171.html
https://www.secpulse.com/archives/52053.html
https://www.secpulse.com/archives/39555.html
http://drops.xmd5.com/static/drops/tips-10346.html
http://drops.xmd5.com/static/drops/tips-8189.html
http://drops.xmd5.com/static/drops/tips-8290.html
http://drops.xmd5.com/static/drops/tips-8260.html
https://github.com/3gstudent/Office-Persistence
https://www.jianshu.com/p/4c1af7889e87
https://www.secpulse.com/archives/55476.html
https://www.freebuf.com/articles/web/180581.html
https://3gstudent.github.io/3gstudent.github.io/Use-msdtc-to-maintain-persistence/