V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anhkgg
V2EX  ›  程序员

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

  •  
  •   anhkgg ·
    anhkgg · 2019-11-04 11:05:10 +08:00 · 1309 次点击
    这是一个创建于 628 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者: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

    img

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

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

    QQ 交流群:543587298

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

    第 1 条附言  ·  2019-11-04 16:26:48 +08:00

    前个QQ群将废弃,请加:753894145

    locoz
        1
    locoz   2019-11-04 14:14:56 +08:00
    你好骚啊
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   875 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 20:55 · PVG 04:55 · LAX 13:55 · JFK 16:55
    ♥ Do have faith in what you're doing.