前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CobaltStrike使用CDN域前置并搭建Nginx前置代理

CobaltStrike使用CDN域前置并搭建Nginx前置代理

作者头像
Jumbo
发布2023-08-28 15:50:47
1.1K0
发布2023-08-28 15:50:47
举报
文章被收录于专栏:中国白客联盟中国白客联盟

前言

本文将介绍CobaltStrike配置CDN域前置,并搭建Nginx前置代理来隐藏自身。

CDN域前置介绍

CDN域前置,也就是Domain fronting,简单点讲,就是伪造HOST,让CDN根据HOST转发到你真正的C2上面去,从流量上看,目的都是CDN的IP,这样做到了隐藏C2的目的:

配置CDN域前置

因为X云未校验域名归属人,可导致在X云控制台任意添加CDN域名:

然后配置CDN回溯地址:

最终使用如下命令测试是否配置成功,这样就会给你转发到你的回溯地址:

curl https://www.cdn.com/ -H "Host: host.com" -vv -k

其中www.cdn.com为任意配置了X云CDN的域名、IP即可。

CobaltStrike识别绕过

配置CobaltStrike证书+修改默认端口

首先为防止默认SSL证书被ips等设置流量监测到,首先得生成SSL证书并加载:

命令来源:

https://www.codenong.com/cs105286327/

openssl req -newkey rsa:2048 -nodes -out hongshu.csr -keyout hongshu_com.key openssl x509 -req -days 365 -in hongshu.csr -signkey hongshu_com.key -out hongshu_com.crt openssl pkcs12 -export -in hongshu_com.crt -inkey hongshu_com.key -out hongshu_com.p12 keytool -importkeystore -v -srckeystore hongshu_com.p12 -srcstoretype pkcs12 -destkeystore hongshu_com.jks -deststoretype jks

上述生成完证书以后,修改teamserver文件加载新的证书和证书密码:

java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=3306 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./your.jks -Djavax.net.ssl.keyStorePassword=yourpassword -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar:. -Duser.language=en server.TeamServer $*

当然,上述命令把CobaltStrike的默认监听端口也改成了3306。

stager url绕过

CobaltStrike stager有个固定特征,其url是根据checksum8算法生成的,而CobaltStrike默认开启监听后会启用stager url,因此如果不做相应的配置,会导致CobaltStrike的stager url被外部扫描到,比如我CobaltStrike开启如下监听:

CobaltStrike默认会一起开启stager:

根据算法扫描到stager url,获取stage文件,即可获取CobaltStrike配置信息:

因此使用Nginx前置代理来规避此类风险。

搭建Nginx:

server { listen 80 default_server; listen [::]:80 default_server; server_name yourdomain.com; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location ~ ^(/jquery-3.3.1.slim.min.js.*) { if (http_user_agent != "Mozilla/5.0") { return 302 http://domain.com; } proxy_pass http://127.0.0.1:180; expires off; proxy_redirect off; proxy_set_header Host host; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; proxy_set_header X-Real-IP

上面的Nginx配置作用是监听80、443端口;然后只有符合jquery开头的url才会转发到180和1443端口,180和1443也就是CobaltStrike listen上面配置的的bind端口。

也配置了获取X-Forwarded-For ,目的是把真实上线IP传给CobaltStrike,不然的话,CobaltStrike看到的上线IP也是Nginx服务器,因为是Nginx服务器把符合路由的流量转了过来。

接下来需要配置profile文件,注意几点:

1.把证书和密码加进去,让上线走的是自定义的修改过的ssl证书

2.配置上线的url,即和nginx里面配置的路由一致

3.设置trust_x_forwarded_for,解析x_forwarded_for的值来获取传过来的真实受害者IP。

4.profile文件里不要写死host字段,因为他会替换掉listen里面的host信息,比如笔者走的是cdn域前置,80和443走的是不同的host,如果profile写死了host信息,那所有的流量都会带上这个host头,如果写死www.baidu.com,就会导致笔者非www.baidu.com的cdn域前置就会失效。host写死也行,比如写成www.baidu.com, 这样上线看起来就是看起来是往www.baidu.com请求数据,文章参考地址:Payload多种隐藏方法

5.后来测试发现,域前置的时候,"https host(stager)"里写cdn域名的话,stager、生成的shellcode不会上线成功,因为他直接往cdn请求了,而如果写真实ip的话,会上线成功,那就会暴露真实IP,因此在"https host(stager)"里写接入了cdn的域名,还要在profile里设置http-stager的host为注册的白cdn的域名即可。这个时候就要使用profile中的header "Host"了。

最后得使用iptables,设置180和1443,即CobaltStrike的bind port只允许本地访问,反正这两个端口是从nginx的80和443转发过来的,外面人也确实不需要访问:

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 180 -j ACCEPT iptables -A INPUT -p tcp --dport 180 -j DROP iptables -A INPUT -s 127.0.0.1 -p tcp --dport 1443 -j ACCEPT iptables -A INPUT -p tcp --dport 1443 -j DROP

上面的搞定后,就不会存在cs被人恶意扫导致每次连接服务端都会同步很长时间,因为比如你的CobaltStrike监听了80端口,外面一堆扫描器在天天全网扫,扫描日志太多了,就会导致CobaltStrike的同步也得很长时间,也解决了Stager被扫问题。

拒绝某些IP

为了防止各种扫描和沙箱拉CobaltStrike数据,可以把一些厂商的沙盒IP给ban掉,在Nginx中配置如下信息即可:

#拒绝访问IP deny 192.168.66.88;

总结

本文介绍了CobaltStrike使用CDN域前置的技术和针对CobaltStrike被扫描和被发现的一些保护措施。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档