注入技術系列:一個批量驗證DLL劫持的工具

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

在這裏插入圖片描述

工具界面如上,一鍵驗證所有DLL,分分鐘拿到結果。

工具會分享到https://github.com/anhkgg/anhkgg-tools下,歡迎使用,如有bug,請聯繫我。

QQ交流羣:753894145

如果覺得內容還不錯,歡迎關注公衆號:漢客兒

發佈了45 篇原創文章 · 獲贊 17 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章