前言
最近有很多同学私信我,说咋渗透?没有一个完整渗透流程?工具不会用?
今天他来了,这次给同学们带来,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 &启动后抓上线包,证书就是自己申请的了
最后
我的博客开通了,还望大佬多多指点