注入技术系列:一个批量验证DLL劫持的工具

原文转载自 「汉客儿」 ( https://anhkgg.github.io/inject-dllhijack-tool/ ) By Anhkgg

预计阅读时间 0 分钟(共 0 个字, 0 张图片, 0 个链接)

作者:anhkgg
日期:2019年11月3日

很多时候,可能会对某个软件进行DLL劫持。

而这个软件是否存在DLL劫持漏洞,需要去分析验证。

比如通过IDA查看导入的DLL,或者LoadLibrary的DLL,然后慢慢排除某些KnownDlls,排除某些绝对路径加载的DLL…

或者通过Windbg分析。

虽然技术难度不高,但是挺费事的。

本篇文章分享我找DLL劫持的方法,不一定是最佳,不过很方便。

1

首先,通过windbg启动软件,设置(默认开启的):

1
Debug->Event Filters->Load module,勾选Output

然后go运行。这样我们可以看到运行后,软件导入表导入的DLL,以及LoadLibrary加载的DLL的所有文件,如下所示:

1
2
3
4
ModLoad: 75090000 750cb000   C:\Windows\system32\rsaenh.dll
ModLoad: 757c0000 757cc000 C:\Windows\system32\CRYPTBASE.dll
ModLoad: 778b0000 778da000 C:\Windows\system32\imagehlp.dll
ModLoad: 77860000 778a5000 C:\Windows\system32\WLDAP32.dll

2

写一个测试的DLL,只用下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
char path[MAX_PATH] = { 0 };
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
OutputDebugStringA(path);
OutputDebugStringA("success!");
MessageBoxA(NULL, "success!", "Tips", MB_OK);
ExitProcess(0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

然后讲DLL改名成劫持目标DLL,放到软件目录下,运行验证即可。

如果出现提示success则表示该目标DLL劫持成功。

3

如果DLL太多了,一一验证排除肯定很麻烦,所以程序员又要写代码了。

写一个自动批量验证的工具,基本思路如下:

img

工具界面如上,一键验证所有DLL,分分钟拿到结果。

工具会分享到https://github.com/anhkgg/anhkgg-tools下,欢迎使用,如有bug,请联系我。

交流群:753894145

转载请注明出处:https://anhkgg.github.io/inject-dllhijack-tool

欢迎关注技术公众号:汉客儿
img

more_vert