DLL 劫持
DLL 簡介
在 Windows 中,許多應用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即 DLL 文件,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時,相應的 DLL 文件就會被調用。一個應用程序可使用多個 DLL 文件,一個 DLL 文件也可能被不同的應用程序使用,這樣的 DLL 文件被稱為共享 DLL 文件。
DLL 加載順序
如果程序需要加載一個相對路徑的 dll 文件,它將從當前目錄下嘗試查找,如果找不到,則按照如下順序尋找:
windows xp sp2 之前
Windows 查找 DLL 的目錄以及對應的順序:
進程對應的應用程序所在目錄;
當前目錄(Current Directory);
系統(tǒng)目錄(通過 GetSystemDirectory 獲取);
16 位系統(tǒng)目錄;
Windows 目錄(通過 GetWindowsDirectory 獲取);
PATH 環(huán)境變量中的各個目錄;
windows xp sp2 之后
Windows 查找 DLL 的目錄以及對應的順序(SafeDllSearchMode 默認會被開啟):
默認注冊表為:HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其鍵值為 1
進程對應的應用程序所在目錄(可理解為程序安裝目錄比如 C:ProgramFilesuTorrent)
系統(tǒng)目錄(即 % windir% system32);
16 位系統(tǒng)目錄(即 % windir% system);
Windows 目錄(即 % windir%);
當前目錄(運行的某個文件所在目錄,比如 C:Documents and SettingsAdministratorDesktop est);
PATH 環(huán)境變量中的各個目錄;
windows 7 以上版本
從 Windows7 之后,微軟為了更進一步的防御系統(tǒng)的 DLL 被劫持,將一些容易被劫持的系統(tǒng) DLL 寫進了一個注冊表項中,該項下的 DLL 文件就會被禁止從 EXE 自身所在的目錄下調用,而只能從系統(tǒng)目錄 SYSTEM32 目錄下調用,其注冊表位置:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs
自動化挖掘
批量尋找劫持
https://github.com/wietze/windows-dll-hijacking
1 |
python generate_pmc_files.py |
單個查找劫持
https://github.com/knight0x07/ImpulsiveDLLHijack
編譯完成后,把 Prerequisites 文件夾里的內容拷貝至 ImpulsiveDLLHijack 項目里
PLAINTEXT
1 |
ImpulsiveDLLHijack.exe -path xxx.exe |
這里使用navicat進行測試,可見運行的時候會加載C:UsersdyyAppDataLocalProgramsPythonPython38Scriptsoci.dll
使用 cs 生成惡意 dll,重命名為oci.dll后放置到該目錄下
手動挖掘
Process Monitor 查找可用 dll,設置如下圖所示
配置完可以保存導出配置,下次直接導入使用
使用GoogleUpdate.exe進行測試,運行程序 filter 加載所使用的 dll 文件
這里可以看出來,當GoogleUpdate.exe程序運行的時候,會調用當前目錄下的goopdate.dll文件
編寫一個基礎的彈窗 dll
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include |
彈計算器
JAVA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// dllmain.cpp : 定義 DLL 應用程序的入口點。 #include "pch.h" #include |
CS 上線
cs 生成 c 的 payload
生成的payload填入到下面相應的位置上
CPP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// 頭文件 #include "pch.h" #include |
運行navicat程序就會上線
DLL 轉發(fā)劫持
有時候當我們替換 dll 后,雖然可以執(zhí)行命令,但是會產生報錯
這時候我們可以使用AheadLib工具,使惡意的 DLL 將原有的函數(shù)轉發(fā)到原 DLL 中并且釋放惡意代碼
打開工具導入 dll 文件,會生成相應的 cpp 文件
直接轉發(fā)函數(shù),我們只能控制 DllMain 即調用原 DLL 時觸發(fā)的行為可控
即時調用函數(shù),可以在處理加載 DLL 時,調用具體函數(shù)的時候行為可控,高度自定義觸發(fā)點,也稱用來 hook 某些函數(shù),獲取到參數(shù)值
-
dll
+關注
關注
0文章
116瀏覽量
45543 -
WINDOWS
+關注
關注
4文章
3569瀏覽量
89296 -
應用程序
+關注
關注
38文章
3292瀏覽量
57911
原文標題:DLL 劫持
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論