HardHat C2
一个跨平台、协作式的命令与控制框架,使用 C# 编写,专为红队评估和易用性设计

HardHat 是一个多用户 C# .NET 基础的命令与控制(C2)框架,旨在辅助红队评估和渗透测试。它通过提供一个健壮且易用的 C2 框架,致力于改善评估期间的工作质量。
HardHat 包含三个主要组件:
- 一个 ASP.NET 团队服务器(Teamserver)
- 一个 Blazor .NET 客户端
- 内置的 C# 基础植入物(Implant)
- 支持其他语言的第三方植入物
完整文档见:https://docs.hardhat-c2.net/。
注意:HardHat 处于 Alpha 版本;可能存在 bug、缺失功能以及意外情况。感谢您的试用,如有任何问题或功能缺失,请反馈以便处理。
社区
加入我们的 Discord 社区,讨论 HardHat C2、编程、红队评估以及一般网络安全话题。这里也是寻求帮助、提交 bug 或新功能,并随时了解最新更新的好地方。
欢迎代码贡献!可以提交功能请求、拉取请求,或通过 Discord 向我提出想法。
功能
自定义资产支持
团队服务器与客户端
- 基于角色访问控制(RBAC)的独立操作员账户
- 支持账户个性化
- 允许对特定功能进行限制访问(例如,仅查看的访客角色、团队负责人 OPSEC 审批(WIP))
- 管理器(监听器)
- 动态载荷生成(EXE、DLL、Shellcode、PowerShell 命令)
- 在客户端中即时创建和编辑 C2 配置
- 载荷生成的定制化
- 睡眠时间/抖动
- 有效截止日期
- 工作时间
- 类型(EXE、DLL、Shellcode、PowerShell 命令)
- 包含的命令(WIP)
- 运行 ConfuserEx 的选项
- 文件上传与下载
- 图形视图
- 文件浏览器 GUI
- 事件日志
- 事件和任务的 JSON 日志记录
- 战利品跟踪
- IOC(入侵指标)跟踪
- 跳板代理(SOCKS 4a、端口转发)
- 凭据仓库
- 自动补全命令历史
- 详细的帮助命令
- 交互式 Bash 终端命令(如果客户端在 Linux 上),或 PowerShell(Windows)
- 支持自动解析和记录终端命令(如 proxychains)
- 团队服务器条目的持久化数据库存储(用户账户、管理器、植入件、事件、任务、凭据、下载、上传等)
- 侦察实体跟踪(跟踪用户/设备信息、按需随机元数据)
- 某些命令的共享文件(详见团队服务器页面)
- 基于标签页的交互窗口,用于发出命令
- 部分命令的表格输出选项(例如
ls、ps 等)
- 自动解析 Seatbelt 输出,创建“侦察实体”以便方便引用
- 深色和浅色🤮主题

植入件(Engineers)
- 适用于 Windows 设备的 C# .NET 框架植入物(目前仅支持 CLR/.NET 4)
- 可生成为 EXE、DLL、Shellcode 或 PowerShell 加载器
- 睡眠时对载荷内存和堆进行 RC4 加密(仅 EXE / DLL)
- 所有网络通信的 AES 加密
- ConfuserEx 集成,用于混淆
- HTTP、HTTPS、TCP、SMB 通信
- TCP 和 SMB 可以以 Bind 或 Reverse 配置进行点对点(P2P)通信
- 每个植入物在编译时生成唯一密钥
- 根据 C2 配置支持多个回调 URI
- P/Invoke 和 D/Invoke 集成,用于 Windows API 调用
- SOCKS 4a 支持
- 反向端口转发和端口转发
- 所有命令作为异步、可取消的任务运行
- 内联程序集执行和内联 Shellcode 执行
- DLL 注入
- 执行程序集和 Mimikatz 集成
- Mimikatz 未内置于植入物,而是在发出特定命令时推送
- 各种本地和网络枚举工具
- Token 操作命令
- 横向移动命令
- 跳跃(psexec、wmi、wmi-ps、winrm、dcom)
- 远程执行(WIP)
- AMSI 与 ETW 补丁
- 非托管 PowerShell
- 脚本仓库允许同时加载多个脚本
- Spawn 与注入
- 运行、执行和 shell 命令

快速开始
安装
Docker
- 安装 Docker 和 Docker Compose
- 运行
docker compose up -d
- 可选:将
HARDHAT_ADMIN_USERNAME 和/或 HARDHAT_ADMIN_PASSWORD 作为环境变量提供;如果省略,默认管理员用户名和随机生成的密码将在首次运行时写入团队服务器日志
- 在浏览器中访问 https://localhost:7096/
手动安装
- 从 Microsoft 安装 .NET 7 SDK
- 从
.\TeamServer 目录运行 dotnet run 以构建并启动团队服务器
- 从
HardHatC2Client 目录运行 dotnet run https://<团队服务器主机>:<团队服务器端口>
- 例如,假设团队服务器运行在同一主机和默认端口:
dotnet run https://127.0.0.1:5000
- 在浏览器中访问 https://localhost:7096/
要配置团队服务器的监听地址(即客户端将连接的位置),请编辑 .\TeamServer\Properties\LaunchSettings.json,将 "applicationUrl": "https://127.0.0.1:5000" 更改为所需位置和端口。
设置
- 使用环境变量设置或团队服务器打印到 STDOUT 的用户名和密码登录客户端 Web UI
- 导航到设置页面,创建一个新的用户账户
- 如果成功,将出现一条消息;然后您可以使用该账户登录以访问完整客户端
版本发布跟踪
- Alpha 0.2 版本 - 2023年7月6日
- Alpha 版本 - 2023年3月29日