此文为漏洞复习CVE-2020-17103 时解决不懂的笔记,poc和分析参考来自
https://bugs.chromium.org/p/project-zero/issues/detail?id=2086&sort=-reported%20status%20id&q=vendor%3DMicrosoft&can=1

补丁对比

我还是更习惯要做的一件事情是看补丁

补丁下载:
https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2020-17103
https://www.catalog.update.microsoft.com 搜索对应KB

cldflt.sys补丁前:


cldflt.sys补丁后:


该补丁修补了漏洞函数HsmiOsOpenAppPolicyKey中ZwCreateKey的对象的Attributes参数问题:如果句柄来自用户模式,那么添加OBJ_FORCE_ACCESS_CHECK标志来强制进行访问控制检查。

探索

关于漏洞的触发模式可以参考
https://googleprojectzero.blogspot.com/2021/01/hunting-for-bugs-in-windows-mini-filter.html

如果对HsmiOsOpenAppPolicyKey交叉引用,则最后会回溯到CldiPortNotifyMessage
此函数是FltCreateCommunicationPort的参数,也是minifilter driver处理用户的回调函数

刚刚提到的参考文章中说到\CLDMSGPORT端口可以被用户访问,但是需要一个正确的上下文,FltCreateCommunicationPort的第5个参数CldiPortNotifyConnect定义了上下文的判断:定义一个大于八字节的缓冲区即可

由于https://bugs.chromium.org/p/project-zero/issues/detail?id=2086&sort=-reported%20status%20id&q=vendor%3DMicrosoft&can=1中说到此漏洞可以通过cldapi.dll中的导出函数触发,所以来看下cldapi.dll是怎么绑定端口\CLDMSGPORT 的

CfGetPlatformInfo


还原成代码

 INT Context[2] = { 0x63706C43,1 };HANDLE hPort;printf("%x",FilterConnectCommunicationPort(L"\\CLDMSGPORT", 0, &Context, 8u, 0i64, &hPort));

思考一个问题:既然可以在用户模式下绑定端口\CLDMSGPORT,漏洞挖掘者为何使用cldapi.dll中的导出函数进行通信而不直接FilterConnectCommunicationPort开始通信?

如果我们直接在system32中搜索包含CLDMSGPORT的文件 我们可以刚好得到这两个文件

那么唯一的可能是cldapi.dll和cldflt.sys本身就是一对,既然给你写好导出函数通信,何必那么麻烦自己调用FilterConnectCommunicationPort设计inpbuf绕CldiPortNotifyMessage中的各种判断呢

不妨再大胆猜想一下挖掘该漏洞的心路历程,首先先发现\CLDMSGPORT可以被普通用户通信,再审计cldflt.sys中唯一的 ZwCreateKey,发现ZwCreateKey的ObjectAttributes.Attributes没有加上OBJ_FORCE_ACCESS_CHECK并且HsmiOsOpenAppPolicyKey函数调用链正处于用户回调函数中,然后开始尝试触发漏洞的代码路径,将断点下再HsmiOsOpenAppPolicyKey并将将cldapi.dll中所有的导出函数进行调用,导出函数中的CfAbortOperation中满足触发漏洞路径的条件。

当然,以上全靠瞎猜的。

回过头来继续,poc中使用了CfAbortOperation来触发漏洞,函数调用链如下

HsmOsBlockPlaceholderAccess调用HsmiOsOpenAppPolicyKey会将参数3和参数4设置为固定的1,参数一为固定的"BlockedApps"

HsmiOsOpenAppPolicyKey执行时首先会RtlOpenCurrentUser(0x20019u, &KeyHandle);打开当前用户配置代表的key ,然后再配置目录下创建SOFTWARE\Policies\Microsoft\CloudFiles,接着创建在CloudFiles下创建\BlockedApps

注:访问权限的后两位代表文件请求的对特定对象的访问权限

注册表对应的高级权利


既然提到了注册表,那么就不得不再提一下文件相对应的高级权限
https://docs.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants

适用于所有对象的标准访问权限

RtlOpenCurrentUser是打开HKCU,可惜HKCU下的问题并不算安全问题,但是如果当RtlOpenCurrentUser调用时线程令牌是匿名令牌(Guests ),那么则会尝试打开默认系统用户的注册表配置key

又因为线程令牌是匿名令牌调用RtlOpenCurrentUser时会返回拒绝访问

为了满足触发漏洞的条件,漏洞挖掘者使用了线程竞争的方法,当RtlOpenCurrentUser调用时,线程模拟为匿名令牌,满足路径为.DEFAULT,当RtlOpenCurrentUser进行访问权限判断时,此时线程如果恰好退出模拟,则返回成功。

关于漏洞利用:

由于创建key时申请的访问权限包含了了WRITE_DAC,即使HKEY_USERS.DEFAULT\Software\Policies\Microsoft\CloudFiles默认继承的安全时user只有读取权限,但是当前进程拿到了一个具有WRITE_DAC的句柄,所以可以对该项添加KEY_CREATE_LINK的权限,接着便可以删除BlockedApps项后创建注册表符号链接BlockedApps链接到HKU.DEFAULT\demo

