在CDN上搭建支持反向代理的C2服务器(上)

news/2025/1/11 7:39:13/文章来源:https://www.cnblogs.com/o-O-oO/p/18665107

免责声明:

本文技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与作者无关。

一、摘要

在本文中,将探讨在微软Azure的CDN网络中使用C2域名和Nginx作为反向代理来构建一个红队基础设施。内容包括:C2域的选择和DNS配置、Cobalt Strike配置和Nginx反向代理配置。
通过这些配置, 可以使目标主机中的植入程序能够通过路径:Azure CDN ⏩ C2域 ⏩ Nginx反向代理与Cobalt Strike团队服务器进行通信, 以下是整体流程图:

二、所需组件及C2域选择

在实际应用中, 专门为C2服务器选择一个域名不是必须的选择, 但选择域名的好处在于可以避免在CDN配置中将Nginx反向代理的IP地址指定为源主机名并可以指定C2域的合法子域的完全限定域名(FQDN), 这样可以通过A记录指向Nginx反向代理的公网IP。

为C2服务选择域名有几种选择。一种是注册一个新域名并对其进行维护建设,增加其信誉度。另一种选择是通过如:expireddomains.net等服务购买已过期的域名。为了节省时间,这里选择后者。但无论是选择购买新域名还是已过期的域名,都要确保该域名有良好的信誉度,并且没有被安全厂商列入黑名单。剩下的步骤就是在Azure中创建Nginx虚拟机并配置公网IP,最后将公网IP与域名进行绑定。

在Azure中实现C2服务部署,必须的组件包括:
Linux VM for Nginx Reverse Proxy、Linux VM for Cobalt Strike Team Server和 Edgio CDN Endpoint

三、Azure Nginx VM配置

第一步首先要创建一个Linux VM用来实施Nginx反向代理。由于反向代理负责处理传入的流量并将其转发到对应的C2服务器, 因此在C2基础设施中起着核心作用, 在后面还将介绍其在C2环境中的使用方法以及它与简单的重定向器(socat或iptables)的区别。

下面将重心放到Linux VM的创建和配置流程上, 在Azure中创建一个新的的Linux VM,如图:

下面将看到关于虚拟机VM的基本设置, 在该界面需要将虚拟机分配到一个资源组, 命名并选择合适的区域和镜像。设置方法如下图:

将选项卡由Basics切换到Disks,磁盘配置选项如下图:

配置完磁盘选项,切换到选项卡Review+create, 到这里就可以直接点击create按钮创建虚拟镜像了,如图:

虚拟机创建完毕, 下面将配置Nginx虚拟机的网络设置, 由于在创建虚拟机时禁用了所有传入端口,因此首先要允许对SSH服务的访问, 但也不会全部放开, 只允许在特定IP地址范围内的IP能够远程访问。其次开放了HTTPS连接端口, 由于在红队行动场景中,通常无法提前知道目标的公网IP地址, 因此这里允许不受限制的HTTPS访问请求。配置如下图:

完成入站规则配置后, 下面要为Nginx虚拟机分配一个内部静态IPv4地址, 这里是:10.3.0.4, 这样做是必要的, 以便稍后配置Cobalt Strike虚拟机的入站规则, 使其仅接受来自Nginx虚拟机内部IPv4地址的HTTPS请求。配置如下图:

四、Azure Cobalt Strike VM配置

与 Nginx 虚拟机一样,Cobalt Strike 虚拟机也只能通过特定 IP 地址进行 SSH 访问。这确保了只有授权用户才能访问虚拟机。

开放端口: 50050,该端口用于 Cobalt Strike 客户端与 Cobalt Strike 团队服务器之间的连接。同样,将对该端口的访问限制在某些 IP 地址,以确保只有授权的 IP 能够通过端口 50050 与团队服务器通信。

此外,允许 HTTPS 流量到达 Cobalt Strike 虚拟机,但与 Nginx 虚拟机不同,这里将入站连接限制在特定的 IP 地址范围内。在这种情况下,仅允许来自 Nginx 虚拟机内部 IPv4 地址(在本例中为 10.3.0.4)的入站请求进入 Cobalt Strike 虚拟机的 HTTPS 端口。这种配置确保了Cobalt Strike 团队服务器通常只接受来自 Nginx 反向代理的入站 HTTP 流量。

此举通过严格限制访问的通信渠道和 IP 地址,提升了 Cobalt Strike 基础设施的安全性,从而减少了攻击面,保护了 Cobalt Strike 团队服务器的完整性。如下图:

这里为Cobalt Strike 虚拟机分配了一个静态内部 IPv4 地址(10.3.0.5),该地址将在后续的 Nginx 配置中使用。这确保了 Nginx 虚拟机与 Cobalt Strike 虚拟机之间的通信保持稳定和可预测,这在配置反向代理时尤为重要。如下图:

五、C2域名配置

在配置CDN之前, 需要在C2域中创建一个DNS记录, 该记录将在CDN配置中用作源主机名, CDN端点将指向它。如图:

在上图中, 首先为将与 C2 域一起使用的子域选择一个名称(在此示例中为“docs”)。然后通过 A 记录将该名称指向 Nginx 虚拟机的公网 IP 地址。这确保了目标上的植入程序通过 CDN 和 C2 域,使用源主机名与 Nginx 虚拟机进行通信。

六、CDN端点配置

下一步是在 Microsoft Azure 中创建一个 CDN 端点,用于传输C2流量。这里无需详细讨论CDN的工作原理,只需了解它们在这里的场景中起着至关重要的作用。CDN 允许我们使用微软 Azure 域名(如 ajax.microsoft.com)这一声誉非常高的域名,有效地伪装 C2 流量。

通过使用 CDN,可以将流量路由通过受信任的、常用的基础设施,从而使得我们的活动更难被检测和阻止。这在红队行动场景中具有极大的优势,因为此类场景的目标是保持隐蔽,避免产生可疑的互联网流量。设置 CDN 的第一步是在 Azure 中进行配置,如下图所示:

下一步需要选择Standard Edgio选项,如下图:

接下来的步骤是对 CDN 配置文件进行基本配置。与虚拟机一样,需要拥有一个有效的 Azure 订阅,并选择包含 Nginx 和 Cobalt Strike 虚拟机的资源组。CDN 的名称可以自由选择,CDN 端点名称也可以自由设置(如果尚未分配)。在本示例中,将使用 xyz-cache.azuredge.net。

将“Origin Type”(源类型)设置为“Custom Origin”(自定义源)。在“Origin Hostname”(源主机名)字段中,输入之前在 C2 域的 DNS 中创建的子域的 FQDN(完全限定域名),该子域通过 A 记录指向 Azure 中 Nginx 虚拟机的公网 IP。换句话说,如果C2 域名是 domain.com,并且在 DNS 中定义了一个指向 Nginx 虚拟机公网 IP 的子域,例如 docs,那么需要将 docs.domain.com 作为“源主机名”输入。

这种配置确保了所有对 CDN 端点的请求都会被重定向到C2 域的相应子域,而该子域又直接指向 Azure 中的 Nginx 虚拟机的公网 IP。通过这种方式,可以有效地掩盖通过 CDN 传输的指挥与控制流量,并确保它最终正确到达Nginx 虚拟机。如下图:

切换到Review + create选项卡, 配置如下图:

现在,已经成功创建了一个CDN节点, 但还需要进行一些配置, 第一步是在Overview中查看端点Hostname,如下图:

在Settings的Compression选项卡中, 将Compression选项设置为:Off, 如图:

在Caching rules选项中, 将Caching behavior选项的内容设置为:Bypass cache,如下图:

至此, 所有基础配置全部完成。

在下一篇文章中, 将重点介绍Nginx的安装配置、Cobalt Strike的安装配置、C2安装测试。

原创 suntiger 二进制空间安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867608.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

换个 AI 写

被遗忘,无法参与,无法长时间停课,对学校或教练组心存疑虑。每月的考试成绩。为了奥运会,并花费了无法停课的时间,以换取比赛课程的月度考试成绩。他们可以通过宣传来间接提高成绩。在未来的职业发展中,她取得了优异的成绩。缺乏时间,对江平在奥运会上取得优异成绩的怀疑…

从Resource中加载shellcode

以下文章来源于Relay学安全 ,作者FireGhost 前言 在开发malware过程中通常有两种加载shellcode方式: 1.把shellcode直接以硬编码的方式写入代码中 2.采用分离加载的方式 制作一个shellcode loader 从本地读取shellcode到内存中进行运行。 本文先讲解第一种方式,这个方式有一…

gRPC:第二代rpc服务

背景 在如今云原生技术的大环境下,rpc服务作为最重要的互联网技术,蓬勃发展,诞生了许多知名基于rpc协议的框架,其中就有本文的主角gRPC技术。一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper,经过一段时间的学习和实践,发现了C++与Java之间的种种不同,这也让…

Tensorflow2.0自定义层

Tensorflow2.0自定义层 tensorflow2.0建议使用tf.keras作为构建神经网络的高级API。 也就是说,大多数TensorFlow API都可用于eager执行模式。 from __future__ import absolute_import, division, print_function, unicode_literals !pip install -q tensorflow==2.0.0-alpha0…

推荐4本书《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》、《AI芯片开发核心技术详解》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

arcpy环境搭建

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行arcpy 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\Ar…

arcpy搭建环境

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行python 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\A…

20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧

背景信息 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1f69c565b50e28f7da 漏洞合约:https://vscode.blockscan.com/56/0xc86A50d30c2da607DE91375f363DeDFb3086b9D4 FortuneWheel 合约实现了幸运轮盘竞猜功能,合约…

在Ubuntu 20.04上安装Qt 5.15.0

在Ubuntu 20.04上安装Qt 5.15.01 安装必要的依赖项:sudo apt-get install build-essential \libgl1-mesa-dev \libglu1-mesa-dev \libegl1-mesa-dev \libgles2-mesa-dev \libxrandr-dev \libxext-dev \libxtst-dev \libxrender-dev \libxkbfile-dev \libsqlite3-dev \libssl-…

vscode上配置docker 宝塔环境的xdebug环境,经历过的哪些坑(macbook版)

在macbook中配置vscode对docker中宝塔的php代码进行断点设置的常见排查方式先说配置的几个逻辑: 1. vscode是要通过php debug插件启动9003监听端口 2. docker的宝塔启动xdebug后,是将运行信息推送到vscode宿主的9003端口;这里有个难点,docker内的宝塔和vscode不在一个本地,…

[第五空间2019 决赛]PWN5 1

先checksec一下,发现开启了NX和canary保护看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我…

身份鉴权(PHP)

引子:上一章主要对PHP中全局变量做了介绍,其中```$_COOKIE```、```$_SESSION```常常在身份鉴权中被使用。而本章则是由代码具体聊聊在PHP Web中开发者所常使用的身份鉴权方式。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!…