Discover MCPs & agents
Loading MCPs and agents…
Loading MCPs and agents…
网页控制台 + Rust Agent。Cloudflare Worker 主通道,GitHub Issue 备用。MCP接入AI,全自动渗透必备。
Fetched from the repository for this visit.
授权实验室使用的红队指挥平台。浏览器里管理目标机上的 Agent:发命令、交互 Shell、传文件、穿隧道、扫描、采集、编包、升级。通信默认走你自己的 Cloudflare Worker 中继,GitHub Issue 作为备用通道;主路断了自动切备用,备用稳定后再切回来。
仅限你拥有或已获书面授权的环境。未授权侵入他人系统违法。
英文文档(与本文一一对应):README_EN.md
手动部署 Worker 中继:WORKER.md
GitHub C2 由三部分组成:
| 组件 | 作用 |
|---|---|
| Web 控制台 | Flask 网页后台。侧栏选 Agent,顶栏切换功能。自带中 / 英语言包。 |
| Agent | Rust 编写,部署在目标机。轮询取令、加密回传、可持久化与伪装。 |
| 通道 | 把指令和回显搬过去。主通道是 Cloudflare Worker + D1;备用是 GitHub Issue;也可只用 Notion 或只用其中一条。 |
控制台和 Agent 之间的载荷一律是 AES-256-GCM 信封。中继数据库里不存主机明文身份。一台机器若同时挂了 Worker 和 GitHub,侧栏合成一条,不会当成两台。
和其他「只把 GitHub 当信道」的工具比,这几条是真正不一样的:
[Channel] 通知。双通道在侧栏仍是一台,不是两台 Agent。/proc、对齐 SELinux/AppArmor,写文件还复原时间戳。Linux 上线后若当前不是 root,会在守护化之前自动试(能提才提,提不了照常以当前权限跑):
sudo -n 能过就直接以 root 再起自己;否则扫 sudo -l 里带 NOPASSWD 的解释器。CAP_SYS_ADMIN 时尝试 cgroup v1 逃到宿主机。成功则 exec 替换当前进程,不会并排出两个 Agent。环境变量闸门防止提权成功后死循环。memfd 无文件模式整条跳过(再 exec 自己会破无文件约定,还会在日志里留下失败痕迹)。
全部是进程级,不加载内核模块,不跟发行版内核版本绑死:
comm 按发行版自动扮 polkitd / accounts-daemon / systemd-udevd 等;工作线程扮 kworker。编包也可手填伪装名。/usr/lib/systemd/… 这类看起来像系统守护进程的位置;普通用户走 ~/.local/bin/。写之前用 access(2) 探权限,不先建再删、少触发文件监控。/proc:把 /proc/<pid> bind-mount 成 PID 1 的视图,常规 ps / 看 cwd、fd 不容易对上。chcon 对齐 bin_t / 单元文件上下文,减少「来历不明文件」刷审计。stealth_write)。x86_64-unknown-linux-musl 静态链接,目标机不用装运行库。fork():老 CentOS 上 Tokio 多线程 fork 会锁死。| 常见痛点 | 这里怎么处理 |
|---|---|
| 只用 GitHub:慢、限额紧、Issue 评论很脏 | Worker 做主通道,GitHub 只当备胎 |
| 双通道一上线变成两台马,对不上 | 侧栏合成一台,两个徽章 |
| Token 一过期,整群作废,只能重编重下 | Backup URL 拉新 JSON,热重启换票 |
| 到点不说话,面板一片「离线」,分不清死没死 | 窗外显示 安静,不是掉线 |
| 中继库一重建,命令水位错位,整群收不到令 | 水位失效自动复位 |
| 切通道时控制和马各听一边 | [Channel] 通知失败则 回滚 |
| 蓝队清掉一个开机项就没了 | 多策略持久化 + 每 6 小时自愈 |
| 普通用户权限不够,很多功能施展不开 | 启动自动提权(环境允许才成功) |
| 还要另下 Shell / 隧道二进制,目标机一堆文件 | 编进 Agent,内存跑;还可 memfd 无文件 |
| 保存设置时空字段把密钥冲掉 | 空不覆盖;浏览器拿不到全文 Secret |
| 整群同一秒上线,流量像心跳 | 启动抖动 + 时间窗按天按台错开 + 轮询抖动 |
| 大文件走评论通道传不了 / 传爆 | sendit 中转 + 分片上传 |
flowchart LR
OP[操作员浏览器] --> CTRL[Web 控制台]
AI[MCP / AI 客户端] --> CTRL
CTRL -->|主通道 HTTPS| WR[Cloudflare Worker + D1]
CTRL -->|备用 Issue 评论| GH[GitHub]
CTRL -.->|可选| NT[Notion]
WR --> AG[目标机 Agent]
GH --> AG
NT -.-> AG
AG -->|内置节点| SOCKS[本机 SOCKS5 隧道]
AG -->|内置 wspty| PTY[本机交互 Shell]
mindmap
root((GitHub C2))
通道
Worker 主
GitHub 备
Notion 可选
故障自动切换
控制台功能
终端
定时
反弹 Shell
文件
隧道
扫描
系统信息
资料库
报告
升级
生成器
MCP
设置
Agent
自动提权
进程级隐藏
多策略持久化
时间窗
无文件执行
热升级 / 卸载
侧栏列出已上线的 Agent,顶部切换业务页。终端、反弹 Shell、文件、隧道、扫描、系统信息、资料库、报告、升级在同一工作区。
控制台内置语言包(static/js/lang/zh.js、en.js)。右上角 EN / 中文 一键切换,选择会记在浏览器里;未选过则按系统语言默认。下面截图是中文界面,切到 EN 后同一套页面为英文。

生成器在网页里选通道、填凭据、编译,完成后直接下载二进制。双通道为 Worker 主 + GitHub 备。

两种 Token 用途完全不同,不要共用、不要给多余权限。
| Token | 用在哪 | 会不会进 Agent | 干什么 |
|---|---|---|---|
| Cloudflare API Token | 只在控制台「设置 → 一键部署 Worker」 | 不会。 只留在控制台服务器 | 部署中继:建 D1、上传 Worker、绑密钥 |
| GitHub Token | 生成器编包 / 设置里的扫描列表 | 会。 写进二进制,目标机上能被抠出来 | Agent 上线:读 Issue 命令、回评论 |
打开 Cloudflare API Tokens → Create Token → Create Custom Token。Cloudflare 控制台中英文下权限名称不一样,请按下表对照勾选(资源选 所有帐户 / All accounts,或只包含你的那一个帐户)。
| 中文控制台 | English dashboard | 级别 |
|---|---|---|
| 帐户 · D1 · 编辑 | Account · D1 · Edit | 建库、建表 |
| 帐户 · Workers 脚本 · 编辑 | Account · Workers Scripts · Edit | 上传 Worker、绑 Secret、挂 cron |
| 帐户 · 帐户设置 · 读取 | Account · Account Settings · Read | 自动定位帐户(GET /accounts) |
列表页上会缩成「帐户.D1、帐户.Workers 脚本、+1」;点进摘要应能看到上面三条:


这个 Token 只给控制台用来部署中继,不要编进 Agent,部署完成后可在 Cloudflare 面板删掉或收紧。若 Token 看不到帐户列表,把 Dashboard 右侧的 帐户 ID / Account ID 填进部署表单即可。
GitHub Token 会随二进制落到目标机。权限过大等于把仓库钥匙交给任何拿到样本的人。请用 Fine-grained personal access token,只开一个私有仓库:

图中红字标注即:选择你事先建好的隐私仓库。
不要给 repo 经典全仓库权限,不要给组织管理员、不要给多个仓库。控制台设置里用于扫描的 Token 也按同一最小权限配置。
网页命令行,不是假日志窗。
interactive:)。Agent 内置调度,不在目标机写 crontab。顶栏 ⏱ 定时(以前只能在终端手打命令,所以控制台里找不到单独入口)。
schedule ls / rm / clear,回显在本页,也进终端。schedule add 3600 id、schedule ls、schedule rm 1、schedule clear。真交互 PTY,走 WebSocket,不靠 30 秒轮询。
cliws,默认监听 7337。点「启动服务端」即可,不必另下软件。wspty。点「启动目标端反弹」下发回连,目标机不落额外文件。远程目录浏览器。
/、/tmp、/etc、/var/log、/home、/root、/dev/shm)。内网 SOCKS5,基于 Stowaway。
stowaway_admin。配置监听端口(默认 9998)和 SOCKS5 端口(默认 1080),点「启动服务端」。127.0.0.1:SOCKS端口,即以目标机为跳板进其内网。在目标机上下发并运行 fscan。
/tmp/.san 后立刻扫。/tmp/.san。cat /tmp/r.txt,输出显示在右侧。控制台本机上、按 Agent 分开的笔记与文件柜,不经过目标机。
把该 Agent 的备注、命令历史、回显、系统信息等汇总成一份报告。
给已上线的 Linux Agent 换新二进制,身份(agent id / 通道身份)保留。
/tmp/.agent_upg)。也可在目标机已有文件时,直接发 upgrade <路径>。升级失败则旧进程继续跑。Windows Agent 请改用手动替换。本页也可下发卸载。
在控制台本机用 Rust 交叉编译 Agent,编完可下载。
通道四档
| 档位 | 行为 |
|---|---|
| GitHub 单通道 | 只走 GitHub Issue 评论。 |
| Notion 单通道 | 只走 Notion 数据库页。 |
| Worker 单通道 | 只走 Cloudflare Worker。 |
| 双通道 | Worker 为主,GitHub 为备。 Worker 连续失败达到阈值后切 GitHub;备用连续成功后再探主路。 |
编包字段
通信 Secret:与控制台解密密码相同。部署时写过一次,编包可留空沿用。改了则旧 Agent 全部解不开。
GitHub Token / 仓库:单 GitHub 或双通道备用时必填。此 Token 会编进 Agent,只开 Issues 读写,见「凭据与权限」。
Worker 三件套(Worker / 双通道必填)。Path 不是密码,不要和 Secret 填反。 完整对照和手动部署见 WORKER.md。
| 栏 | 是什么 | 填错 |
|---|---|---|
| Worker URL | 中继主机,如 https://c2relay.xxx.workers.dev,不要带后面的路径 | 连不上 |
Worker Path(PATH_SECRET) | URL 第一段,像目录名,例如 a3f9k2-status。不进 HTTP 头 | 中继回 404 |
Worker Secret(C2_AUTH) | 请求头 X-C2-Auth,这才是中继口令 | 401 |
| 通信 Secret | AES 信封密钥,不在 Cloudflare 上 | 能连上但解不开回包 |
真正访问的是 https://<URL>/<Path>/reg,头里带 Secret。Path 留空会打到 /reg,中继强制要前缀,所以 404。
切换阈值 / 主探测间隔:仅双通道,默认 3 轮切备、5 轮探主。
轮询间隔(全自动识别): 你只填基数,默认 30 秒。Agent 自己判断有没有人在操作,不用手调快慢:
时间窗(加重): 按北京时间判断,时钟会用网络校准,不单信目标机系统钟。两种写法:
09:00-18:00(也支持跨夜,如 22:00-06:00)9,10,11,14架构:推荐 x86_64-unknown-linux-musl(静态、不依赖 glibc);另有 aarch64、gnu。
Release:自定义版本标签,空则用构建时的 git 短号。
Debug:生产保持关,避免在目标机落日志指纹。
Backup URL(远程换票,可选): 给一个 HTTPS 地址。GitHub Token 返回 401,或连续失败约 5 轮时,Agent 会 GET 这份 JSON,校验后写入新凭据并重启。留空 = 不启用。 同一地址 1 小时内最多拉一次;拉下来的内容和当前一样则不重启。
这个地址上必须是一份 JSON(Content-Type 随意,正文能被解析即可),字段如下:
{
"channel": "github",
"github_token": "github_pat_替换成新的Fine-grainedToken",
"github_repo": "owner/private-repo",
"password": "和当前通信Secret相同或你准备同时改掉的新Secret",
"hmac_sig": ""
}
| 字段 | 必填 | 含义 |
|---|---|---|
channel | 否,默认 github | github 或 notion。Notion 时:github_token 填 Integration Token(ntn_),github_repo 填 Database ID。 |
github_token | 是 | 新的上线 Token。同样会落到目标机,权限仍按「凭据与权限」收紧。 |
github_repo | 是 | GitHub 填 owner/repo;Notion 填数据库 ID。 |
password | 是 | 通信 Secret。若改了,控制台解密密码必须一起改,否则解不开回包。 |
hmac_sig | 视情况 | 网页生成器默认不校验签名,可留空。只有你编译时设置了环境变量 BACKUP_SECRET,Agent 才强制校验:对 channel|github_token|github_repo|password 做 HMAC-SHA256,值写成小写 hex。 |
地址必须是 https://。JSON 里是新 Token,不要放在能被猜到或被搜索引擎扫到的公开路径(公开 Gist 等于把新钥匙贴网上)。可用你控制的站点、带随机长路径的对象存储,或自建 Worker。Backup URL 本身不会被这份 JSON 改掉。
Guards: 可限定主机名、用户、标记文件、最低内存;不满足则静默退出(防沙箱 / 蜜罐)。
进程伪装名 / 落地路径: 空则按发行版自动扮系统守护进程。
Compress:strip 去符号;勾选后再用 UPX 压缩(需本机已装 upx)。
无文件模式(Linux)
\xNN / base64,生成 mmap RWX 跳转执行命令。把控制台交给支持 MCP 的 AI 客户端(stdio)。
mcp_server.py。GITHUB_C2_MCP_TOOLS):
YES-DESTROY-ALL)。页面杀开关已从设置里拿掉,避免误触全灭;需要时走 MCP full 档。
owner/repo。双通道备用仓库会并进扫描列表。C2_AUTH,请求头口令)、Worker Path(PATH_SECRET,URL 第一段,不是密码)。空字段保存不覆盖;填单独一个 - 才清空。对照见 WORKER.md。C2_AUTH + PATH_SECRET、挂每小时清理、打开 workers.dev,并写回设置 / 生成器的三件套(第一次会把空的 GitHub 单通道提升为双通道,之后不再擅自改档)。权限见「凭据与权限」。不想把 Token 交给控制台时,按 WORKER.md 手动搭。.runtime.env(若有),浏览器弹出下载。压缩包含密钥,离线保存,不要提交仓库。空 Token、空密码保存时不会把已有机密覆盖掉。设置页的 GET 接口不把 Secret 全文回给浏览器。
[Channel] 通知;通知失败则回滚,避免控制台和 Agent 各听一边。| 项目 | 要求 |
|---|---|
| 控制台主机 | Linux(Debian / Ubuntu 最省事),Python 3,公网或实验室可达 |
| 生成 Agent | 同机需 Rust(deploy.sh 可代装 rustup + x86_64-unknown-linux-musl) |
| 可选 | gcc / binutils(链接与 strip)、upx(压缩)、Cloudflare 账号(Worker 中继) |
| 目标机 | 按编包架构:Linux musl / gnu,x86_64 或 aarch64 |
随包已带隧道服务端 stowaway_admin 和反弹 Shell 服务端 cliws,一般不必再下。
git clone https://github.com/Kxiandaoyan/github-C2.git
cd github-C2
bash deploy.sh
脚本会:
c2/(或旁路的压缩包)。c2/.runtime.env(权限 0600)和数据库。c2-controller 拉起控制台(无 systemd 则 5 秒自动拉起)。完成后终端会打印访问地址,形如:
http://<服务器IP>:<端口>/?login=<用户名>&pass=<密码>
用地址参数登录,页面本身不放登录表单。首次打开后把地址栏里的密码清掉即可。
bash deploy.sh --user admin --pass '你的密码' --c2-secret '通信密钥' --port 8080 --bind 0.0.0.0
| 参数 | 含义 |
|---|---|
--user / --pass | 控制台登录。重装时回车沿用旧值。 |
--c2-secret | 通信加密 Secret,编包与解密共用。 |
--port / --bind | 监听端口与网卡。默认 8080、0.0.0.0。 |
--noninteractive | 无人值守。密码可用环境变量 C2_WEB_PASS。 |
--skip-toolchain | 不装 Rust。生成器将无法编译。 |
--skip-always-poll | 浏览器闲置约 90 秒后停止后台扫描(默认一直扫)。 |
--no-systemd | 不用 systemd,改用脚本循环拉起。 |
无人值守若要顺便装编译链:C2_INSTALL_TOOLCHAIN=1 bash deploy.sh --noninteractive ...
也可以只编 GitHub、只编 Worker 或只编 Notion,与生成器档位一致即可。
在已部署的机器上再次执行 bash deploy.sh。回车沿用账号和 Secret。健康检查失败时自动回到升级前的代码和数据库快照。
分两层:卸掉控制台(你的服务器),以及卸掉目标机上的 Agent。
以 root 安装为例:
# 1. 停服务
systemctl stop c2-controller
systemctl disable c2-controller
rm -f /etc/systemd/system/c2-controller.service
systemctl daemon-reload
# 若当时是普通用户安装:
# systemctl --user stop c2-controller
# systemctl --user disable c2-controller
# rm -f ~/.config/systemd/user/c2-controller.service
# 2. 若没用 systemd
pkill -f 'run-controller.sh --respawn' || true
# 3. 可选:日志轮转
rm -f /etc/logrotate.d/c2-controller
# 4. 删目录(含数据库、虚拟环境、运行时凭据)
# 仓库若在 /opt/github-C2:
rm -rf /opt/github-C2
隧道服务端、cliws 随目录一起删除。Cloudflare 上的 Worker / D1 需到 Cloudflare Dashboard 里单独删,脚本不会动你的云账号。
在控制台打开该 Agent → 系统信息 或 升级 → 卸载 Agent。下发 uninstall 后,Agent 会:
无文件(memfd)模式本来就没有落地文件和持久化,目标机重启即无;仍可下发卸载以结束当前进程。
时间窗外的 Agent 也会检查紧急停机信号。需要一次清掉所有 Agent 时,使用 MCP full 档的 killswitch,并传入确认串 YES-DESTROY-ALL。
Loading reviews...
GitHub checked 189h ago - refresh overdue. Recently viewed repositories target hourly refresh.
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). Connect directly and complete any provider authentication separately; this is not platform-key access.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.