CobaltStrike特征隐藏
source link: https://xz.aliyun.com/t/9542
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近有很多同学私信我,说咋渗透?没有一个完整渗透流程?工具不会用?
今天他来了,这次给同学们带来,cs特征隐藏,
cs的基础用法,网上也有一大堆,先知社区也有很多大佬写得很详细了,我这里就不在讲了。
CobaltStrike概述
Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。
成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等功能。同时,Cobalt Strike还可以调用Mimikatz等其他知名工具,因此广受黑客喜爱。
项目官网:https://www.cobaltstrike.com
俗称cs别名(多人运动),顾名思义,能够多人在线,搞事情
但是,cs这么强,cs的特征早被waf厂商标记了,你想想,好不容易搞下的目标,一连cs,就被waf提取到异常,分析下你的cs流量,ban了你的ip,cs权限就不又么得了,甚至被厉害的bt,溯源,万一你的密码简单,bt暴力破解你的cs,那不就被人一锅端了,
这时候,就要隐藏我们的cs了,给他加buff,让waf发现不了
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的证书文件
查看下cs的默认证书,口令为123456
keytool -list -v -keystore cobaltstrike.store
可以看到,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"
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
打开配置编辑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 &启动后抓上线包,证书就是自己申请的了
我的博客开通了,还望大佬多多指点
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK