首页
社区
课程
招聘
[原创]CVE-2025-8088 WinRAR目录穿越漏洞简单分析
发表于: 2025-9-3 20:01 813

[原创]CVE-2025-8088 WinRAR目录穿越漏洞简单分析

2025-9-3 20:01
813

漏洞概述

7.12及以下版本的WinRAR软件存在目录穿越漏洞,在知道“用户文件夹名”或者其他信息的前提下,攻击者可以构造恶意压缩包,并诱导受害者解压,进而将恶意文件释放到任意位置(如开机启动目录,但需要满足权限要求),甚至获得目标的控制权限。2025年7月30日,WinRAR发布了针对该漏洞(编号CVE-2025-8088)的修复程序,版本为7.13。

环境构建

WinRAR程序

WinRAR 7.01
图片描述

PoC

3e8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6P5s2W2J5P5s2W2&6i4K6u0r3b7#2k6q4i4K6u0V1x3U0l9J5y4g2)9J5k6o6R3H3z5o6S2Q4x3X3c8i4K9h3&6d9b7g2u0Q4x3X3c8b7M7X3!0G2k6W2)9J5k6r3!0X3i4K6u0V1b7$3!0F1j5$3g2H3N6q4)9J5k6q4m8G2b7#2)9J5k6p5g2^5M7r3I4G2K9i4c8Q4x3X3b7`.
图片描述

操作系统版本

Windows 11

漏洞复现

执行如下命令构造恶意压缩包,当解压时,通过跨目录的方式在指定路径释放恶意文件payload.bat。

1
python poc.py --decoy resume.txt --payload payload.bat --drop "D:\test\a" --rar "C:\Program Files\WinRAR\rar.exe"

需要注意的是,这里指定的路径为D:\test\a,但实际上只能指定路径,不能指定盘符,即释放文件的目录可能是D:\test\a,也可能是E:\test\a,具体由解压的时候所在的盘符决定。
图片描述
图片描述
解压之后,一方面正常解压了cve-2025-8088-sxy-poc,另一方面,跨目录在指定的D:\test\a目录生成了payload.bat。
图片描述
在D:\test\a生成了payload.bat,由此验证了该版本的WinRAR在解压文件时确实存在目录穿越问题。
图片描述
还做些一些其他测试,就不放截图了,直接说结果。

释放文件的目录 标准用户权限操作 管理员权限操作
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 失败,权限不够 成功
C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 需要知道xxx具体值,特定条件下可绕过该限制(比如Download上级目录即为“用户文件夹”,控制相对路径即可,可以多试几次;同理,桌面上的文件解压也可以。)
...

漏洞分析

行为分析

在D盘目录下解压的cve-2025-8088-sxy-poc.rar,最终会把恶意文件释放到D:\test\a\payload.bat。于是,通过ProcMon进行行为分析时,可以把程序名设为WinRAR.exe,路径包含test字符,这样就可以观察到解压文件时的关键函数调用。
图片描述
图片描述
通过ProcMon可以知道,释放恶意文件的关键操作主要就CreateFile、WriteFile。

断点调试

1
使用x64dbg对WinRAR.exe进行附加调试,对CreateFileW下断点,很快就能找到写..\..\payload.bat的地方。文件名很有特点,形如“xxx:..\..\..\payload.bat”。

图片描述

代码复现

1
使用CreateFileW创建文件L"hello:..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\test\\a\\abc.txt",看看是否会生成D:\testa\abc.txt文件。

main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <windows.h>
#include <stdio.h>
 
