freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

注入技术系列:一个批量验证DLL劫持的工具
2019-11-05 09:42:53
所属地 四川省

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

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

  • 把windbg拿到的dll列表保存下来

  • 准备好测试DLL,DLL中加入写log功能

  • 分析dll列表,一一把测试DLL拷贝为目标dll,启动软件

  • 然后把log提取出来,可以看到成功劫持的dll

1.png


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

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

QQ交流群:753894145

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

# 漏洞 # DLL劫持
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者