news 2026/9/25 7:21:36

Havoc Framework 实战指南:现代可塑化后渗透 C2 框架的架构、部署与配置全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Havoc Framework 实战指南:现代可塑化后渗透 C2 框架的架构、部署与配置全解析
  • 网络安全

【免费下载链接】Havoc

The Havoc Framework

项目地址:https://gitcode.com/gh_mirrors/ha/Havoc
点击查看免费下载

导读:Havoc 是一个由 @C5pider 创建的现代可塑(malleable)后渗透 C2(Command and Control)框架,采用「Go 编写的 Teamserver + C++/Qt 编写的跨平台客户端 + C/ASM 编写的旗舰 Agent(Demon)」三段式架构。本文以 README.md 为主线,结合仓库源码与 C2 Profile 配置示例,完整讲解环境准备、双端构建、Teamserver 启动参数、C2 Profile 全量字段,以及 Demon 的睡眠混淆、间接系统调用、SMB 横向移动、External C2 扩展等核心能力,帮助你从零搭建并安全运维一套属于自己的多人在线后渗透作战环境。


一、Havoc 是什么:三大核心组件

Havoc 的定位不是"规避检测"的工具,而是一个高度可塑、高度模块化的后渗透 C2 框架——它把"让 Agent 适配目标环境、规避目标检测系统"的能力交给 Operator 自定义扩展。从 README.md 的 Feature 清单和仓库目录结构(client/、teamserver/、payloads/)可以清晰看到框架由三大部分组成:

组件技术栈职责
ClientC++ + Qt(跨平台 UI)Operator 的操作界面,提供会话管理、命令执行、图表展示、事件查看等功能
TeamserverGolang多人协作服务端,负责监听器、Payload 生成、C2 Profile 解析、事件广播与数据持久化
DemonC + ASMHavoc 的旗舰 Agent(implant),内置丰富的后渗透命令与高级隐蔽技术

1.1 Client:基于 Dracula 暗色主题的跨平台 UI

Client 是跨平台 UI 层,官方描述为 "Cross-platform UI written in C++ and Qt",采用基于 Dracula 目录存放了全部 Qt Designer 界面文件(如Havoc.ui、DemonInteracted.ui、SessionTable.ui、EventViewer.ui等),说明会话列表、事件查看器、脚本管理等交互模块均以独立的.ui资源定义。

1.2 Teamserver:Go 编写的多人协作服务端

Teamserver 是框架的中枢,README 列出的能力包括:

  • Multiplayer(多人协作,见 teamserver/pkg/db/ 与 teamserver/pkg/events/ 中的事件/聊天/会话同步机制)
  • Payload generation:支持生成 exe / shellcode / dll 三种形态(见 teamserver/pkg/agent/ 与 payloads/ 目录下的Demon、DllLdr、Shellcode三个子项目)
  • HTTP/HTTPS listeners(teamserver/pkg/handlers/http.go)
  • Customizable C2 profiles(YAOtl/HCL 格式配置,见 teamserver/pkg/profile/)
  • External C2(teamserver/pkg/handlers/external.go)

当前仓库版本信息可以在 teamserver/cmd/cmd.go 中直接确认:

VersionNumber = "0.7" VersionName = "Bites The Dust" DatabasePath = "data/teamserver.db"

即当前版本为0.7 / CodeName "Bites The Dust",会话数据默认持久化到data/teamserver.db。

1.3 Demon:C + ASM 编写的旗舰 Agent

Demon 是 Havoc 的主力植入体,README 给出的特性清单包括:基于 Ekko、Ziliean 或 FOLIAGE 的睡眠混淆、x64 返回地址欺骗、Nt* API 间接系统调用、SMB 支持、Token 保险库、丰富的内置后渗透命令、基于硬件断点的 AMSI/ETW Patch、代理库加载、睡眠期间的栈复制等。对应源码位于 payloads/Demon/,其中src/core/下的 SleepObf.c、Syscalls.c、Token.c、TransportSmb.c 分别承载上述能力,后面章节会结合配置深入展开。


