CobaltStrike特征隐藏

前言

最近有很多同学私信我,说咋渗透?没有一个完整渗透流程?工具不会用?

1.jpg

今天他来了,这次给同学们带来,cs特征隐藏,

cs的基础用法,网上也有一大堆,先知社区也有很多大佬写得很详细了,我这里就不在讲了。

CobaltStrike概述

Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。
成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等功能。同时,Cobalt Strike还可以调用Mimikatz等其他知名工具,因此广受黑客喜爱。
项目官网:https://www.cobaltstrike.com

俗称cs别名(多人运动),顾名思义,能够多人在线,搞事情

3.jpg

但是,cs这么强,cs的特征早被waf厂商标记了,你想想,好不容易搞下的目标,一连cs,就被waf提取到异常,分析下你的cs流量,ban了你的ip,cs权限就不又么得了,甚至被厉害的bt,溯源,万一你的密码简单,bt暴力破解你的cs,那不就被人一锅端了,

cs暴力破解脚本

4.jpg

这时候,就要隐藏我们的cs了,给他加buff,让waf发现不了

5.jpg

CobaltStrike特征隐藏的几种常见方法

1.修改默认端口

编辑文件teamserver进行启动项修改

vim teamserver

修改为7896

然后启动

2去除证书特征

Cobalt Strike默认的证书,已经被waf厂商标记烂了,我们要重新生成一个新的证书,这里我们用JDK自带的keytool证书工具来生成新证书。

Linxu

直接使用,keytool命令

keytool
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法

在keystore里,包含两种数据:

密钥实体(Key entity)—— 密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥

修改CS的证书文件

10.png

查看下cs的默认证书,口令为123456

keytool -list -v -keystore cobaltstrike.store

11.png

可以看到,cs的默认证书的Alias name 、Onwer 和 Issuer 的信息,特征都比较明显。

该命令生成一个新的cs证书

360
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias 360.com -dname "CN=US, OU=360.com, O=Sofaware, L=Somewhere, ST=Cyberspace, C=CN"

baidu
keytool -keystore cobaltStrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"

把新生成的证书替换掉默认的证书‘

Windows

在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe

 C:\Users\28601.DESKTOP-7QBTS9F\Downloads\Compressed\kvm_client_windows\jre\bin\keytool.exe -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias 360.com -dname "CN=US, OU=360.com, O=Sofaware, L=Somewhere, ST=Cyberspace, C=CN"

16.png

3.设置混淆配置文件

我们cs的客户端/服务端的流量通信,大部分流量审计软件,都能检测到cs默认的通信流量,所以cs开发团队,设置了配置文件,让用户直接设置客户端/服务端双向通信的流量格式以及软件相应配置,来绕过流量审计

cs官网给出的配置文件编写指南
https://www.cobaltstrike.com/help-malleable-c2

官方也给出了一个可修改的配置文件
https://github.com/rsmudge/Malleable-C2-Profiles

有兴趣的同学可自行看看配置如何写,我这边就直接github的了,地址如下

https://github.com/xx0hcd/Malleable-C2-Profiles/tree/master/normal
https://github.com/threatexpress/malleable-c2

这里使用伪造jQuery的C2-Profile

查看配置是否可用:./c2lint malleable-c2/jquery-c2.4.2.profile

启动配置./teamserver 服务器ip cs密码 混淆配置文件

抓包看流量,确实改变了

4.部署Nginx反向代理

现在我们的cs服务器登录端口隐藏了,流量也做了混淆,着次就要把,cs监听端口,给隐藏起来了,要不然,默认geturl,就能获取到我们的shellcode,加密shellcode的密钥又是固定的(3.x 0x69,4.x 0x2e),所以能从shellcode中解出c2域名等配置信息。

不修改特征的话nmap 一扫就出来

nmap [ip][port] --script=grab_beacon_config.nse

修改这个特征有两个方法,

1.修改源码加密的密钥,

参考:Bypass cobaltstrike beacon config scan

https://cloud.tencent.com/developer/article/1764340

2.限制端口访问,让一般的扫描器扫不了出开,

这里我们用nginx做反向代理,通过ua过滤流量,然后防火墙限制端口只能让127.0.0.1访问shellcode端口

先到我们的服务器上安装nginx服务

找到nginx安装路径
whereis nginx

20.png

打开配置编辑nginx配置文件

一般在安装路径的config/nginx.conf

vim /usr/local/nginx/conf/nginx.conf //具体看个人的nginx安装位置
在http中的server中配置中添加
        location ~*jquery {
            if ( $http_user_agent != "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko")
            {
                return 404;
            }
            proxy_pass http://127.0.0.1:2095;
        }

配置中的ua根据你的profile文件中设置的ua所定

profile中的ua也可以自行修改

设置防火墙只能让127.0.0.1访问监听端口

iptables -I INPUT -p TCP --dport 2095 -j DROP
iptables -I INPUT -s 127.0.0.1 -p TCP --dport 2095 -j ACCEPT
service iptables restart

直接访问域名,直接跳转404


4.png)

设置cs监听

直接生成exe,抓包测试,正常上线

5.https上线

默认的HTTPS的Beacon上线机器用的证书,及其容易被查出来,被识别,这里我们可以用自己的证书

我们可以直接在cloudflare上申请,非常方便,选择默认的pem格式

https://www.cloudflare.com/zh-cn/ssl/

分别复制内容保存为key.pem和chain.pem上传到cs的服务器上,再在nginx配置文件中启用证书。

为cobalt strike 配置证书
1.生成xxx.com.store文件

openssl pkcs12 -export -in /api.xxx.com/sss.pem -inkey /api.xxx.com/ssk.pem -out api.xxx.com.p12 -name api.xxx.com -passout pass:123456
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore api.xxx.com -src

2.将生成的api.xxx.com.store放到cs目录下,修改teamserver文件最后一行,将cobaltstrike.store修改为api.xxx.com.store和store文件对应的密码。(有必要的话,把端口号也可以改了并设置iptables只允许特定ip访问)

java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=40120 -Djavax.net.ssl.keyStore=./api.xx

3.将 keystore 加入 Malleable C2 profile 中

https-certificate {
     set keystore “api.xxx.com.store”;
     set password “123456”;
}

然后启动cs设置listener。

再通过nohup ./teamserver IP password amazon.profile &启动后抓上线包,证书就是自己申请的了

最后

​ 我的博客开通了,还望大佬多多指点

kosakd.top

3 Likes