设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)(3)

发布时间:2021-01-04 22:39 所属栏目:52 来源:网络整理
导读:? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图7. TS_BITMAPCACHE_PERSISTENT_LIST结构作为SBC_HandlePersistentCacheList的第二个参数 如图4所示,bitmapCacheListPoolLen = 0xC *(总长度+4)和总长度= totalEntriesCache0 + t

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图7. TS_BITMAPCACHE_PERSISTENT_LIST结构作为SBC_HandlePersistentCacheList的第二个参数

如图4所示,bitmapCacheListPoolLen = 0xC *(总长度+4)和总长度= totalEntriesCache0 + totalEntriesCache1 + totalEntriesCache2 + totalEntriesCache3 + totalEntriesCache4。

基于此公式,我们可以设置“WORD值”totalEntriesCache X = 0xffff,使bitmapCacheListPoolLen为最大值。但是,对于图8中显示的每个totalEntriesCache X,都有一个totalEntriesCacheLimit检查.

totalEntriesCacheLimit X来自TS_BITMAPCACHE_CAPABILITYSET_REV2结构,该结构在通过RDPWD调用DCS_Init时在CAPAPI_LOAD_TS_BITMAPCACHE_CAPABILITYSET_REV2函数中启动,如图8所示。这将在解析确认PDU时组合在CAPAPI_COMBINE_TS_BITMAPCACHE_CAPABILITYSET_REV2函数中,如图9所示。

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图8. RDPWD!CAPAPI_LOAD_TS_BITMAPCACHE_CAPABILITYSET_REV2

?

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图9. RDPWD!CAPAPI_COMBINE_TS_BITMAPCACHE_CAPABILITYSET_REV2

CAPAPI_COMBINE_TS_BITMAPCACHE_CAPABILITYSET_REV2将服务器启动的NumCellCaches(0x03)和totalEntriesCacheLimit [0-4](0x258,0x258,0x10000,0x0,0x0)与客户端请求NumCellCaches(0x03)和totalEntriesCache [0-4](0x80000258,0x80000258,0x8000fffc,0x0)组合在一起,0x0),如图9中的edx和esi寄存器所示。

客户端可以控制NumCellCaches和totalEntriesCache [0-4],如图10所示,但它们不能通过服务器启动的NumCellCaches(0x03)和totalEntriesCacheLimit [0-4] ](0x258,0x0)如图11所示。

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图10. TS_BITMAPCACHE_CAPABILITYSET_REV2

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图11. CAPAPI_COMBINE_TS_BITMAPCACHE_CAPABILITYSET_REV2函数

有了这些信息,我们可以计算出最大bitmapCacheListPoolLen = 0xC *(0x10000 + 0x258 + 0x258 + 4)= 0xc3870,理论上可以控制内核池中的0x8 *(0x10000 + 0x258 + 0x258 + 4)= 0x825a0字节数据,如图所示在图12中。

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图12.持久密钥列表PDU内存转储

但是,观察到并非所有数据都可以由位图缓存列表池中的RDP客户端按预期被控制。每个8字节受控数据之间存在4字节不受控制的数据(索引值),这对于shellcode存放是不太友好的。此外,0xc3870大小的内核池不能多次分配,因为持久密钥列表PDU只能合法地发送一次。但是,仍然存在特定的统计特征,即内核池将在相同的内存地址处分配。此外,在位图缓存列表池分配之前总是有一个0x2b522c(在x86上)或0x2b5240(在x64上)内核大小的池,这对于堆分配非常有用,尤其是在x64上,如图13所示。

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

图13.持久密钥列表PDU统计特性

3.刷新Rect PDU

根据MS-RDPBCGR文档,刷新PDU会使RDP客户端请求服务器重新分配一个会话。该结构包括通用PDU头和图14中所示的refreshRectPduData(变量)。

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读