二、环境要求与准备

README 明确给出运行环境的推荐范围:

  • 操作系统:Debian 10/11、Ubuntu 20.04/22.04、Kali Linux,建议使用尽可能新的版本以避免问题;
  • Qt:需要较新版本的 Qt(避免编译报错);
  • Python:需要Python 3.10.x以避免构建问题。

详细安装步骤见 WIKI.MD,其中包括各发行版的依赖安装命令与两个高频构建报错的处理方案:

  • fatal error: Python.h: No such file or directory:需要安装 Python 3.10 及其开发头文件(Ubuntu 可用deadsnakesPPA);
  • incomplete type 'QTime' used in nested name specifier:说明 Qt 版本过旧,需升级到较新的 Qt6 dev 包。

以 Debian 系为例的依赖安装(源自 WIKI.MD 的 Pre-requisites 一节):

sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev \ libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev \ libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev \ qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev \ qtdeclarative5-dev golang-go python3-dev libboost-all-dev mingw-w64 nasm

Ubuntu 20.04/22.04 还需启用 Python 3.10:

sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.10 python3.10-dev

三、构建:Client 与 Teamserver

仓库根目录的 makefile 提供了统一构建入口,核心目标如下:

# main build target. compiles the teamserver and client all: ts-build client-build ts-build: @ ./teamserver/Install.sh @ cd teamserver; GO111MODULE="on" go build -ldflags="-s -w -X cmd.VersionCommit=$(git rev-parse HEAD)" -o ../havoc main.go @ sudo setcap 'cap_net_bind_service=+ep' havoc # 允许普通用户绑定低端口 client-build: @ git submodule update --init --recursive @ mkdir client/Build; cd client/Build; cmake .. @ cmake --build client/Build -- -j 4

3.1 构建并运行客户端

# 在仓库根目录执行 make client-build # 启动客户端 ./havoc client

构建过程会先同步 git submodule,再通过 CMake 编译client/Build。若你的环境存在多个 Qt 版本,在 macOS 上构建完成后通常需要brew unlink qt && brew link qt处理链接。

3.2 构建并运行 Teamserver

# 安装 Go 依赖(若 go build 提示缺失) go mod download golang.org/x/sys go mod download github.com/ugorji/go # 构建 teamserver 二进制 make ts-build # 启动 teamserver(以指定 profile 运行,-v 输出详细信息,--debug 开启调试) sudo ./havoc server --profile ./profiles/havoc.yaotl -v --debug

make ts-build会先执行 teamserver/Install.sh 完成交叉编译器等系统包安装,随后编译出根目录下的havoc可执行文件。所有与 Teamserver 交互产生的文件(会话数据库、Loot 等)默认存放于data/目录下;从 teamserver/cmd/server.go 可以看到每次启动还会在data/loot/<时间戳>下生成操作日志目录。

3.3 Docker 部署

仓库同时提供容器化方案,Teamserver-Dockerfile 用于构建服务端镜像,WIKI 中还给出了 Jenkins 流水线构建 Client 镜像的示例:

sudo docker build -t havoc-client -f Client-Dockerfile .

四、Teamserver 启动参数详解

Teamserver 的命令行参数在 teamserver/cmd/cmd.go 中定义,完整列表如下:

参数简写默认值说明
--profile无空指定 Havoc Teamserver 的 C2 Profile 文件路径
--default-dfalse使用默认 Profile(data/havoc.yaotl),会覆盖--profile
--debug无false开启调试模式
--debug-dev无false开发者调试模式(以 debug 宏重新编译 Agent)
--send-logs无falseAgent 通过 HTTP(S) 向 Teamserver 回传日志
--verbose-vfalse显示详细消息

启动流程(见 teamserver/cmd/server.go)大致为:创建 Teamserver 实例 → 初始化data/loot日志目录 → 输出版本与启动时间 → 加载 Profile(默认或指定路径)→ 校验系统依赖包(FindSystemPackages,缺失会提示 "Please install needed packages")→Server.Start()正式拉起服务。

命令行中如不提供任何参数(./havoc或./havoc server),程序会直接打印帮助信息并退出。


五、C2 Profile 全量配置解析(核心)

Havoc 使用YAOtl(一种基于 HCL 的配置语法)编写 C2 Profile,仓库内置了三个可直接使用的示例:

  • profiles/havoc.yaotl —— 仅含 Teamserver/Operators/Service/Demon 的最小基础配置;
  • profiles/http_smb.yaotl —— 包含 HTTP 监听器与 SMB 监听器的完整仿冒配置(模拟 Microsoft Teams 流量);
  • profiles/webhook_example.yaotl —— WebHook 通知配置示例。

Profile 的结构定义位于 teamserver/pkg/profile/config.go,顶层共 6 个 Block:

type HavocConfig struct { Server *ServerProfile `yaotl:"Teamserver,block"` Operators *OperatorsBlock `yaotl:"Operators,block"` Listener *Listeners `yaotl:"Listeners,block"` Demon *Demon `yaotl:"Demon,block"` Service *ServiceConfig `yaotl:"Service,block"` WebHook *WebHookConfig `yaotl:"WebHook,block"` }

5.1 Teamserver 块:服务端地址与交叉编译工具链

Teamserver { Host = "0.0.0.0" Port = 40056 Build { Compiler64 = "/usr/bin/x86_64-w64-mingw32-gcc" # 64 位 Windows 交叉编译器 Compiler86 = "/usr/bin/i686-w64-mingw32-gcc" # 32 位 Windows 交叉编译器 Nasm = "/usr/bin/nasm" # NASM 汇编器(编译 Agent 汇编代码) } }
  • Host/Port:Teamserver 的监听地址与端口(默认0.0.0.0:40056,供 Client 与 Agent 回连);
  • Build块:Payload 生成所需的 MinGW 交叉编译器与 NASM 路径。默认 Profile(data/havoc.yaotl)中使用的是data/x86_64-w64-mingw32-cross/bin/...的本地工具链路径,说明不同安装方式下路径会不同,需按实际环境调整。

5.2 Operators 块:操作员账号(多人协作)

Operators { user "5pider" { Password = "password1234" } user "Neo" { Password = "password1234" } }

每个user块的label(双引号内的名称)即用户名(对应源码中Name string \yaotl:"Name,label"`),块内Password字段为登录密码。Operators块定义了哪些 Operator 可以连接 Teamserver 进行多人协同作战,Profile 解析时通过ListOfUsernames()([profile.go](https://link.gitcode.com/i/05c9f796f5ed5a6e395fc97e69884183))提取全部用户名用于鉴权。示例密码password1234` 仅为演示,实际部署务必更换强密码。

5.3 Listeners 块:监听器配置(HTTP / SMB)

Listeners块支持三类监听器(源码见 config.go):Http、Smb、External。

HTTP/HTTPS 监听器全字段

以 http_smb.yaotl 中的完整示例为准:

Listeners { Http { Name = "teams profile - http" Hosts = [ "5pider.net" ] # 回调域名(Agent 连接用) HostBind = "0.0.0.0" # 监听器绑定地址 HostRotation = "round-robin" # 多 Host 轮换策略 PortBind = 443 # 服务端绑定端口 PortConn = 443 # Agent 连接端口 Secure = false # 是否启用 HTTPS(生产环境务必开启!) KillDate = "2024-01-02 12:00:00" # 到期时间,格式 2006-01-02 15:04:05 UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" Uris = [ "/Collector/2.0/settings/" ] # 回调 URI 路径 Headers = [ # 请求头(仿冒合法请求) "Accept: json", "Referer: https://teams.microsoft.com/_", "x-ms-session-id: f73c3186-057a-d996-3b63-b6e5de6ef20c", "x-ms-client-type: desktop", "x-mx-client-version: 27/1.0.0.2021020410", "Accept-Encoding: gzip, deflate, br", "Origin: https://teams.microsoft.com" ] Response { # 服务端响应头(仿冒目标服务) Headers = [ "Content-Type: application/json; charset=utf-8", "Server: Microsoft-HTTPAPI/2.0", "X-Content-Type-Options: nosniff", "x-ms-environment: North Europe-prod-3,_cnsVMSS-6_26", "x-ms-latency: 40018.2038", "Access-Control-Allow-Origin: https://teams.microsoft.com", "Access-Control-Allow-Credentials: true", "Connection: keep-alive" ] } } ... }

对照 config.go 的结构体,各字段含义与约束如下:

字段是否必填说明
Name必填监听器名称(Teamserver 端唯一,重名会报 "listener already exists")
Hosts必填回调域名列表,可配置多个,配合HostRotation轮换
HostBind/HostRotation必填绑定地址 / 多域名轮换策略
PortBind/PortConn必填/可选服务端绑定端口 / Agent 实际连接端口
Secure可选是否启用 HTTPS(示例注释明确警告:生产环境一定要开启)
KillDate可选会话到期时间,格式2006-01-02 15:04:05
WorkingHours可选工作时间窗口,格式如8:00-17:00
Method/UserAgent可选请求方法 / 请求 UA 伪装
Headers/Uris可选请求头集合 / 回调 URI 集合
Cert可选HTTPS 证书:Cert+Key两个子字段
Response可选服务端响应头集合(Headers子字段)
Proxy可选上游代理:Host、Port、Username、Password

实战提示:http_smb.yaotl示例整体模仿 Microsoft Teams 的流量特征(UA、x-ms-*头、响应头均取自真实 Teams 服务),这正是 README 所述"malleable(可塑)"能力的体现——通过 Profile 让 C2 流量在网络上呈现为合法业务流量。

SMB 监听器(横向移动 / 内网 pivot)
Smb { Name = "Pivot - Smb" PipeName = "demon_pipe" # 命名管道名称 }

SMB 监听器用于内网环境下的 Pivot 通信,对应源码 teamserver/pkg/handlers/smb.go 与 ListenerStart 中的LISTENER_PIVOT_SMB分支。它同样支持可选的KillDate与WorkingHours字段。

External 监听器
External { Name = "..." Endpoint = "..." # 外部 C2 端点 }

External 监听器通过 external.go 实现,接收外部 C2 客户端(如自定义转发器)发来的流量,是构建"边界隔离 / 域前置"等复杂通信链路的入口,详见下文"可扩展性"。

5.4 Demon 块:Agent 行为配置

Demon块控制 Agent 的运行时行为(config.go):

Demon { Sleep = 2 # 心跳间隔(秒) Jitter = 20 # 心跳抖动百分比(%) TrustXForwardedFor = false # 是否信任 X-Forwarded-For 头 Injection { Spawn64 = "C:\\Windows\\System32\\Werfault.exe" # 64 位注入进程 Spawn32 = "C:\\Windows\\SysWOW64\\Werfault.exe" # 32 位注入进程 } }

完整字段表(含可选高级项):

字段类型说明
Sleep/Jitterint心跳间隔(秒)与抖动百分比,对抗流量分析
IndirectSyscallbool是否启用间接系统调用(Nt* API)
StackDuplicationbool睡眠期间是否进行栈复制
SleepTechniquestring睡眠混淆技术(如 Ekko)
ProxyLoadingstring代理库加载模式
AmsiEtwPatchingstringAMSI/ETW Patch 模式(基于硬件断点)
ProcessInjectionblockSpawn64/Spawn32注入目标进程路径
DotNetNamePipestring.NET 执行使用的命名管道
Binaryblock可执行文件伪装:Header(MagicMz-x64/x86、CompileTime、ImageSize-x64/x86)、ReplaceStrings-x64/x86(字符串替换)
TrustXForwardedForbool是否信任 XFF 头以获取真实 IP

其中Binary块是实现二进制文件形态伪装的关键:可改写 PE 的 Magic 字节、编译时间戳、镜像大小,并对特征字符串进行替换,从文件层面规避静态检测。

5.5 Service 块与 WebHook 块

# 可选配置:不使用可整体删除 Service { Endpoint = "service-endpoint" Password = "service-password" } WebHook { Discord { Url = "https://discord.com/api/webhooks/..." # Discord Webhook URL AvatarUrl = "..." # 可选:头像地址 User = "Havoc" # 可选:展示用户名 } }

Service块用于启用服务端 Agent(service agent)接口;WebHook.Discord用于将告警/事件推送到 Discord(实现见 teamserver/pkg/webhook/discord.go)。两者均为可选。


六、监听器生命周期:从 Profile 到上线

监听器启动入口位于 teamserver/cmd/server/listener.go:

  1. 遍历t.Listeners,若已有同名监听器则报错listener already exists;
  2. 按类型分发:LISTENER_HTTP→handlers.NewConfigHttp();LISTENER_PIVOT_SMB→handlers.NewPivotSmb();LISTENER_EXTERNAL→handlers.NewExternal(...);
  3. 注入 Teamserver 引用后调用Start()拉起服务。

Agent 上线后的数据流:请求进入后由 handlers.go 的 parseAgentRequest 解析包头并路由到handleDemonAgent/handleServiceAgent,随后按会话的 AES 密钥进行解密(Parser.DecryptBuffer)与任务下发。SMB Pivot 场景下(handlers.go),Teamserver 会依据DEMON_PIVOT_SMB_COMMAND找到父会话PivotInstance,通过父 Agent 中转子 Agent 的加密流量——这就是内网横向扩展的底层机制。


七、Demon 旗舰 Agent 特性深挖

README 列出的 Demon 特性均可与 payloads/Demon/ 源码一一对应:

README 特性对应源码说明
Sleep Obfuscation(Ekko / Ziliean / FOLIAGE)Obf.c、SleepObf.h心跳间隔期间加密内存中的敏感数据,规避内存扫描
Stack duplication during sleep同上(SleepObf 体系)睡眠时复制栈,抹去调用痕迹
Indirect Syscalls for Nt* APIsSyscalls.c、Syscalls.h间接系统调用绕过用户态 Hook
x64 return address spoofingSpoof.x64.asm、Spoof.c伪造返回地址,干扰栈回溯分析
Patching AMSI/ETW via Hardware breakpointsHwBpEngine.c用硬件断点方式 patch,避免常规内存 patch 特征
SMB supportTransportSmb.c、Pivot.cSMB 命名管道传输与 Pivot
Token vaultToken.c令牌管理(窃取/恢复/提权)
Proxy library loadingMemory.c 等内存加载库避免落盘
丰富的内置后渗透命令Commands.c详见客户端会话控制台帮助(见上文第三张截图)

设计注意(README "Note" 一节):Havoc 官方明确说明不接受任何与"检测规避"相关的 Issue。框架本身不以隐蔽性为首要目标,而是把可塑性(malleable)与模块化(modular)作为设计核心——让 Operator 有能力自行添加自定义特性或模块,去适配各自目标的检测环境。


八、可扩展性:External C2、自定义 Agent、Python API 与 Modules

README 的 "Extensibility" 一节给出了四条扩展路径:

  1. External C2:通过 External 监听器对接外部 C2 通信链路,适合需要把流量转发、中继或隐藏在第三方通道(如合法云服务)中的场景。核心实现见 external.go,其Request方法接收外部客户端 POST 的加密请求并交给parseAgentRequest处理。

  2. 自定义 Agent 支持(Custom Agent Support):框架并非只能使用 Demon。官方维护的 Talon 即为一个示例自定义 Agent(从 teamserver/pkg/agent/ 的包设计可看出,Agent 侧以agent.Agent抽象与 Teamserver 交互,支持接入新 Agent 类型)。

  3. Python API:官方提供独立仓库 havoc-py(含HavocUi、PyAgentClass、PyDemonClass、PyWidgetClass等模块)与 ScriptManager.ui,Client 内建脚本管理器,对应源码 PythonScript.cc。

  4. Modules:官方 Modules 仓库提供可插拔模块,make client-build时若检测到本地client/Modules目录不存在会自动 clone 到 client/Modules,随后在 CMake 构建中编译进 Client。


九、典型部署流程速览

综合以上内容,一次完整的部署与使用流程如下:

# 1. 安装系统依赖(见 WIKI.MD 各发行版命令) # 2. 构建客户端与服务端 make client-build make ts-build # 3. 按需编辑 C2 Profile(仿冒流量、账号、监听器等) vim profiles/http_smb.yaotl # 4. 启动 Teamserver(使用自定义 Profile) sudo ./havoc server --profile ./profiles/http_smb.yaotl -v --debug # 5. 启动 Client 并连接 Teamserver ./havoc client

登录后即可在 Client 中创建 HTTP/SMB/External 监听器、生成 Demon Payload(exe/shellcode/dll)、下发会话命令,并借助多 Operator 账号实现多人协同。


十、常见问题与注意事项

  • 不要提交检测类 Issue:README 明确声明不处理任何 detection 相关报告,这是框架定位决定的;
  • Couldn't compile implant: exit status 1:多为交叉编译器或 NASM 路径配置错误,请核对 Profile 中Build块的Compiler64/Compiler86/Nasm是否指向真实存在的工具链(Install.sh 会安装标准路径工具,自定义目录需手动对齐);
  • HTTPS 务必开启:http_smb.yaotl示例中Secure = false仅为便于观察明文流量,Profile 注释已明确警示生产环境必须启用Secure = true并配置Cert/Key;
  • 默认数据目录:所有会话数据库、操作日志、生成的 Payload 均写入data/目录,注意权限与备份。

结语

Havoc 以「可塑 + 模块化」为核心设计哲学,通过 Go Teamserver、C++/Qt Client、C/ASM Demon 的三层架构,配合 YAOtl 格式的 C2 Profile 与 External C2、Python API、Modules 等扩展机制,构建了一套可深度定制的后渗透作战体系。本文基于 README.md 与仓库源码,从环境准备、构建运行、Profile 全字段到 Agent 高级特性给出了完整的技术路径,更多细节(版本历史、命令参考、Custom Agent 接入等)可继续查阅 WIKI.MD 与 RELEASE.md 获取。

  • 网络安全

【免费下载链接】Havoc

The Havoc Framework

项目地址:https://gitcode.com/gh_mirrors/ha/Havoc
点击查看免费下载
上一篇:3步掌握Homebrew GUI工具Applite:告别命令行的macOS应用管理解决方案
下一篇:网盘下载革新:2025年最实用的直链提取工具全面解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 7:20:11

风电不确定性下的电力系统低碳经济调度优化

1. 项目背景与核心挑战风电作为清洁能源的代表&#xff0c;在电力系统中的占比逐年提升。但风电场出力具有显著的间歇性和波动性特征&#xff0c;这给电力系统的调度运行带来了新的挑战。传统确定性调度方法难以应对这种不确定性&#xff0c;可能导致系统备用容量不足或弃风率过…

作者头像 李华
网站建设 2026/9/25 7:18:47

Atlas 300V部署YOLOv5推理实战:从环境配置到性能调优

1. Atlas平台与项目背景1.1 Atlas 300V 24G到底是干什么的先回答那个被反复问到的问题&#xff1a;Atlas 300V 24G确实是运算加速卡&#xff0c;但准确说它是一张专门为AI推理场景设计的数据中心级加速卡&#xff0c;不是用来跑图形渲染的显卡。这颗卡的核心是华为昇腾AI处理器…

作者头像 李华