一、从内网渗透到远控植入:一次真实案例的复盘
在一次针对金融行业的授权红队演习中,我们的目标是一家中型银行的内网核心服务器。通过前期的钓鱼邮件,我们成功获取了一名财务人员的办公电脑权限。然而,这只是第一步,目标是内网的核心数据库。然而,由于目标机器的网络出口被严格审计,我们无法直接使用常规C2(如Cobalt Strike或Sliver)进行持久化控制。于是,我们决定对知名远控工具 Gh0st RAT 进行二次开发,以实现有效的隐匿控制和内网渗透。
这篇文章将详细讲解如何对Gh0st远控的源代码进行深度改造,使其更符合现代攻击需求,并在实战中实现绕过杀软检测与流量审计。请注意,本文仅限授权的安全测试和研究用途,切勿用于非法用途!
---
二、Gh0st远控的改造方向
为什么选择Gh0st?
Gh0st RAT 是一款经典的远控工具,凭借其高效的通信协议、较小的体积以及丰富的功能,一度在攻击圈内风靡。然而,随着杀毒软件的进化,它的标准版本早已被列入病毒库,并且其流量特征也容易被安全设备检测。因此,我们需要对其 通信协议、Payload加密方式、功能模块 等进行重构,使其成为一个现代化的渗透利器。
改造目标
以下是我们对Gh0st的改造方向:
- 流量隐匿:修改默认通信协议,避免使用明文或已知特征。
- 免杀优化:对Payload进行多层次加密和内存加载,实现对主流杀软的绕过。
- 功能模块扩展:增加内网代理转发功能,用作内网渗透跳板。
- 自定义通信端口:摒弃默认的 80/443 等常见端口,使用伪装流量的方式提高隐匿性。

---
三、环境搭建:从源代码到编译
要对Gh0st进行二次开发,我们首先需要获取其开源版本的源代码,并搭建一个适合的开发环境。
源代码获取
Gh0st RAT 的开源代码可以在一些开源代码托管平台找到,例如 GitHub 或某些国外论坛。具体文件我们以一个通用版本为基础(如v3.x)。
源码下载: <pre><code class="language-bash">git clone https://example.com/ghost_rat_open_source.git cd ghost_rat_open_source</code></pre>
开发环境准备
Gh0st RAT 的核心是用 C++ 编写的,因此我们需要配置一个支持 C++ 开发的环境,同时配备以下工具:
- Visual Studio 2022:用于编译和调试。
- CMake:构建环境。
- Mingw-w64:可选的跨平台编译工具链。
安装依赖: <pre><code class="language-bash">sudo apt update sudo apt install build-essential cmake mingw-w64</code></pre>
编译原始版本
在改动代码前,我们需要确保原始版本可以正常运行。以 Windows 为目标,我们使用 Mingw 进行编译。

<pre><code class="language-bash">cd src/ # 进入源码目录 cmake . -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw-w64/toolchain-x86_64.cmake make</code></pre>
生成的 Gh0stRAT.exe 文件是一个未经修改的标准版本,可以作为基线进行对比。
---
四、通信协议重构:让流量更隐匿

Gh0st 的原始通信协议是基于明文的,而这正是它容易被检测的原因。我们需要对通信协议进行改造,伪装成常见的加密流量(如 HTTPS)。
修改数据传输方式
原始版本的通信协议是基于简单的 TCP 套接字通信,我们将其改造为类似 TLS 的加密协议。以下是主要步骤:
- 引入加密库:使用 OpenSSL 或 GnuTLS。
- 伪造 HTTP Headers:在加密数据流中嵌入伪造的 HTTP 请求头。
- 增加随机性:在通信数据中加入随机填充,避免固定特征。
以下是核心代码改动示例(以 OpenSSL 为加密库):
<pre><code class="language-cpp">#include <openssl/ssl.h>
include <openssl/err.h>
void InitTLS() { SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); }
SSL_CTX CreateContext() { const SSL_METHOD method = SSLv23_client_method(); SSL_CTX* ctx = SSL_CTX_new(method); if (!ctx) { perror("Unable to create SSL context"); ERR_print_errors_fp(stderr); exit(EXIT_FAILURE); } return ctx; }</code></pre>
然后,将原始的 send() 和 recv() 替换为封装后的 SSL 版本。
---
五、Payload免杀:从静态到动态加载
现代杀软会对恶意文件的静态特征和运行时行为进行双重检测,因此我们需要对Payload的加载方式进行彻底改造。
静态免杀
- 加壳:使用开源加壳工具 UPX,添加自定义壳。
- 混淆代码:使用工具或手动修改变量名、函数名,提高代码复杂度。
<pre><code class="language-shell"># 使用UPX加壳 upx --best --overlay=strip Gh0stRAT.exe</code></pre>
动态加载
通过将恶意代码加载到内存中执行,我们可以避免杀软扫描磁盘上的可疑文件。以下是核心代码示例:
<pre><code class="language-cpp">#include <windows.h>
void LoadPayloadInMemory(const char payload, size_t length) { void exec = VirtualAlloc(0, length, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, payload, length); ((void(*)())exec)(); }</code></pre>
将Payload以加密形式写入资源文件中,运行时解密并加载到内存执行。
---
六、实战:跨越内网的隐匿渗透
在实际渗透场景中,我们使用改造后的Gh0st RAT完成了一次高效的内网横向移动。以下是操作流程:
- 入口点植入:通过鱼叉邮件,获取目标财务人员的电脑权限。
- 远控部署:使用动态免杀的Payload,隐匿部署远控工具。
- 横向移动:利用内网代理模块,向数据库服务器发起攻击。
- 数据窃取:通过Gh0st的屏幕录制功能,窃取敏感财务报表。
---

七、检测与防御:如何反制这种攻击?
尽管我们在攻击中投入了大量隐匿手段,但仍有一些检测和防御措施可以有效应对:
- 流量审计:捕获异常的伪装HTTPS流量。
- 行为分析:定位运行时的恶意行为特征。
- EDR溯源:通过内存取证发现动态加载的恶意代码。
---
八、个人心得:攻击者的思维与防御的艺术
作为一名红队成员,我深刻体会到攻击和防御是永无止境的博弈。对工具的深度理解和灵活改造能力,才是每一次成功渗透的关键。而作为防御者,需要不断学习新的检测和响应技术,才能在这场攻防战中立于不败之地。