本篇文章给大家分享的是有关如何进行微软漏洞CVE-2017-11885分析与利用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
根据微软官网对CVE-2017-11885的描述,该漏洞几乎可以通杀微软的全版本操作系统,有关该漏洞的POC在exploit-db上于2018年5月份被披露,该POC仅仅针对windows server 2003进行了测试。
由于在相关描述中并没有获取到触发该漏洞的原因,因此在获取POC后,尝试对该漏洞进行复现并分析。
POC的关键代码如下:
作者已经对该POC做了较为详细的注释,从stub的布局以及注释来看,第41行的stub数据可能会被传入到CALL off_64389048[ECX*4]的ecx中,ecx如果是被控制的值,那么基本上可以直接在目标系统执行任意代码了。接下来搭建一个windows server2003系统,并尝试通过该POC触发漏洞。
该漏洞仅当操作系统开启了RRAS服务才会存在,在windows server2003中,通过管理工具->路由和远程访问进行配置,结果如下:
开启了RRAS服务后,在另一台主机执行POC,并抓包。发现使用了SMB协议进行数据传输,pcap包数据如下图:
随便打开一个包,发现是SMB协议并且通过445端口发送的数据,SMB协议后紧跟着DCERPC协议,对该协议的解释如下:
还是相对古老的协议,而微软的操作系统中的MSRPC协议是对DCERPC的一种实现,也算是第一代RPC协议。在这里简单介绍下RPC协议以及关键内容。
RPC 是指计算机 A 上的进程,调用另外一台计算机 B 上的进程,其中 A 上的调用进程被挂起,而 B 上的被调用进程开始执行,当值返回给 A 时,A 进程继续执行。A、B进程的交互过程如下图:
RPC应用程序的开发基于C/S模式,在windows环境下开发RPC所要实现的内容有:
1.IDL文件
2.ACF文件(可选)
3.客户端程序
4.服务端程序
IDL文件是接口描述文件,编写该文件所需的关键信息包含程序注册的uuid、函数调用接口以及参数的数据结构定义等。ACF文件可用来创建一些相对复杂的数据结构,这里不多关注。利用MIDL程序对IDL文件进行编译生成对应的客户端和服务端所需的头文件。客户端程序和服务端程序包含着关键调用函数的主体程序。其整个模式类似于我们通常的WINAPI调用,如我们调用ReadFile函数时,通常需要传递一部分参数,并得到一个返回值,在RPC编程中客户端程序负责参数的传递,服务端程序负责接收参数并执行相应的功能,随后将数据返回,整个过程对于开发人员是透明的,只不过是跨计算机的调用。RPC开发具体可参考微软的官方文档。
链接如下:https://docs.microsoft.com/en-us/windows/desktop/rpc/rpc-start-page
这里我们主要关注的内容包含RPC的协议传输方式、端点名称、以及具体的程序接口调用。该POC利用到了impacket这个库进行SMB以及rce协议的传输,POC中通过transport.DCERPCTransportFactory('ncacn_np:%s[\\pipe\\browser]' %的目标)进行远程命名管道的链接,其中使用到的rpc协议为ncacn_np,通用的rpc协议如下: