实战填坑 | CS使用CDN隐藏C2

  • A+
所属分类:安全文章

CS的基础用法、修改端口、密码的教程网上很多,此处不再赘述。


但在搭建域名+CDN隐藏版c2时楼主遇到了不少的坑,在这里顺着搭建的思路慢慢把踩的坑填上。


1.CS证书特征配置


Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。


1.1去除证书特征:基于keytool生成自签证书


用JDK自带的keytool证书工具即可生成新证书:

keytool命令:

-certreq            生成证书请求 -changealias        更改条目的别名 -delete             删除条目 -exportcert         导出证书 -genkeypair         生成密钥对 -genseckey          生成密钥 -gencert            根据证书请求生成证书 -importcert         导入证书或证书链 -importpass         导入口令 -importkeystore     从其他密钥库导入一个或所有条目 -keypasswd          更改条目的密钥口令 -list               列出密钥库中的条目 -printcert          打印证书内容 -printcertreq       打印证书请求的内容 -printcrl           打印 CRL 文件的内容 -storepasswd        更改密钥库的存储口令

例如:

国内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"

国外gmail:

keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias gmail.com -dname "CN=gmail.com, OU=Google Mail, O=Google GMail, L=Mountain View, ST=CA, C=US"

(Windows版也可使用java安装目录下自带工具<JAVA_HOME>binkeytool.exe)

然后使用keytool工具可查看生成的证书:

keytool -list -v -keystore cobaltstrike.store

其中的坑:

要么生成cobaltstrike.store替换默认位置对应文件,要么在teamserver启动文件中指定,例如生成baidu.store,就要修改teamserver为:

实战填坑 | CS使用CDN隐藏C2


1.2去除证书特征:基于openssl生成域名证书


这里有两个思路,一是申请域名后使用certbot生成对应证书;二是申请域名后修改ns记录,由托管服务商签发。

这里都需要申请域名,可百度freenom申请域名的教程(楼主申请失败了,无法接收邮件,使用插件也不行,所以算是一个坑)。

填坑方式:推荐 https://www.namesilo.com申请个冷门的也并不贵,才几块钱就可以用一年,还可微信支付。

实战填坑 | CS使用CDN隐藏C2

证书签发思路一certbot:

假如你申请域名为:+++.tk,那么在 vps 上安装 certbot ,然后生成证书:

certbot certonly  -d +++.tk  -d *.+++.tk --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory


实战填坑 | CS使用CDN隐藏C2

需要你在ns服务商处添加两条txt记录。以namesilo为例

实战填坑 | CS使用CDN隐藏C2

选择txt记录插入即可。

实战填坑 | CS使用CDN隐藏C2

freenome一样道理,而后会让你插入第二条,确认后等待一会,生效后回车确认,即可在当前目录生成域名证书:

实战填坑 | CS使用CDN隐藏C2

实战填坑 | CS使用CDN隐藏C2

这里的坑:两次添加txt记录后需要等待一点时间才能解析成功,可另外开启bash使用dig命令:

dig -t txt _acme-challenge.+++.tk  @8.8.8.8

测试是否成功,成功获取txt内容再在certbot点击回车,没有dig可使用yum install bind-utils命令安装,否则生成失败还要重新认证,重新添加TXT记录。

然后基于openssl生成为p12文件

openssl pkcs12 -export -in ./fullchain.pem -inkey ./privkey.pem -out +++.tk.p12 -name +++.tk -passout pass:123456

最后使用keytool生成store:

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


证书签发思路二cloudflare:


申请域名后可在cloudflare申请免费账户,更改NS服务器地址,托管域名。然后在cloudflare设置即可:

实战填坑 | CS使用CDN隐藏C2

下一步就可以从cloudflare一键导出证书:

实战填坑 | CS使用CDN隐藏C2

依然是使用openssl生成p12,然后store文件,具体操作参考上一个思路。


2.服务器特征配置


2.1隐藏服务器:CDN加速


在cloudflarr注册域名后,将NS记录指向alice.ns.cloudflare.com和chase.ns.cloudflare.com即可选择使用cdn加速即可开启。

实战填坑 | CS使用CDN隐藏C2

本地使用ping测试,为cdn的ip,而非你在域名服务商登记的真实ip就达到目的了:

实战填坑 | CS使用CDN隐藏C2

这里还需要注意一点,要想实时返回命令结果还需要关闭缓存

实战填坑 | CS使用CDN隐藏C2

虽然cloudflare可以随时清除,但不能手动去做,可开启页面规则,绕过所有缓存。

实战填坑 | CS使用CDN隐藏C2

编辑缓存级别为绕过即可。