Minifilter Eop漏洞 CVE-2020-17103复现相关推荐

  1. 什么是cve什么是cwe_什么是CVE 2020 0601又名Curveball,为何如此危险

    什么是cve什么是cwe Monday the 13th of January Brian Krebs published on his blog that he had sources tellin ...

  2. [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及防御详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  3. NetLogon特权提升漏洞(CVE-2020-1472)复现及问题解决

    NetLogon特权提升漏洞(CVE-2020-1472)复现 漏洞描述 2020年08月12日,Windows官方 发布了 NetLogon 特权提升漏洞 的风险通告,该漏洞编号为 CVE-2020 ...

  4. 【vulhub】Atlassian Confluence 路径穿越与命令执行漏洞(CVE-2019-3396)复现与反思!

    特征 1.8090端口 2.confluence图标(如图所示) 搭建环境 搭建confluence看这4篇教程,该cve搭建是用Confluence Server, 但是tm就是没有Confluen ...

  5. SSH协议弱加密算法漏洞的利用及复现(中间人攻击)

    SSH协议弱加密算法漏洞的利用及复现(中间人攻击) SSH协议弱加密算法漏洞的利用及复现(中间人攻击) 很多服务器或者交换机是存在SSH协议弱加密算法漏洞的,但是该漏洞如何利用呢?最近研究了下此漏洞的 ...

  6. 〖EXP〗Ladon打印机漏洞提权CVE-2021-1675复现

    基本情况 6月9日,微软发布6月安全更新补丁,修复了50个安全漏洞,其中包括一个Windows Print Spooler权限提升漏洞,漏洞CVE编号:CVE-2021-1675.未经身份验证的远程攻 ...

  7. php x24 x65 x6d x61,Jboss远程代码执行漏洞CVE:2013-4810获得system权限

    此方法成功的渗透至Windows系统并获得最高权限exp 此方法成功的渗透至Windows系统并获得最高权限 exp ?php/*Apache Tomcat/JBoss EJBInvokerServl ...

  8. wordpress 4.6任意命令执行漏洞(PwnScriptum)复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是wordpress 4.6任意命令执行漏洞(PwnScriptum)复现. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为 ...

  9. [“第五空间“智能安全大赛 2020] misc 复现

    ["第五空间"智能安全大赛 2020] misc 复现 loop run philosopher loop 010打开文件发现是zip文件,解压出现tarfile,继续使用tar ...

最新文章

  1. PHP __autoload函数(自动载入类文件)的使用方法
  2. PostGIS之路——线性参考
  3. 前端异步请求数据未获取导致报错解决办法
  4. 共轭梯度法求解线性方程组
  5. [Jarvis OJ - PWN]——Tell Me Something
  6. mysql用户数据导入_mysql创建数据库、用户及导入数据_mysql数据库教程
  7. 逻辑回归预测事件发生的概率_通过逻辑回归,对信用卡申请数据使用卡方分箱法预测违约率建模...
  8. 框架源码专题:Spring的事件监听、发布机制 ApplicationListener
  9. 更换map的遍历顺序优先级_树的级别顺序遍历或宽度优先遍历
  10. 【15】一切都是对象
  11. ios中input输入无效
  12. c语言中x的n次方怎么表示_为什么一定要慎用C语言标准库中的pow函数,你知道吗?...
  13. php中用户自定义排序
  14. python实现文字转语音播报
  15. 聚类分析用matlab还是spass,利用Matlab和SPSS软件实现聚类分析
  16. 语法冠词,虚拟语气,形容词排序
  17. 腾讯云轻量应用服务器怎么用?配置搭建网站教程
  18. matlab打开excel乱码,ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法
  19. linux du命令 前多少个,Linux du命令查看文件夹大小并按降序排列
  20. 段码液晶屏笔段电压范围_LCD段码(笔段)液晶显示屏和点阵液晶显示屏

热门文章

  1. 100个让ChatGPT更听话的技巧之:提出更具体的问题
  2. android apps,我手机在用的Android Apps
  3. 用html做网站古诗春思,《春思》-五言古诗
  4. 用计算机打青春不打烊,青春不打烊作文800字
  5. python做的简单gui计算器_Python计算器–使用Tkinter创建一个简单的GUI计算器
  6. 什么是协议 什么是SOCKE以及TSOCKET底层原理 什么是TCP/IP 什么是TCP协议 什么是UDP协议 TCP报文包括哪些字段 每个字段分别有哪些作用
  7. CAD插件技术真心不难,无非是画点线条,CAD内部能实现的,C#调用acdbmgd.dll和acmgd.dll也能实现
  8. 连马云都自愧不如 真正的草根创业者
  9. 《算法零基础100讲》(第3讲) 矩阵
  10. JavaScript DOM编程(如何获取HTML标签的父元素和子元素)