CVE-2017-11882分析

2021-04-15 11:10:14 浏览数 (1)

CVE-2017-11882

该漏洞是由EQNEDT32.EXE公式编辑器引起的,无法正确处理内存中的OLE对象。通杀。

环境

Windows 7 x86 sp1

office 2007 (单独安装world会失败)

漏洞复现

https://github.com/Ridter/CVE-2017-11882/

代码语言:javascript复制
python Command43b_CVE-2017-11882.py -c "cmd.exe /c calc.exe" -o test.doc

分析

首先我们定位漏洞,设置注册表使EQNEDT32.EXE启动时附加。

HKEY_LOCAL_MACHINESOFTWAREMICROSOFTWINDOWS NTCURRENTVERSIONIMAGE FILE EXECUTION OPTIONS

因为弹出计算器的时候创建了新的进程,所以我们可以认为新的进程是由WinExec或者CreatProcess创建的。下bp断点 kernel32!WinExeckernel32!CreateProcess , 然后g。

通过栈回溯发现,会在 sub_4115A7 处理漏洞。

给返回地址下写入断点可以发现使用了不安全的函数 strcpy 函数,使用 00截断可以控制复制长度

代码语言:javascript复制
0:000> r eax
eax=0012f350
0:000> db eax
0012f350  b8 44 eb 71 12 ba 78 56-34 12 31 d0 8b 08 8b 09  .D.q..xV4.1.....
0012f360  8b 09 66 83 c1 3c 31 db-53 51 be 64 3e 72 12 31  ..f..<1.SQ.d>r.1
0012f370  d6 ff 16 53 66 83 ee 4c-ff 10 90 90 <14 21 40 00>  ...Sf..L.....!@.
0012f380  00 36 4e 03 84 36 4e 03-8d a7 90 76 58 bb 27 00  .6N..6N....vX.'.
0012f390  00 00 00 00 18 00 00 00-50 bb 27 00 00 00 22 00  ........P.'...".
0012f3a0  40 bc 27 00 fe ff ff ff-f0 f3 12 00 b6 30 4e 03  @.'..........0N.
0012f3b0  00 00 00 00 06 00 00 00-a4 f4 12 00 5a 5d db 77  ............Z].w
0012f3c0  10 bc 27 00 06 00 00 00-a4 f4 12 00 2a eb d8 77  ..'.........*..w

将doc文件拖进十六进制编辑器里查看发现,设置了OLE对象属性为objupdate 自动更新,这样无需交互,点击文档自动运行,这个对象的objclass 为 Equation.3,即公式编辑器3.0对象。

使用 rtfobj.py 提取OLE对象。

将提取出来的文件拖进 offVis 查看,可以发现用来覆盖ret的值。

构造Poc

根据16进制编辑器与 rtfobj.py 的分析我们知道rtf文档嵌入的是ole的Equation,通过公开的文档我们知道了Equation相关结构:

OLE data = EQNOLEFILEHDR MTEF

其中 MTEF = MTEF header MTEF Byte Stream

需要注意是 MTEF Byte Stream 部分,开头为8表示 FONT record ,就是name字段在复制时没有判断长度导致溢出覆盖了ret。

参考

https://bbs.pediy.com/thread-247767.htm

https://paper.seebug.org/516/

https://bbs.ichunqiu.com/thread-30974-1-1.html

https://www.anquanke.com/post/id/87311

https://slab.qq.com/news/tech/1683.html

0 人点赞