实战填坑 | CS使用CDN隐藏C2

这里的坑:

不是设置地址为www.+++.tk就完事了,楼主单纯写完域名后去解析,死活无法上线,直接报错520error,还520,我还521呢我。

填坑方式:

域名后的内容根据malleable.profile规则设定,例如jQuery-2.2.4的所有请求包均为*.js,在页面规则中域名配置后跟  *.js即可,如果为其他内容,例如amazon.profile,gmail.profile,都要跟*字符,意为域名后请求所有目录均绕过缓存。


2.2隐藏流量特征:profile


Malleable C2 profile作为CS的配置文件,可以配置通信流量的特征,用来隐藏自己的行踪,以Malleable-C2-Profiles为例:


https://github.com/rsmudge/Malleable-C2-Profiles


官方参考地址:

https://www.cobaltstrike.com/help-malleable-c2


填坑1:生成shellcode或可执行文件时渗透时,是在目标机放一个小的payload,然后由这个小的payload去下载大马,这个过程是个分段过程,不是一次下载回来的,其中下载请求相关的流量特征,可以通过http-stager来定义:


http-stager {  set uri_x86 "/get32.gif";  set uri_x64 "/get64.gif";  client {    parameter "id" "1234";    header "Cookie" "SomeValue";  }  server {    header "Content-Type" "image/gif";    output {      prepend "GIF89a";      print;    }  }}


填坑2:使用cloudflare隐藏c2还要设置profile中的head的mime-type,具体为:需要在http-config将头设置为header "Content-Type" "application/*; charset=utf-8",不然可能会出现能上线但是无法回显命令的情况:

实战填坑 | CS使用CDN隐藏C2

填坑3:在profile中设置user-agent可避免各种被检测,同时也是https反向代理的有力识别标志。


例如将ua设置为Mozilla/5.0 (Windows NT 6.1; Trident/8.0; rv:12.0):

实战填坑 | CS使用CDN隐藏C2

在使用nginx反向代理时即可过滤:

实战填坑 | CS使用CDN隐藏C2

此时如果有多个工具生成shellcode上线ua不同,可设置多条件过滤,满足多人运动的需求:

实战填坑 | CS使用CDN隐藏C2

最后在https-certificate配置中还要对https证书进行声明:


https-certificate {set keystore “api.xxx.com.store”;set password “123456”;}

最后检查配置文件有效性:

./c2lint malleable.profile

即可在teamserver启动时加载profile:./teamserver 1.1.1.1(你的ip) ******(密码)

malleable.profile

2.3服务器反向代理限制访问

最重要的一个知识点就是使用反向代理限制你的c2被别人发现,例如配置:


location ~*/jquery {if ($http_user_agent != "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko") {return 302 $REDIRECT_DOMAIN$request_uri;}proxy_pass          https://127.0.0.1:5553;}

就可以很好地隐藏自己,但这里有一些坑点,楼主是踩了又跳出来;


填坑1:在nginx配置信息中location ~*/ 位置,需配置x-forword信息,同时在profile设置,否则上线的外网ip为自己的vps,或cdn地址,无法获取外部信息:

nginx.conf文件:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


实战填坑 | CS使用CDN隐藏C2profile文件:


http-config {    set trust_x_forwarded_for "true";}

填坑2:在nginx反向代理配置中,启动监听器时http host可为域名地址,bind port可另选一个,作为proxy_pass内容:

实战填坑 | CS使用CDN隐藏C2

其中bind port可在本机使用防火墙屏蔽,只允许内部访问:


iptables -I INPUT -p tcp --dport 45559 -j DROPiptables -I INPUT -s 127.0.0.1 -p tcp --dport 45559 -j ACCEPT

但proxy_pass http://127.0.0.1:45559;的地址选择也有门道,reverse http类型可填写任意本机真实ip信息,如localhost,127.0.0.1,甚至有外网网卡的直接外网真实ip都可以正常上线。


但reverse https类型只能填写127.0.0.1,如使用真实ip,如99.199.99.199,proxy_pass https://99.199.99.199.:45559的请求cdn会一直超时,造成无法上线。


CS4.3下载地址:


微信公众号:HACK学习呀

后台回复:CS4.3

即可获得下载地址


实战填坑 | CS使用CDN隐藏C2


推荐阅读:


CS如何配置通过CDN上线


本月报名可以参加抽奖送暗夜精灵6Pro笔记本电脑的优惠活动


实战填坑 | CS使用CDN隐藏C2


点赞,转发,在看


原创投稿作者:伞

实战填坑 | CS使用CDN隐藏C2

本文始发于微信公众号(HACK学习呀):实战填坑 | CS使用CDN隐藏C2

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: