网站首页 > 技术教程 正文
漏洞介绍
2023年8月23号,group-ib[1] 公开了 WinRAR 中存在的 0day 漏洞 CVE-2023-38831,其被在野利用于攻击交易员。
该漏洞触发需要用户打开 zip 压缩包并点击其中的诱饵文件,可被用于钓鱼攻击。
影响版本为 winrar < 6.23
分析
漏洞触发过程主要分成两个环节: 1. 点击诱饵文件时额外的文件被释放 2. 点击文件后程序执行了额外释放的文件而非用户点击文件
文件释放 bug
zip 文件中包含三种数据结构:ZIPFILERECORD, ZIPDIRENTRY, ZIPENDLOCATOR,这里主要关心 ZIPDIRENTRY,其用于描述压缩包内目录的结构,每个文件/目录都对应一个这样的数据结构
用户在 winrar 窗口点击某个文件后,winrar 会遍历压缩包中的 direntry,依次比较direntry->filename 和点击文件名(click_name),匹配成功的 direntry 对应的文件后续会解压到临时目录下,比较函数为 0047F790,匹配成功该函数返回1,失败则返回0
比较成立的条件为 entry_name 等于 click_name,或者 entry_name 等于 click_name 加上路径分隔符。
比较逻辑用伪代码表示为:
extract_list = []
def compare_click_and_entry(entry_name, click_name):
click_name_len = len(click_name)
if entry_name[:click_name_len] == click_name and \
entry_name[click_name_len] in ("\\", "/", "\x00"):
return 1
return 0
for direntry in zip.direntry_list:
if compare_click_and_entry(direntry.name, click_name):
extract_list.append(direntry.name)
在poc样本中[1] ,诱饵文件对应的是 dirEntry[2], 点击诱饵文件后 click_name = "CLASSIFIED_DOCUMENTS.pdf "
三个等待比较的 entry_name 为: - "CLASSIFIED_DOCUMENTS.pdf /" - "CLASSIFIED_DOCUMENTS.pdf " - "CLASSIFIED_DOCUMENTS.pdf /CLASSIFIED_DOCUMENTS.pdf .cmd"
三个 entry_name 比较结果都为 1,两个文件将会被释放到临时目录下,第一个 bug 出现了,虽然用户点击了一个文件,但是 winrar 额外释放了一个 .cmd 文件。
这个 bug 和 entry_name 中的空格、子文件的名字无关,只要 click_name 和 entry_name 成功匹配,entry对应的文件就会被释放,下面进行验证。
构造如下的文件夹:
压缩成 zip 后包含7个 dirEntry 结构:
在二进制编辑器中修改 dirEntry[1] 的 filename,由Cir 改成 Dir
保存后打开该压缩包,可以看到同名的文件夹和文件夹
此时文件中的7个 entry_name 如下: - Bir - Dir - Dir/ - Dir/a1.txt - Dir/a2.txt - Eir - Eir/e1.txt
如果点击文件 Dir,匹配的 entry_name 如下,对应的文件会被释放
- Dir
- Dir/
- Dir/a1.txt
- Dir/a2.txt
双击winrar中的文件Dir(右击查看文件也可以),可以看到临时目录下有三个文件被释放,和分析结果一致。
反常的执行逻辑
poc样本具有如下结构:
根据上一节的分析,在 winrar 中双击样本的 dirEntry[2]("CLASSIFIED_DOCUMENTS.pdf "),winrar 会在临时目录下释放两个文件:
- CLASSIFIED_DOCUMENTS.pdf
- CLASSIFIED_DOCUMENTS.pdf .cmd
随后 winrar 会调用函数 ShellExecuteExW 执行文件,传入的 shExecInfo.lpFile 为: "C:\\Users\\DELL\\AppData\\Local\\Temp\\Rar$DIa21552.1835\\CLASSIFIED_DOCUMENTS.pdf "
BOOL ShellExecuteExW(
[in, out] SHELLEXECUTEINFOW *pExecInfo
);
实际上 ShellExecuteExW 会运行临时目录下的 CLASSIFIED_DOCUMENTS.pdf .cmd 触发漏洞,整个过程可以描述为:用户在 winrar 中点击了一个文档文件,winrar 却执行了同名目录下的脚本而非文档文件本身。
ShellExecuteExW 函数为什么在路径末尾有空格的情况下执行了一个 .cmd 文件?
分析发现,ShellExecuteExW 函数会调用 shlwapi!PathFileExistsDefExtAndAttributesW 对路径进行处理
在 PathFileExistsDefExtAndAttributesW 函数中,当路径末尾有空格时 PathFindExtensionW 函数会返回NULL,之后会进入函数 sub_7FF741824B4 给路径添加上通配符.* 进行文件搜索,并对搜索到的文件进行后缀判断,第一个符合条件的文件名被用作后续执行,在前面的情况下,搜索到的就是文件"C:\\Users\\DELL\\AppData\\Local\\Temp\\Rar$DIa21552.1835\\CLASSIFIED_DOCUMENTS.pdf .cmd"
由于后缀判定按给定列表遍历,可以判断出 ShellExecuteExW 的后缀搜索的顺序依次为: - .pif - .com - .exe - .bat - .lnk - .cmd
也就是说如果在文件夹下放置多个这些后缀的文件,会按照优先级执行第一个。在构造样本时不一定要用 .cmd 后缀,上面的选项都能触发。
目前公布的在野样本、POC使用的都是类似如下的 direntry 组合触发漏洞: - a.pdf - a.pdf / - a.pdf /a.pdf .cmd
一些厂商也通过 direntry 中空格加斜杠这样的特征[3]来检测此类漏洞。
通过对函数 PathFindExtensionW 进行分析发现,只要路径中的最后一个 . 后面包含空格,该函数返回值就为空,ShellExecuteExW 就能进入搜索逻辑。
于是可以构造类似如下 direntry 组合的样本绕过常规检测 - top.secret pdf - top.secret pdf/ - top.secret pdf/top.secret pdf.bat
from https://paper.seebug.org/3036/
- 上一篇: 首款搭载十代处理器!“寒霜峡谷”终于来了
- 下一篇: 动辄五六千的X99主板看厌了?这款很亲民
猜你喜欢
- 2024-11-06 i5潜力超i7?Skylake平台超频对比实测
- 2024-11-06 电脑安装软件的时候,这一步一定不能少,很多人都忽略了
- 2024-11-06 多个黑客组织利用 WinRAR 漏洞(CVE-2023-38831)攻击敏感目标
- 2024-11-06 简单纯粹无广告的免费解压缩软件,Bandizip了解下
- 2024-11-06 python在windows下实现备份程序实例!这里用到winrar
- 2024-11-06 提取APP中的音频文件 提取app中的音频文件怎么弄
- 2024-11-06 怎么修改视频的md5值?只需要做好这几步就够了
- 2024-11-06 教你如何打开ISO文件 怎样打开iso文件
- 2024-11-06 Ghost Win10 专业版 X64 纯净版V2018.12
- 2024-11-06 Windows 11 自带文件压缩工具现在可让用户更改压缩级别、方法等
你 发表评论:
欢迎- 最近发表
-
- PPT中动作连贯的卡通人物,我集齐了100套
- 成都13岁女孩手绘逐帧动画走红 网友:这是天赋型选手
- Android主流UI开源库整理(android完整开源项目)
- 达芬奇更新啦!DaVinci Resolve Studio 20.0.1
- LM Studio-本地安装大模型 | OpenAI API 文字转语音本地运行程序分享
- lululemon律动快闪 多色系呈现夏季活力
- [AOA][分享]160503 智珉和偶吧玩起电影游戏 用一件衣服找回悸动
- Visual Studio 2022:一个功能全面且强大的IDE
- 纽约布什维克区艺术家工作室开放即将举行
- 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)