Skip to main content

课程所用 C2 服务器配置

考虑到在 Azure 上部署服务作为 C2 基础设施的组成部分,具有一定的门槛与成本,在课程推进与靶场中,我们搭建一个简易的 C2 基础设施。出于节约成本起见,转发器与 C2 服务器同主机,让 Nginx 充当反向代理,我们需要保护 CS 的监听端口。

这里我们选择 JQuery C2 侧写文件。

image.png

我们可以添加特定的 User Agent,这样的话,除了我自己的 Beacon,不会有其他的浏览器或者客户端工具使用相同的User Agent。

image.png

set useragent "Innocent";

在 CS 中新建一个监听器,HTTP HostsVPS IP,HTTP Host (Stager) 同样如此。HTTP Port (C2) 为 Nginx 监听端口HTTP Port (Bind) 为 Cobalt Strike 的监听器端口

image.png

Nginx配置文件

配置nginx的配置文件 /etc/nginx/ngix.conf

image.png

        server {
                 listen 8080;
		 ssl on;
		 ssl_certificate /etc/ssl/certs/public.crt;
		 ssl_certificate_key /etc/ssl/private/private.key;
                 server_name 34.192.196.71;
                 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错误页面。

对比图如下

image.png

root@redirector:/var/www/html# curl  -k https://34.192.196.71
^C
root@redirector:/var/www/html# curl  -k https://34.192.196.71:8080/download_beacon
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>
root@redirector:/var/www/html# curl  -k https://34.192.196.71:8080/download_beacon -A "Innocent"
Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.

通过这些简单的转发与请求过滤处理,我们不需要将 HTTPS 监听端口与团队服务器的端口暴露在公网。最后,我们可以通过 SSH 隧道,将 Cobalt Strike 团队服务器的端口映射到自用 Kali 主机上,用于登陆客户端。