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!WinExec
和 kernel32!CreateProcess
, 然后g。
通过栈回溯发现,会在 sub_4115A7
处理漏洞。
给返回地址下写入断点可以发现使用了不安全的函数 strcpy
函数,使用 00截断可以控制复制长度
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