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

2019-11-04 11:05:10 +08:00
 anhkgg

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

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

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

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

或者通过 Windbg 分析。

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

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

1

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

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

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

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,只用下面的代码:

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 太多了,一一验证排除肯定很麻烦,所以程序员又要写代码了。

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

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

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

QQ 交流群:543587298

如果觉得内容还不错,欢迎关注公众号:汉客儿

1834 次点击
所在节点    程序员
2 条回复
locoz
2019-11-04 14:14:56 +08:00
你好骚啊
yushiro
2023-04-04 13:11:44 +08:00
2 个 qq 群都搜不到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX