0xStr1k3r/DarkNode

GitHub: 0xStr1k3r/DarkNode

一款开源的红队 C2 框架,提供原生远程桌面、多协议通信和完整后渗透能力。

Stars: 1 | Forks: 0

# 🌑 DarkNode C2 Framework **一个专业的、开源的命令与控制(C2)框架,专为红队行动打造。** 轻量级 Agent · 加密通信 · Web UI · 原生远程桌面 —— 无需商业许可证。 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Go](https://img.shields.io/badge/Built%20with-Go-00ADD8?logo=go)](https://golang.org) [![React](https://img.shields.io/badge/UI-React%20%2B%20Vite-61DAFB?logo=react)](https://react.dev)
## ⚡ 快速安装 **步骤 1 — 克隆并构建** ``` git clone https://github.com/0xStr1k3r/DarkNode.git cd DarkNode chmod +x setup.sh ./setup.sh ``` **步骤 2 — 创建你的 `.env` 文件** 在根目录 `DarkNode/` 文件夹下: ``` # DarkNode — runtime environment # 将此复制到你的 shell 或在运行前 source 它 TEAMSERVER_PORT=8080 TEAMSERVER_HTTPS_PORT=8443 TEAMSERVER_GRPC_PORT=9090 TEAMSERVER_TCP_PORT=4444 TEAMSERVER_TLS=false # REQUIRED: 在部署前设置真实密码 OPERATOR_ADMIN_PASS=admin # Optional: 用于 payload 构建的 agent 源代码路径 # AGENT_SRC_DIR=/path/to/agent # Optional: 使用 postgres 代替内存存储 # TEAMSERVER_STORE=postgres # DATABASE_URL=postgres://darknode:darknode@localhost/darknode ``` **步骤 3 — 运行 DarkNode** ``` cd bin ./darknode ``` 打开 `http://localhost:8080` 并使用 `admin` / 你的密码登录。 ## ✨ 功能特性 | 功能 | DarkNode | Cobalt Strike | Havoc C2 | Sliver | |-------------------------------|:--------:|:-------------:|:--------:|:------:| | 跨平台 Agent | ✅ | ✅ | ✅ | ✅ | | Web UI 控制台 | ✅ | ❌ | ✅ | ❌ | | **原生远程桌面** | ✅ | ❌ | ❌ | ❌ | | SOCKS5 代理 | ✅ | ✅ | ✅ | ✅ | | 端口转发 | ✅ | ✅ | ✅ | ✅ | | 自动持久化 (一键全能) | ✅ | ❌ | ❌ | ❌ | | 键盘记录器 | ✅ | ✅ | ✅ | ✅ | | 内存执行 | ✅ | ✅ | ✅ | ✅ | | 凭据收割 | ✅ | ✅ | ✅ | ✅ | | 多用户 RBAC | ✅ | ✅ | ❌ | ❌ | | mTLS 通信 | ✅ | ✅ | ✅ | ✅ | | WebSocket + HTTP 传输 | ✅ | ❌ | ❌ | ❌ | | gRPC 传输 | ✅ | ❌ | ❌ | ❌ | | DNS 传输 | ✅ | ✅ | ❌ | ✅ | | Payload 生成器 (Web) | ✅ | ✅ | ✅ | ✅ | | 审计日志 | ✅ | ❌ | ❌ | ❌ | | **价格** | **免费** | $$$ | 免费 | 免费 | ## 🗂️ 项目结构 ``` DarkNode/ ├── agent/ Go agent (runs on target) ├── teamserver/ C2 server — REST / WebSocket / gRPC API ├── operator-cli/ Terminal operator interface ├── web-ui/ React dashboard ├── bin/ Compiled binaries (output of setup.sh) └── deploy/ Docker Compose for Postgres + Redis ``` ## 🚀 使用指南 ### 启动 Team Server ``` OPERATOR_ADMIN_PASS=yourpassword ./bin/darknode ``` 打开 `http://localhost:8080` 并使用 `admin` / 你的密码登录。 ### 环境变量 | 变量 | 默认值 | 描述 | |------------------------|----------|------------------------------------------------| | `TEAMSERVER_PORT` | `8080` | HTTP 监听端口 | | `TEAMSERVER_HTTPS_PORT`| `8443` | HTTPS 端口 (需要 `TEAMSERVER_TLS=true`) | | `TEAMSERVER_GRPC_PORT` | `9090` | gRPC 端口 | | `TEAMSERVER_TCP_PORT` | `4444` | 原始 TCP 监听器 | | `TEAMSERVER_TLS` | `false` | 启用 TLS (自动生成自签名证书) | | `TEAMSERVER_STORE` | `memory` | 存储后端: `memory` 或 `postgres` | | `OPERATOR_ADMIN_PASS` | — | **必填** — admin 密码 | | `JWT_SECRET` | 随机 | JWT 签名密钥 | ### 构建 Payload 进入 Web UI 中的 **Payloads → Build Agent**: 1. 选择目标操作系统和架构 2. 将 **Callback URL** 设置为你的 IP —— 例如 `http://192.168.1.x:8080` 3. 选择传输通道 (`auto` 会探测所有通道;`http` 是最安全的默认选项) 4. 可选择启用 garble 混淆或 UPX 加壳 5. 点击 **Build** #### 可用的 Dropper Stagers | Stager | 用例 | |---------------|-----------------------------------------| | `stager.ps1` | Windows PowerShell (3 个下载回退) | | `stager.bat` | Windows CMD (以管理员身份运行) | | `stager.py` | 跨平台,需要 Python 3 | | `stager.sh` | Linux / macOS | | `update.hta` | Windows — 双击或 `mshta` | | `macro.vba` | 粘贴到 Office VBA 编辑器 (Alt+F11) | ### Operator CLI ``` ./bin/darknode-cli --server http://localhost:8080 --token ``` | 命令 | 描述 | |----------------------------------|------------------------------------| | `agents` | 列出活跃的 Agent | | `task [args]` | 将任务加入队列 | | `result ` | 获取任务输出 | | `rmtool [detect\|use ]` | 检查 / 利用远程管理工具 | | `history ` | 显示某个 Agent 的任务历史 | ## 🔌 传输通道 | 通道 | 环境变量覆盖 | 说明 | |---------------|---------------------------------|------------------------------------| | `auto` | — | 依次探测 WS → HTTP → TCP → DNS | | `http` | `AGENT_TRANSPORT=http` | 轮询,兼容性最好 | | `ws` | `AGENT_TRANSPORT=ws` | 持久 WebSocket | | `tcp` | `AGENT_TCP_ADDR=host:4444` | 原始 TCP,需要开放 4444 端口 | | `dns` | `AGENT_DNS_DOMAIN=c2.domain.com`| TXT 记录查询 | 连续失败 3 次后,Agent 会自动切换到下一个通道。 ## 🧰 Agent 命令 ### 核心 | 命令 | 参数 | 描述 | |--------------|--------------|-------------------------------------| | `sysinfo` | — | 主机名、OS、架构、用户、IP | | `shell` | `cmd` | 执行 Shell 命令 | | `whoami` | — | 当前用户 | | `ps` | — | 列出正在运行的进程 | | `ls` | `path` | 列出目录 | | `cat` | `path` | 读取文件 | | `download` | `path` | 将文件窃取至战利品存储 | | `upload` | `path, data` | 在目标机上投放文件 | ### 桌面控制 | 命令 | 参数 | 描述 | |----------------|----------------|------------------------------| | `screenshot` | — | 截屏为 PNG | | `screen_stream`| `quality` | 单帧 JPEG | | `rdp_start` | `fps` | 启动实时远程桌面 | | `rdp_stop` | — | 停止远程桌面会话 | | `mouse_click` | `x, y, button` | 点击指定坐标 | | `key_type` | `text` | 输入文本 | | `key_press` | `key` | 发送组合键 | ### 持久化 | 命令 | 描述 | |------------------------------------|----------------------------------------------| | `persist method=auto` | 一键全能:安装所有可用方法 | | `persist method=cron` | @reboot crontab (Linux) | | `persist method=systemd` | 用户 systemd 服务 (Linux) | | `persist method=bash_profile` | ~/.bashrc + ~/.profile (Linux/macOS) | | `persist method=registry_hkcu` | HKCU Run 键 (Windows) | | `persist method=scheduled_task_hidden` | 隐藏计划任务 (Windows) | | `persist method=startup_lnk` | 启动文件夹快捷方式 (Windows) | | `persist method=wmi_subscription` | WMI 事件订阅 (Windows) | | `persist method=cleanup` | 移除所有已安装的持久化 | ### 隧道 | 命令 | 参数 | 描述 | |----------------|-----------------------|--------------------------| | `socks5_start` | `port` | 启动 SOCKS5 代理 | | `socks5_stop` | — | 停止 SOCKS5 代理 | | `portfwd_add` | `lport, rhost, rport` | 添加端口转发 | | `portfwd_rm` | `id` | 移除端口转发 | ### 后渗透 | 命令 | 参数 | 描述 | |----------------|-------------------|---------------------------------| | `hashdump` | — | 导出密码哈希 | | `keylog_start` | — | 启动键盘记录器 | | `keylog_dump` | — | 获取键盘记录缓冲区 | | `inject` | `pid, shellcode` | 将 shellcode 注入进程 | | `check_sandbox`| — | 检测沙箱 / 虚拟机环境 | ## 🖥️ 远程桌面 DarkNode 包含完全原生的远程桌面 —— 不需要 VNC 或 RDP。 ### 平台要求 | 平台 | 屏幕捕获 | 输入控制 | |----------|------------------------------------|--------------------------| | Linux | `scrot` 或 `xwd` + ImageMagick | `xdotool` | | macOS | `screencapture` (内置) | `cliclick` | | Windows | PowerShell + `System.Drawing` | PowerShell + `user32.dll`| ### 如何使用 1. 在 Web UI 侧边栏打开 **Remote Desktop** 2. 从下拉菜单中选择目标 Agent 3. 调整 FPS (1–20; 越高带宽消耗越大) 4. 点击 **▶ Start** —— 画布将显示实时屏幕 5. **鼠标**:单击、双击、右键、滚动可直接在画布上操作 6. **键盘**:点击画布以获取焦点,然后正常输入 7. 完成后点击 **⏹ Stop** ## 🌐 Web UI 页面 | 页面 | 路径 | 描述 | |---------------|--------------|--------------------------------------| | 仪表盘 | `/` | Agent 概览,实时统计 | | Agents | `/agents` | 活跃会话列表 | | Agent 详情 | `/agents/:id`| 控制台、桌面、历史标签页 | | 网络拓扑图 | `/network` | 所有会话的可视化拓扑结构 | | Payloads | `/payloads` | 构建 Agent,生成 Dropper | | 时间线 | `/timeline` | 跨所有 Agent 的事件日志 | | 热力图 | `/heatmap` | 按小时/天统计的活动 | | 告警 | `/alerts` | 配置阈值告警 | | 搜索 | `/search` | 全文搜索结果 | ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ DarkNode C2 │ │ │ │ ┌──────────┐ HTTPS / WSS / TCP / DNS / gRPC ┌───────────────┐ │ │ │ Agent │◄──────────────────────────────────►│ Team Server │ │ │ │ │ │ (Go HTTP) │ │ │ │ · Beacon │ Out-of-band RDP frames │ │ │ │ │ · Tasks │──── POST /rdp/frame/ ──────────────►│ · REST API │ │ │ │ · RDP │◄─── GET /rdp/input/ ──────────────│ · Auth / RBAC │ │ │ │ · SOCKS5 │ │ · RDP relay │ │ │ │ · Keylog │ │ · Audit log │ │ │ └──────────┘ └──────┬────────┘ │ │ │ HTTPS │ │ ┌──────▼────────┐ │ │ │ Web Console │ │ │ │ (React + Vite)│ │ │ │ │ │ │ │ · Dashboard │ │ │ │ · Terminal │ │ │ │ · Remote Desk │ │ │ │ · Payloads │ │ │ └───────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` ## 🔧 可选功能 **Garble 混淆** (建议在实际 engagements 中使用): ``` go install mvdan.cc/garble@latest # 在 Payload builder 中启用 "Symbol obfuscation" 复选框 ``` **UPX 加壳**: ``` sudo apt install upx # or: brew install upx ``` **mTLS** (用于 Operator ↔ Team Server 的双向 TLS): ``` TEAMSERVER_TLS=true TEAMSERVER_MTLS=true ./bin/darknode # Client cert 在首次运行时自动生成并保存到 ./certs/ ``` **Postgres 后端** (重启后持久化存储): ``` cd deploy && docker-compose up -d TEAMSERVER_STORE=postgres \ DATABASE_URL=postgres://c2strike:c2strike@localhost/c2strike \ ./bin/darknode ``` ## 🛠️ 开发 ``` # Web UI 在 :5173 端口热重载 cd web-ui && npm run dev # Team server 指向 dev UI 端口 VITE_TEAMSERVER_URL=http://localhost:8080 ./bin/darknode # Agent 对抗本地 team server AGENT_SERVER_URL=http://localhost:8080 AGENT_ID=dev-1 ./agent/agent ``` ## ⚖️ 法律声明 DarkNode **仅**旨在用于授权的渗透测试和红队行动。 在未拥有或未获得书面测试授权的系统上擅自使用是**非法的**。 作者不对滥用行为承担任何责任。 ## 📄 许可证 MIT License — Copyright (c) 2026 DarkNode Contributors
基于 Go · React · TailwindCSS 构建
标签:adversary simulation, Agent, C2框架, Cloudflare, EVTX分析, Google搜索, Go语言, HTTP工具, IP 地址批量处理, MITRE ATT&CK, PE 加载器, Python工具, React, SOCKS5代理, Syscalls, TCP SYN 扫描, Teamserver, Vite, Web UI, 加密通信, 命令与控制, 安全学习资源, 安全工具集合, 对手模拟, 开源安全工具, 攻击模拟, 日志审计, 植入物, 横向移动, 测试用例, 程序破解, 端口转发, 编程规范, 网络信息收集, 请求拦截, 远程桌面, 逆向工程平台, 驱动签名利用