前几天找资料看到cobalt strike可以通过nginx代理,隐藏主机之类的。想着试一试,后面搜一下还能走cloudflare cdn进一步隐藏。折腾一天之后有了这篇。
#0 禁ping
echo "net.ipv4.icmp_echo_ignore_all = 1" > /etc/sysctl.conf
sysctl -p #1 Cobalt Strike 改端口
尽量高一点,我这里开的是60045
#2 添加Listener
添加一个https beacon,配置如下:
#3 安装nginx,修改配置:
apt install nginx 使用这个文件生成nginx配置文件:
python3 cs2nginx.py -i ../jquery-c2.4.5.profile -c https://127.0.0.1:59433 -r https://google.com -H Domain 保存到/etc/nginx/nginx.conf
#4 添加ssl
用cloudflare的源服务器证书
然后加到nginx去
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/nginx/certs/xxx.pem;
ssl_certificate_key /etc/nginx/certs/xxx.key;
ssl_session_cache shared:le_nginx_SSL:1m; # managed by Certbot
ssl_session_timeout 1440m; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # managed by Certbot
ssl_prefer_server_ciphers on; # managed by Certbot 顺便开mtls验证client,其他只给cloudflare访问,其他的也不许
证书从此处下载。
ssl_client_certificate /etc/nginx/certs/origin-ca.pem;
ssl_verify_client on; 这时通过ip访问会出现400错误。
#5 修改Header
通过cloudflare cdn进行的请求中,真实ip在CF-Connecting-IP头中。
于是添加一条
real_ip_header CF-Connecting-IP; 上线ip就显示为真实ip了
#6 端口关闭
只开80, 443 + ssh + teamserver端口,减少被扫描到的可能性。
🥲
谨慎操作iptables,防止救砖火葬场!!!
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 60045 -j ACCEPT
#-1 完成
现在下马后,暴露面只有一个域名。如果域名也很重要,可以用worker再代理一层。但是我这个域名是本来没啥用的,也就无所谓了。