CVE-2020-1362漏洞分析:WalletService处理CustomProperty对象的过程中越界读写,可导致攻击者获得管理员权限。
摘要: WalletService服务是Windows上的一种服务,用于保存钱包客户端使用的对象,并且仅存在于Windows 10中。 CVE-2020-1362是WalletService
WalletService服务是Windows上的一种服务,用于保存钱包客户端使用的对象,并且仅存在于Windows 10中。
CVE-2020-1362是WalletService处理CustomProperty对象时发生的越界读取和写入。此漏洞可能导致攻击者获得管理员权限,该漏洞被评为高风险。
Microsoft在2020年7月更新中发布该漏洞的补丁程序。
环境设定
1.复制环境:Windows 10专业版1909(内部版本18363.815)。
2.将WalletService服务启动类型设置为自动。
3.调试环境:windbg -psn WalletService。
漏洞原理与分析
漏洞是CustomProperty对象的Group的get方法和set方法不检查边界。
1. get方法的a2参数不检查边界,可能泄漏堆上的某些地址。
2. set方法的a2参数没有检查边界,可以覆盖到对象的虚拟表指针,从而控制程序流程。
漏洞利用过程
创建CustomProperty对象
WalletService服务由WalletService.dll提供。WalletService.dll实际上是动态链接库形式的Com组件,由svchost.exe加载。我们可以在自己的程序(以下称为客户端)中使用CoCreateInstance()或CoGetClassObject()之类的函数来创建对象,并通过调用获取的对象的类方法来使用服务提供的功能。
如何创建与脆弱功能相对应的对象?最简单的方法是下载msdn的符号表并查看函数名称。
我们要创建一个CustomProperty对象,ida 搜索一下,发现有两个用于创建此对象的函数:Wallet :: WalletItem :: CreateCustomProperty()和Wallet :: WalletXItem :: CreateCustomProperty()。
因此,我们需要WalletXItem对象或WalletItem对象来创建CustomProperty,那么我们应该使用哪一个呢? 继续使用ida搜索CreateWalletItem或CreateWalletXItem,您将仅找到CreateWalletItem。
因此,在这里我们需要一个WalletX对象。如果继续使用ida搜索,则会发现找不到CreateWalletX,但是如果搜索WalletX,则会找到WalletXFactory :: CreateInstance()。如果具有Com组件开发的经验,会知道这是个工厂类创建接口类的函数。上面提到的CoCreateInstance()函数将使WalletService调用此函数来创建传出接口类,并将其返回给客户端。
那么如何调用WalletXFactory :: CreateInstance()并创建一个WalletX对象呢?我们需要在客户端使用CoCreateInstance()。
HRESULT CoCreateInstance( REFCLSID rclsid, // CLSID,用于找到工厂类 LPUNKNOWN pUnkOuter, // 设置为 NULL 即可 DWORD dwClsContext, // 设置为 CLSCTX_LOCAL_SERVER,一个宏 REFIID riid, // IID, 提供给工程类,用于创建接口类实例 LPVOID *ppv // 接口类实例指针的地址 );
1.首先,我们需要WalletXFactory的CLSID,可以使用OLEViewDotNet工具进行查看。
2.其次,我们需要一个WalletX IID,可以使用ida直接查看WalletXFactory :: CreateInstance()函数。
使用WalletXFactory的CLSID和WalletX的IID,然后在客户端上调用CoCreateInstance(),WalletService将调用与CLSID对应的WalletXFactory工厂类的CreateInstance(),创建与IID对应的WalletX对象,然后将该对象返回给客户端。
然后根据上面的分析,使用WalletX :: CreateWalletItem()创建一个WalletItem对象,然后使用WalletItem :: CreateCustomProperty()创建一个CustomProperty对象。
伪造虚表,覆盖附表指针
由于相同的动态库在不同的进程中具有相同的负载基址,因此我们可以知道所有dll中函数的地址,因此可以在伪虚拟表中获取函数的地址。
那么在哪里放置虚拟表呢?直接的想法是将其放在桩上。
但是,如果继续分析,我们会发现CustomProperty类中有一个字符串对象,可以使用CustomProperty :: SetLabel()修改字符串类。因此,我们可以在字符串类中修改beg指针和end指针,然后调用CustomProperty :: SetLabel()可以写入任何地址。
有了任意地址写入,我们选择将虚表放在WalletService.dll的.data节中,避免将其放在堆上导致程序崩溃。
控制程序流到LoadLibrary函数
使用伪造vtable和覆盖虚拟表指针的方法,我们可以通过调用虚拟函数来控制WalletService到任何地址的程序流程。
那么如何提权呢?在Windows服务提权中,通常的方法是控制程序流,以便可以执行诸如LoadLibrary()之类的功能来加载由我们自己编写的动态链接库,因为在加载dll时,dll中的DllMain()将被执行。此方法是最强大和实用的。
在这里,我们使用漏洞提交者的方法通过dxgi.dll中的ATL :: CComObject \ ::`vector删除destructor()覆盖虚拟表的地址,因为此函数调用的LoadLibraryExW()将使用全局变量作为要加载的dll的路径。
我们可以通过上面的SetLabel()进行任意地址写,修改上图中的全局变量Src以指向我们自己实现的动态链接库的路径,然后调用相应的虚拟表函数以使程序流执行到 LoadLibrarExW()。
实施动态链接库
在DllMain()中编写我们要以高权限执行代码,然后在虚拟表中调用相应的函数,这是WalletService的程序流程,可运行到LoadLibraryEx()。
请注意,由于Windows服务在后台运行,因此需要在DllMain()中使用命名管道或套接字进行回显或交互。其次,由于执行是LoadLibraryExW(),因此此处的dll路径应使用宽字符。
漏洞利用
可以获得管理员权限
补丁前后
修补后,get方法和set方法都向a2参数添加了边界检测。
相关热词搜索:CVE-2020-1362 漏洞分析 WalletService CustomProperty 越界读写 管理员权限
上一篇:CVE-2020-13699 TeamViewer漏洞:浏览特定网页时,无需密码黑客即可入侵计算机,悄悄地与计算机建立连接,并进一步利用该系统。
下一篇:Google Chrome浏览器CVE-2020-6519安全漏洞:攻击者利用漏洞绕过网络的内容安全策略(CSP),窃取用户数据并执行恶意代码。
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了