课程所用 C2 服务器配置
考虑到在 Azure 上部署服务作为 C2 基础设施的组成部分,具有一定的门槛与成本,在课程推进与靶场中,我们搭建一个简易的 C2 基础设施。出于节约成本起见,转发器与 C2 服务器同主机,让 Nginx 充当反向代理,我们需要保护 CS 的监听端口。
这里我们选择 JQuery C2 侧写文件。
我们可以添加特定的 User Agent,这样的话,除了我自己的 Beacon,不会有其他的浏览器或者客户端工具使用相同的 User Agent
在 CS 中新建一个监听器,HTTPS Hosts 即 VPS IP,HTTPS Host (Stager) 同样如此。HTTPS Port (C2) 为 Nginx 监听端口,HTTPS Port (Bind) 为 Cobalt Strike 的监听器端口。
Nginx配置文件
配置 Nginx 的配置文件 /etc/nginx/ngix.conf
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/public.crt;
ssl_certificate_key /etc/ssl/private/private.key;
server_name azuresky.live;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~*/ {
if ($http_user_agent != "Innocent") {
return 403;
}
proxy_pass https://localhost:8443;
}
}
proxy_set_header 这行用于配置 Nginx 转发源 IP
proxy_pass 这行用于将 Nginx 端口的流量转发到 CS 的监听器端口
location ~*/ 这里定义了根据 User Agent 进行过滤。因为我之前留了一个几乎不可能存在于 Beacon 之外的 UA,很好用于区分是来自 Beacon 的通信,还是其他的客户端。非 Beacon 的通信全部转到403错误页面。
对比图如下
通过这些简单的转发与请求过滤处理,我们不需要将 HTTPS 监听端口与团队服务器的端口暴露在公网。最后,我们可以通过 SSH 隧道,将 Cobalt Strike 团队服务器的端口映射到自用 Kali 主机上,用于登陆客户端。