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