Havoc Framework 介绍
简介
Havoc Framework 是一个现代化且具有高度可塑性的 C2 框架。它专为渗透测试人员、红队和蓝队设计。
- 作者:Paul Ungur (@C5pider)
- 性质:免费、开源
- 核心理念:Havoc 的设计初衷并非开箱即用的免杀,而是追求模块化和可塑性。它赋予操作者根据目标环境定制功能和模块的能力,从而实现规避检测。
架构与工作原理
Havoc Framework 主要分为两个核心部分:Teamserver 和 Client。
Teamserver
Teamserver 是框架的核心枢纽,通常部署在公共 VPS 上。
- 语言:使用 Golang 编写。
- 功能:
- 处理已连接的操作员(Operators)。
- 负责 Agent 的任务下发。
- 解析回调数据。
- 管理监听器(Listeners,支持 HTTP/HTTPS)。
- 处理从 Agent 下载的文件和截图。
- 支持多人协作。
- 负责 Payload 生成(exe/shellcode/dll)。
- 支持外部 C2(External C2)。
Client
Client 是 Operators 使用的用户界面,用于与服务器交互。
- 语言:使用 C++ 和 Qt 编写。
- 界面:提供跨平台的用户界面,采用基于 Dracula 的现代深色主题。
- 功能:操作员通过客户端对 Agent 下达命令并接收执行结果。
Demon Agent
Demon 是 Havoc 框架的 Agent,使用 C 和 汇编 编写,具备众多高级的对抗技术特性:
- 睡眠混淆 (Sleep Obfuscation):支持多种技术,如 Ekko、Ziliean 或 FOLIAGE。
- 堆栈处理:支持睡眠期间的堆栈复制。
- 地址欺骗:支持
x64返回地址欺骗。 - 系统调用:针对
Nt*API 使用间接系统调用。 - 防护绕过:通过硬件断点修补 AMSI 和 ETW。
- 其他功能:
- 支持 SMB 通信。
- 令牌库(Token vault)。
- 内置多种后渗透命令。
- 代理库加载(Proxy library loading)。
扩展性
Havoc 提供了强大的扩展能力,允许用户根据需求进行定制:
- 外部 C2:支持通过外部通道进行命令控制。
- 自定义 Agent 支持:除了 Demon,还支持自定义 Agent(例如 Talon)。
- Python API:提供 Python 接口用于自动化或扩展。
- 模块化:支持社区贡献的模块扩展功能。
Havoc Framework 安装
下面,我们将在 Kali Linux 上安装 Havoc Framework
安装系统依赖
在安装项目前,我们需要先安装相关的系统依赖
sudo apt update
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 qtbase5-dev libqt5websockets5-dev python3-dev libboost-all-dev mingw-w64 nasm拉取项目
git clone https://github.com/HavocFramework/Havoc.gitcd Havoc构建 Teamserver
下载 Go 依赖
在编译 Teamserver 时,会用到 Go 和 Python,Go 的话我们上面已经安装过了,Python 的话,这里我选择使用 uv 进行管理
cd teamservergo mod download修改 Install.sh
teamserver 文件夹里的 Install.sh 存在问题,我们需要修改一下
#!/bin/bash
if [ ! -d "dir/x86_64-w64-mingw32-cross" ]; then sudo apt -qq --yes install golang-go nasm mingw-w64 wget >/dev/null 2>&1
if [ ! -d "data" ]; then sudo mkdir data fi
sudo wget https://musl.cc/x86_64-w64-mingw32-cross.tgz -q -O /tmp/mingw-musl-64.tgz
sudo tar zxf /tmp/mingw-musl-64.tgz -C data
sudo wget https://musl.cc/i686-w64-mingw32-cross.tgz -q -O /tmp/mingw-musl-32.tgz
sudo tar zxf /tmp/mingw-musl-32.tgz -C datafi构建 Teamserver
我们回到 Havoc 的根目录,进行构建
cd ../make ts-buildNOTE如果出现类似
/tmp/mingw-musl-64.tgz: 权限不够的错误,请执行下面的命令Terminal window sudo rm /tmp/mingw-musl-64.tgzsudo rm /tmp/mingw-musl-32.tgzsudo make clean
我们可以得到一个叫做 havoc 的可执行文件

构建 Client
使用如下命令构建 Client
make client-build运行 Havoc
现在 Teamserver 和 Client 已经准备就绪,可以开始运行它们了。
运行 Teamserver
我们需要使用一个配置文件来启动 Teamserver。Havoc 已经提供了一个默认配置文件 profiles/havoc.yaotl。
./havoc server --profile ./profiles/havoc.yaotl -v--profile: 指定服务器的配置文件。-v: 显示详细的日志输出。

启动 Client
在另一个终端窗口中启动客户端。
NOTE客户端是需要图形化界面的
./havoc client启动后,会弹出一个图形化登录窗口。你需要填写 Teamserver 的连接信息:
- Profile Name: 给这个连接起一个名字(例如:Local Havoc)。
- Host: 你的 Teamserver IP 地址(如果是本地运行,填
127.0.0.1)。 - Port: 端口号(默认为
40056)。 - User: 用户名(默认为
Neo)。 - Password: 密码(默认为
password1234)。
登陆后如下

这些默认值可以在 profiles/havoc.yaotl 文件中查看和修改。

上线测试
我们测试一下上线
创建 Listener

生成 Payload


EXE 上线


部分信息可能已经过时