欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

BlueKeep漏洞利用分析

来源:本站整理 作者:佚名 时间:2019-09-20 TAG: 我要投稿

0x00 信道的创建、连接与释放
通道的数据包定义在MCS Connect Inittial PDU with GCC Conference Create Request中,在rdp连接过程如下图所示:

信道创建数据包格式如下:

在MCS Connect Inittial中属于Client Network Data数据段,MS_T120将会在连接一开始的时候通过函数termdd!_IcaRegisterVcBin创建一个虚拟通道id是0x1f大小为0x18的结构体,之后就调用termdd!IcaCreateChannel开始创建大小为0x8c的信道结构体之后将会与虚拟通道id是0x1f绑定,也就是这个结构体将会被我们利用。

信道的定义字段主要是名字加上配置,配置主要包括了优先级等。

在server对MCS Connect Inittial应答包,将会依次给出对应虚拟通道的id值:

在rdp内核中依次注册的值对应应该是0、1、2、3, MS_T120信道将会通过我们发送的用户虚拟id为3的值再一次绑定,首先通过termdd!_IcaFindVcBind找到了刚开始注册的虚拟通道id是0x1f,如下所示:

但是在termdd!_IcaBindChannel时,却将我们自定义的id值为3与信道结构体再一次绑定在一起了,此信道结构体就是MS_T120。

同时我们自己的用户id将内部绑定的0x1f给覆盖了。

我们往信道MS_T120发送数据主动释放其分配的结构体,其传入虚拟通道id值为3通过函数termdd!IcaFindChannel在channeltable中查找返回对应的信道结构体:

下图为返回的MS_T120信道结构体,其中0xf77b4300为此信道可调用的函数指针数组:

在这个函数指针数组中主要存放了三个函数,其中对应了termdd!IcaCloseChannel、termdd!IcaReadChannel、termdd!IcaWriteChannel

我们传入释放MS_T120信道的数据如下,字节大小为0x12,主要数据对应了0x02。

之后将会进入nt! IofCompleteRequest函数,通过apc注入后,将会通过nt! IopCompleteRequest和nt!IopAbortRequest进行数据请求的响应,最终在termdd!IcaDispatch完成我们发送数据的的请求,_BYTE v2就是我们发送的数据,所以我们发送的数据0x02将会最终调用到IcaClose函数进入IcaCloseChannel函数,最后主动释放掉了MS_T120信道结构体。


0x01 通过RDPDR信道进行数据占位
我们先来了解下rdpdr信道,首先rdpdr信道是文件系统虚拟通道扩展,该扩展在名为rdpdr的静态虚拟通道上运行。目的是将访问从服务器重定向到客户端文件系统,其数据头部将会主要是两种标识和PacketId字段组成:

在这里我们刚好利用到了rdpde客户端name响应的数据来进行池内存的占位。

在完全建立连接后,将会创建rdpdr信道的结构体。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载