隐匿自己的c2服务器(一)
隐匿自己的c2服务器(一)
🌊服务器设置
安装java环境
yum install -y java-1.8.0-openjdk*
启动设置
遇到插件中中文乱码时,只需要更改启动的编码参数即可解决:
java -Dfile.encoding=utf-8 -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar
开启禁ping
vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1 //添加这一行
sysctl -p //保存之后刷新配置
🚀微信机器人推送上线信息
首先先注册好企业微信,不清楚百度上搜一下就好了,下载好这个插件:项目地址上传到服务器,然后在群聊中添加机器人
一路点过来到这里就得到了机器人的webhook
地址了
然后开始修改下载好的文件,因为配置的是微信推送,所以在CS_bot.py这个文件里注释掉其他的不用项。然后注意这个py文件本来就有拼接url故需要将webhook里面key
的部分(?key=之后的)提出来替换掉那个xxxx
然后编辑CS_bot.cna,划线的地方需要修改为自己放这个py文件的绝对路径。再编辑好之后先运行一下这个文件,缺什么包就用pip3下载好。
使用agscript在后台启动,注意这里的格式为 user那里不要和自己登录的用户名重复
nohup ./agscript <host> <port> <user> <pass> </file/CS_bot.cna>
最后的效果如下:
🏳️🌈端口特征修改
修改teamserver默认端口
其位于teamserver的最后一段,将-Dcobaltstrike.server_port=改为自己想设置的端口,
🏬证书特征修改
CobaltStrike的默认证书有三个:
- cobaltstrike.store 证书:用于服务端和客户端加密通讯
- proxy.store 证书:用于浏览器代理也就是browserpivot功能
- ssl.store 证书:如果你没有配置https-certificate选项,并且使用的是https监听器那么CobaltStrike默认就会使用这个证书
其中cobaltstrike.store证书和ssl.store证书比较敏感,特征也早已被各大厂商标记,建议自己生成替代不要使用其默认证书。我们可以使用keytool来管理或生成证书。keytool是一个Java数据证书的管理工具 ,keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中(即.store后缀文件)
可以使用 keytool -h
查看帮助,这里简单例举一点,其他的有需要就百度
cs的原始证书特征很明显就不看了,我这把原先的证书删了,用Keytool来重新生成证书
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias 别名 -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)"
eg:
keytool -keystore test.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias test.tk -dname "CN=Microsoft Windows, OU=MOPR, O=Microsoft Corporation, L=Redmond, ST=Washington, C=US"
查看一下生成的证书(密钥库密码默认为123456,密码取决于上面你改不改)
keytool -list -v -keystore 证书名.store
之后还要在teamsever里面修改一下keystore:
到这里简单的修改就完成了
🌏流量特征修改
利用cdn加速进行隐匿
域名
正常情况下,第一步我们要做的是先申请一个域名(这个域名的作用是用来配合 CDN 来隐藏我们的C2服务器),然后再申请一个CDN对我们所申请的域名进行加速,在这个过程中CDN会要求我们在域名的解析配置中设置相应的 CNAME。
- 一句话核心原理:使用CDN内容分发网络的多节点分布式技术,通过“加速、代理、缓存”隐藏在后面的静态文件或服务;最终实现对外暴露的是CDN多节点的公网域名IP,很难甚至无法溯源真实后端服务器的域名或IP!
首先要做的就是申请一个域名,可以去下面这个外网的弄到免费域名https://www.freenom.com/zh/index.html?lang=zh。这里就细讲一下比较详细的过程:
没有账号不用管待会会有注册的,先搜索一个域名,最好就是搜全,加上.tk .ml之类的,否则有可能搜不到。
然后注册那里,我没截图但这里拿编辑页面来说。就是你的信息不能乱写,正确度不高的话是成功不了的,比如如果你是挂代理上来的,那就在编辑信息就得和你的IP所在地尽可能匹配。像我用的就是下面这个网站洛杉矶地址生成器 - 美国地址生成器 - 美国身份生成器 (meiguodizhi.com)来生成信息。
注册成功了就可以点上面横栏service里面查看。
cdn配置
cdn我用的是免费的Cloudflarehttps://www.cloudflare.com/zh-cn/。注册账号后登陆,选择免费计划然后添加刚刚弄到的欲与CS服务器绑定的域名
进入站点后,点击左侧的dns,查看Cloudflare的名称服务器,把这两个ns记录下
然后会带刚刚注册域名的网站,在service里面有管理页面,进来如下依次填入前面的两个ns记录。这样就可以将自己的域名的所有解析功能都托管在Cloudflare,这样Cloudflare可以提供CDN的解析功能了
然后接着就是添加两条记录,一个的名称@或者其他的也可以,一个为www。添加后保存
在页面规则这里也添加两条,一个的url为*.域名/*
,一个为.域名/*
。底下选缓存级别
和绕过
之后可以ping一下自己的域名,能ping通而底下的ip也已经不是我们服务器的ip了。
证书和密钥
这里的设置就是把下面的自动配置的功能都关了。
下面创建证书,如下图
很简单看图操作:
创建之后保存一下生成的密钥和证书
在服务器上加俩个文件分别为secret.key 和 cert.pem 来保存。使用以下命令生成 certout.p12 。再接着生成新的证书:
openssl pkcs12 -export -in 保存的源证书.pem -inkey 保存的私钥.key -out 输出的p12文件名(自定义).p12 -name 设置别名 -passout pass:设置密码
keytool -importkeystore -deststorepass 设置密码 -destkeypass 设置密码 -destkeystore 设置证书文件名.store -srckeystore 上面自定义的p12文件.p12 -srcstoretype PKCS12 -srcstorepass 上面设置的密码 -alias 设置别名
eg:
openssl pkcs12 -export -in cert.pem -inkey secret.key -out certout.p12 -name cloudflare_cert -passout pass:753015
keytool -importkeystore -deststorepass 753015 -destkeypass 753015 -destkeystore bk.store -srckeystore certout.p12 -srcstoretype PKCS12 -srcstorepass 753015 -alias cloudflare_cert
修改profile文件
然后就是修改以下profile文件,根据你自己的文件来改GitHub上有很多拿来改一下就可以用了。我这里就大概这样
最后检查一下域名能否正常使用,这个ip就是我们使用的Cloudflare的最近CDN节点的公网ip
上线效果
配置CS Listener,将高信誉域名填入HTTPS Hosts和HTTPS Host(Stager)中,将CS服务器域名填入HTTPS Host Header中
但是要注意:Cloudflare的代理模式只有部分端口能够使用,使用时要注意端口的设置,否则是监听不到的。(Cloudflare 支持的 HTTP 端口:80、8080、8880、2052、2082、2086、2095;Cloudflare 支持的 HTTPS 端口:443、2053、2083、2087、2096、8443)
还有因为我是使用的国内云主机,域名没有进行备案,所以没有办法使用80、8080、443、8443端口提供服务;这里就直接拿https的来了
上线之后等一会是可以看到,CS上显示该机器的外部ip为某云的ip,并且该ip是动态变化
的。
查看受控主机本地回接C2服务器的ip地址已经是CDN节点IP,而不是我们自己服务器的真实ip
查一下这个IP可以看到来自cloudflare
至此就简单完成了,后面还会接着尝试其他方法来隐匿