int main() {
    HANDLE hFile;
    DWORD bytesWritten;
    //LPCWSTR filename = L"hello";
    LPCWSTR filename = L"hello:..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\test\\a\\abc.txt";
     
    // 创建文件
    hFile = CreateFileW(
        filename,               // 文件名
        GENERIC_WRITE,          // 访问模式:写入
        0,                      // 不共享
        NULL,                   // 安全属性:默认
        CREATE_ALWAYS,          // 创建方式:总是创建新文件
        FILE_ATTRIBUTE_NORMAL,  // 文件属性:普通
        NULL                    // 模板文件:无
    );
     
    // 检查文件是否成功创建
    if (hFile == INVALID_HANDLE_VALUE) {
        printf("无法创建文件! 错误代码: %d\n", GetLastError());
        return 1;
    }
     
    // 要写入的数据
    char data[] = "CVE-2025-8088 test!";
     
    // 写入文件
    if (!WriteFile(
        hFile,           // 文件句柄
        data,            // 要写入的数据
        sizeof(data) - 1,// 要写入的字节数(减1是为了去掉字符串结尾的null字符)
        &bytesWritten,   // 实际写入的字节数
        NULL             // 重叠I/O结构:不使用
    )) {
        printf("写入文件失败! 错误代码: %d\n", GetLastError());
        CloseHandle(hFile);
        return 1;
    }
     
    // 检查是否所有数据都已写入
    if (bytesWritten != sizeof(data) - 1) {
        printf("写入字节数不匹配!\n");
    } else {
        printf("成功写入 %d 字节到文件: %ls\n", bytesWritten, filename);
    }
     
    // 关闭文件句柄
    CloseHandle(hFile);
     
    return 0;
}

编译

1
gcc main.c -o demo.exe

效果

成功跨目录生成了文件abc.txt。

图片描述
尝试修改文件路径filename,并在D盘目录下执行demo.exe,具体测试结论如下表。
图片描述

分析结论

条件限制

1.需要确保目标路径存在,且有写权限

大概就是需要知道“用户文件夹名”(特定条件下可绕过),并且目标位置要有写权限。
对于习惯用Administrator登录的用户来说,危害比较大,可以通过写启动项直接拿权限。对于标准登录的大部分人来说,“用户文件夹名”是不同的,这给攻击者增加了难度,不过攻击者可以暴力猜测用户的解压目录(如下载或桌面),然后控制释放payload.bat的相对路径来达到写启动项的目的。

2.不能跨盘符写文件

行为特征

1
WinRAR进程调用CreateFileW函数时,如果其文件路径参数含有“:..\”特征,则很危险。

相关说明

备用数据流(Alternate Data Streams, ADS)

备用数据流(ADS)是NTFS文件系统的一项特性,它允许将隐藏的数据像“秘密附件”一样依附于主文件,而主文件的可见大小和内容却不发生改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
创建普通文件hello
echo 123 >hello
 
创建和hello关联的备用数据流
echo 123 >hello:abc.txt
 
查看备用数据流
dir /R
more <hello:abc.txt
 
使用powershell查看备用数据流:
Get-Item -Path hello -Stream *
Get-Content -Path hello -Stream 'abc.txt'

图片描述

图片描述

图片描述

WinRAR打包命令

图片描述

WinRAR参数 含义
a 添加文件到压缩包
-ep 在添加文件夹时,不包含文件夹本身的路径名。
-os 保存文件的NTFS备用数据流(ADS)。

解压报错样式

图片描述

可继续深究的内容

1
ADS的形式大体上是"abc:def"这个样子的,如何构造"abc:..\..\def"这样的路径,并完成打包,感觉还是有些技巧的。详细内容可以查看POC源码。

参考

ce5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6h3y4J5M7%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2M7#2)9J5c8U0R3I4z5o6V1J5
843K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6h3y4J5M7%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2M7#2)9J5c8U0R3J5x3U0b7#2
b5dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8W2b7^5d9h3I4c8j5W2S2$3c8h3S2I4N6q4S2o6b7i4c8Q4y4h3j5&6L8W2y4V1N6H3`.`.

(不保证文章完全正确,请辩证的看待)


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-9-4 16:37 被Jtian编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2500
活跃值: (5164)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
2

WinRAR本意应该是要打包ADS(文件的备用数据流,形如abc:def),然后攻击者把def换成了..\..\..\payload.bat,接着CreateFileW创建abc:..\..\..\payload.bat 的时候,就很奇怪的没有创建备用数据流,也没有报错,而是直接创建了文件payload.bat。

为什么CreateFileW会有这种奇葩的性质呢?可能是为了兼容性吧,历史包袱太重,考虑到太多,反而出纰漏了。

最后于 2025-9-4 17:02 被Jtian编辑 ,原因:
2025-9-4 17:00
0
游客
登录 | 注册 方可回帖
返回