问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
VBA Stomping
漏洞分析
攻击者可以使用这种方法用良性代码或随机代码,隐藏恶意的源代码。通过VBA stomping,当你查看宏代码,以为没有恶意代码而启动宏的时候,就会运行攻击者恶意的源代码了
0x00 什么是VBA stomping? ===================== VBA stomping 是指破坏 Microsoft Office 文档中的 VBA 源代码,只在文档文件中留下称为 p-code 的宏代码的编译版本。攻击者可以通过良性代码或随机字节,覆盖VBA源代码位置,同时通过保留先前编译的恶意p-code,隐藏恶意VBA代码。 0x01 实现方式 ========= 实现VBA stomping有两种方式,一种是手动修改,一种是通过工具Evil Clippy。 手动修改 ---- - 测试所需环境 - Windows 10 - Office2016 - 解压缩软件 - 十六进制编辑器 ### 创建宏 新建Excel文件,创建宏,可以通过点击视图-->宏-->查看宏-->输入宏名,创建  也可以通过文件-->选项-->自定义功能区-->勾选开发工具--确定  然后点击开发工具-->Visual Basic创建宏  ### 编辑宏代码 这里我双击的Sheet1,然后编辑宏代码,实现弹窗显示ABC ```vb Sub test() MsgBox "ABC" End Sub ```  代码编辑完成后,然后保存,这个时候如果提示“无法在未启用宏的工作簿中保存以下功能”  点击否,会弹出另存文件的框,将保存类型选择为“Excel启用宏的工作簿”,点击保存即可  运行宏代码,测试下  ### VBA stomping 选中刚创建的Excel文件,右键选择压缩软件,将该文件解压缩  打开开解压缩后的文件夹,找到xl文件下的vbaProject.bin。 PS:这个vbaProject.bin是默认文件名,但是可以重命名。  将文件用十六进制编辑器打开,找到源代码。  将ABC改成XYZ并保存。**注意**:修改代码的时候,点击需修改的内容,比如A,然后输入新的内容就行,会自动覆盖掉ABC  然后选中我们的Excel文件,右键选择压缩软件,打开压缩包  进入xl文件夹,用修改后的vbaProject.bin将文件进行替换  替换完成后,打开Excel文件,显示“宏已被禁用,启动内容”,**注意**:这个时候先别点启用内容,先去看看宏代码  点击开发工具-->Visual Basic,可以看到原来的`MsgBox "ABC"`变成了`MsgBox "XYZ"`  这个时候我们再启用宏,运行宏代码,结果弹出来的是ABC  再打开宏代码进行查看,又变成了`MsgBox "ABC"`  ### 为什么会这样? 这是因为存储在文档中的 p-code就是实际执行的代码,只要它与系统上当前的 VBA 版本兼容。而宏编辑器在未启用内容前显示的是解压缩的VBA源代码,在启用内容后,显示的不是解压缩的 VBA 源代码,而是反编译的p-code。 有一个需要注意的点:**只能使用用于创建文档的相同 VBA 版本来执行 VBA Stomping 的恶意文档。** 因为在不同版本的 Word(使用不同的 VBA 版本)中打开文档, p-code将无法重用,所以会强制将 VBA 源代码解压缩并重新编译为p-code。可以理解为:你将原有的vbaProject.bin文件中的`MsgBox "ABC"`修改成`MsgBox "XYZ"`并替换后,此时你VBA的源代码是`MsgBox "XYZ"`,p-code是编译后的`MsgBox "ABC"`。但用不同版本的VBA打开,就会将VBA 源代码解压缩并重新编译为p-code,所以会将你VBA的源代码中`MsgBox "XYZ"`重新编译成p-code,那么你再启动宏,运行的是p-code,也就是重新编译后的`MsgBox "XYZ"`。 因此,攻击者生成恶意文档之前,会对目标进行侦察,来确定要使用的适当 Office 版本或通过生成具有多个 Office 版本的恶意文档并将它们喷洒到目标来解决此限制。 Evil Clippy ----------- ### 下载工具 下载链接: > [EvilClippy](https://github.com/outflanknl/EvilClippy) ### 生成可执行文件 下载后解压缩,使用VS打开该文件夹  使用VS打开文件夹后,选中并右键-->在终端中打开,打开开发者窗口  在开发者窗口中输入命令,生成可执行文件 ```powershell csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs ```  在窗口中输入`.\EvilClippy -h`,就可以查看参数信息  ### VBA stomping 创建一个xlsm文件(也就是上述提到的,启动宏的工作簿),写上宏代码`MsgBox "ABC"`;接着创建一个vba文件,写上宏代码`MsgBox "XYZ"`  在开发者窗口中使用工具EvilClippy.exe执行命令,将会生成VBA stomping后的1\_EvilClippy.xlsm文件 PS:以下命令根据自己的文件路径来,比如EvilClippy.exe在test文件夹的上级目录,所以我这里写成`..\EvilClippy` ```powershell . ..\EvilClippy -s abc.vba 1.xlsm ```  打开生成的1\_EvilClippy.xlsm文件,同样的先不要启用内容  查看宏代码,显示的是`MsgBox "XYZ"`  然后我们再运行宏看看,发现弹出的却是ABC  此时再查看宏代码,也变成了`MsgBox "ABC"`  0x02 总结 ======= 攻击者可以使用这种方法用良性代码或随机代码,隐藏恶意的源代码。通过VBA stomping,当你查看宏代码,发现没有恶意代码而启动宏的时候,就会运行攻击者恶意的源代码了。
发表于 2022-05-19 09:43:00
阅读 ( 7194 )
分类:
其他
3 推荐
收藏
0 条评论
请先
登录
后评论
鹿柴
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!