0%

CS的VBA免杀payload制作概论

 前两天这个科技就点出来了, 昨天忙着整活就没写文章, 这就补上.

生成原版vba payload

 CS自带了一个vba脚本生成器, 只要跟着提示把脚本粘到启用了宏的office文档里就可以了. 会再下次打开文档时自动触发

 选择一下listener

然后跟着提示走就完事

好了这就是如何制作一个vba payload, 下次再见.

 当然我是写不出来这么水的文章的, 单是微软为了防止这种自动启动的vba🐎就做了不少防护. 其中最麻烦的莫过于那个可恶的活动禁用. 这个是真的没办法绕过去, 除非我哪天发现了office 0day, 不然所有的vba脚本都要等到受害者亲手点下去那个启用符号才有可能被加载. 我们接下来的免杀过程均假设受害者已经被钓鱼邮件忽悠的启用了vba.

 但是就算受害者启用了vba, 火绒和360还会对你的🐎产生威胁. 如果直接照抄cs生成的代码粘进去基本上落地就没了. 火绒一杀一个准.

免杀思路I

 vba中有个Workbook_Open()函数, 会在打开文件或者启用vba的时候执行

同时vba可以通过Shell ("ORDER")来执行指令. 所以我们可以考虑通过这里来直接执行我之前的这篇文章里的payload.
 但是就我测试的结果来看, 只要我在vba里加入类似Shell "powershell -w hidden"这样的指令就直接会被当成🐎杀掉. 所以还得用那篇文章里的调节窗口大小绕过.
 可惜还没完, 虽然不会被直接当🐎杀掉, 但这还是早就在火绒的预料之中了

 而且用这种payload没法自动进程迁移, 只要打开的powershell被关了就自动下线了. 这种思路有时候有用, 但还不够实用, 我们还得找更高级的姿势来绕过.

免杀思路II

 这个姿势是我无意间发现的. 我们回顾一下之前免杀msf的shellcode时使用的思路, 无非是将shellcode在硬盘上加密, 后续运行的时候动态解开运行, 从而规避常规杀软的静态检测.
 那么我们有没有办法在vba里玩这一手呢? 有点困难, 因为杀软对vba的限制很死, 类似上面的-w hidden都是二话不说直接当🐎干掉的. 重写vba让它动态载入shellcode实在是有点难度. 而且载入后还会随着office的关闭而停止. 坠吼的办法是用一开始的自动生成的vba代码.
 那么我们有没有办法把生成的vba藏起来呢? 有的, 微软提供了文档保存时使用密码的选项. 只要简单的在保存的时候对文件加个密就能轻松混淆掉硬盘上的shellcode, 从而让你的🐎逃过一劫. 是的, 就是这么简单. 微软的加密做的比我的异或加密不知道高到哪里去了. 自然隐藏个小小的payload也不是难事.
 利用这种加密手段, payload会自动在内存新建一个进程, 哪怕是office被关了也能持续运行.

那么, 代价, 是什么呢?

 代价就是对你的鱼的要求更高了. 你要编造一个理由, 让你的鱼相信这份文件被加密也是合理的, 然后他还得碰巧知道文章的密码, 最后还得要理所当然的打开文章的启用vba的按钮. 无疑让钓鱼的难度大了不少.
 不过也是有一点优势的, 鱼的杀软会和死了一样, 从头到尾他的杀软都会认为这份文件相当安全, 可以显著的降低警惕性.

总结

 以上两种方法是我这两天研究cs后想整活的时候折腾出来的. 关于我整了什么活, 我会再水篇博客出来写出来不太好, 咕咕咕了.
 总之利用上面两种方法可以一定程度上规避杀软, 至少做到了不会落地被杀. 尤其是第二种思路, 之前测试的时候受害者所有要做的事情就是输入密码, 点击启用, 就在我这边的cs上上线了.
 大伙以后再收到加密的office文件, 务必记得掂量掂量再考虑打开.