起因

前段时间在公司看到了大佬用cs在内网中的表现,也决定自己动手折腾一套基础设施。上网查阅了许多资料后,最终敲定的建设拓扑图如下:

选择这套setup的原因有一下几点:

  1. 最大众化的amazon domain fronting已经不行了, 详情请看: 链接

  2. 用阿里CDN实现同样的效果似乎需要备案

  3. 借助Nginx反代我想要隐藏Team Server (建设完成后在上线的主机上抓包,还是能抓到和Team server交互的数据包, 反倒是CC隐藏的很好…不过这是基于我知道IP地址的情况下, 但是退一步说部属Team Server可简单很多)

  4. 封IP很难解决使用Cloud Flare CDN的问题, 除非你封整个CF拥有的ipv4 && ipv6的IP段: IPv4 | IPv6 (这样的办法虽然能凑效, 但是代价是不能正常访问使用了CF CDN服务的网站)

  5. 我想折腾折腾

过程

按照官方的部署方法,很快就部署好了,可以实现简单的上线等一系列功能,麻烦的事情在于按照上述要求对基础设施进行改造。

  1. 注册域名, 解析域名到CC和Team Server并打开CDN。

  2. 给Nginx写好配置文件,反向代理到Team Server。在这儿我就遇到了第一个坑

    当两个相同二级域名的网站使用Cloud Flare的CDN时,会出现Error 1000的情况,查询了官方文档后基本确定,要么用两个不同域名,要么两个其中有一个域名不能用CF。

  3. 跳过第一个坑,又解决了一系列SSL证书问题后(参考文章: 链接),开始着手malleable-c2配置文件。

关于malleable-c2
这里由于我懒,一开始使用的GitHub上的配置文件,伪装成请求jQuery文件,然而我发现我这么用,虽然主机能够上线,但是执行命令完全没有回显。在Nginx的日志中又能看到请求,初步判断是配置文件中设置的refer和Host两个字段导致的原因,所以最终还是决定,自己写一份,然后在想办法伪装。

  1. 解决了以上这些问题后,总算是能上线且执行命令了。

伪装

这里我观察到一个有意思的现象,在使用Web Delivery PowerShell 的时候,Cobalt Strike中日志观察到的请求没有User Agent部分,加上malleable-c2配置文件中可以设置请求的User Agent,所以可以根据User Agent是否为空 以及是否等于你配置中规定的User Agent来实现反代,如果UA不符合Nginx中的配置,则完全就是一个正常的网页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header Host $host;

// 判断UA是否为空
if ($http_user_agent ~ "^$"){
proxy_pass https://<YOUR DOMAIN>;
}

if ($http_user_agent = "<YOUR USER AGENT>"){
proxy_pass https://<YOUR DOMAIN>;
}
}