Py学习  »  Git

红队攻防 | GitHub C2 —— MCP接入AI、全自动渗透必备

李白你好 • 2 周前 • 66 次点击  

GitHub C2介绍

GitHub C2授权实验室使用的红队指挥平台。浏览器里管理目标机上的 Agent:发命令、交互 Shell、传文件、穿隧道、扫描、采集、编包、升级。通信默认走你自己的 Cloudflare Worker 中继,GitHub Issue 作为备用通道;主路断了自动切备用,备用稳定后再切回来。

网页控制台 + Rust Agent。Cloudflare Worker 主通道,GitHub Issue 备用。MCP接入AI,全自动渗透必备。

产品定位

GitHub C2 由三部分组成:

组件
作用
Web 控制台
Flask 网页后台。侧栏选 Agent,顶栏切换功能。自带中 / 英语言包。
Agent
Rust 编写,部署在目标机。轮询取令、加密回传、可持久化与伪装。
通道
把指令和回显搬过去。主通道是 Cloudflare Worker + D1;备用是 GitHub Issue;也可只用 Notion 或只用其中一条。

控制台和 Agent 之间的载荷一律是 AES-256-GCM 信封。中继数据库里不存主机明文身份。一台机器若同时挂了 Worker 和 GitHub,侧栏合成一条,不会当成两台。

亮点

和其他「只把 GitHub 当信道」的工具比,这几条是真正不一样的:

  • 自己的中继,GitHub 只当备胎。 一键在 Cloudflare 上部署 Worker + D1;主路断了自动切 GitHub,好了自动切回,终端有 [Channel] 通知。双通道在侧栏仍是一台,不是两台 Agent。
  • 启动自动提权。 还不是 root 时按顺序试免密 sudo、已有 SUID 解释器、未打补丁的 pkexec、特权容器逃逸;成功则  exec 替换自身,不留双进程。无文件模式整条跳过,避免落盘。
  • 进程级隐藏,不装内核模块。 按发行版伪装成系统守护进程,藏路径、藏 /proc、对齐 SELinux/AppArmor,写文件还复原时间戳。
  • 持久化多路 + 自愈。 systemd / cron / rc.local / profile / 用户服务一起上;有人清掉一条,大约每 6 小时自己补回来。
  • 时间窗。 只在你规定的时段说话;窗外面板显示安静,不是掉线。边界每天抖动,整群不会同一秒苏醒。紧急停机在窗外照样生效。
  • 轮询全自动识别冷热。 编包只填一个基数。有人在操作就加快,闲着就自己放慢,省额度、也少指纹。
  • Token 失效不用重新编包。 填 Backup URL,Agent 自己去拉一份新 JSON 配置并热重启。
  • 目标机少落文件。 反弹 Shell、隧道节点都编在 Agent 里,纯内存;还可以 memfd 无文件上线。
  • 载荷全程加密,控制台自带 中 / 英语言包(右上角 EN / 中文)。

隐蔽、提权、性能与稳定性

自动提权

Linux 上线后若当前不是 root,会在守护化之前自动试(能提才提,提不了照常以当前权限跑):

  1. 免密 sudo: sudo -n 能过就直接以 root 再起自己;否则扫 sudo -l 里带 NOPASSWD 的解释器。
  2. 已有 SUID 解释器:目标机上已经是 root SUID 的常见解释器。
  3. 未打补丁的 pkexec(CVE-2021-4034,仅 x86_64)。
  4. 特权容器:检测到 privileged / CAP_SYS_ADMIN 时尝试 cgroup v1 逃到宿主机。

成功则 exec 替换当前进程,不会并排出两个 Agent。环境变量闸门防止提权成功后死循环。memfd 无文件模式整条跳过(再 exec 自己会破无文件约定,还会在日志里留下失败痕迹)。

隐蔽

全部是 进程级,不加载内核模块,不跟发行版内核版本绑死:

  • 进程名 / 线程名:comm 按发行版自动扮 polkitd / accounts-daemon / systemd-udevd 等;工作线程扮 kworker。编包也可手填伪装名。
  • 落地路径:root 优先藏进 /usr/lib/systemd/… 这类看起来像系统守护进程的位置;普通用户走  ~/.local/bin/。写之前用 access(2) 探权限,不先建再删、少触发文件监控。
  • 藏 /proc:把 /proc/ bind-mount 成 PID 1 的视图,常规 ps / 看 cwd、fd 不容易对上。
  • SELinux / AppArmor:chcon 对齐 bin_t / 单元文件上下文,减少「来历不明文件」刷审计。
  • 时间戳:二进制和状态文件的 mtime 对齐系统文件;每次写入后把目录 mtime 复原( stealth_write)。
  • 流量外形:启动抖动、轮询 ±20% 抖动、时间窗边界按 Agent/按天错开;访问 GitHub 时轮换常见客户端 User-Agent。
  • 崩溃不吐密:关掉 coredump,避免 Token / Secret 落到磁盘。
  • Guards:主机名、用户、标记文件、最低内存对不上就静默退出,少在沙箱 / 蜜罐里暴露行为。

性能

  • Agent 是 Rust,推荐 x86_64-unknown-linux-musl静态链接,目标机不用装运行库。
  • 主通道走自己的 Worker HTTPS,不跟 GitHub 评论抢限额、也不等 Issue 刷新;GitHub 只在主路挂了才上场。
  • 反弹 Shell 是真 PTY + WebSocket,不走 30 秒命令轮询。
  • 轮询全自动冷热:操作时最快 15 秒,闲置最长 5 分钟,省 API、也少固定节拍指纹。
  • 大文件走 sendit 中转,上传按块切,不把评论通道撑爆。
  • 控制台本机已带隧道服务端、反弹 Shell 服务端,不必再下一堆配套马。

稳定性

  • 双通道:切备用失败会回滚,避免控制台和 Agent 各听一边。
  • 中继 D1 被重建、自增 id 归零时,水位自动复位,不会整群变聋。
  • 同一条命令写到兄弟通道,Agent 去重,切通道不丢令。
  • 持久化多策略;大约  每 6 小时自检修补,被清一条还能长回来。
  • 守护化用 spawn + exec,不用 fork():老 CentOS 上 Tokio 多线程 fork 会锁死。
  • 错误按类型退避(鉴权 / 限流 / 网络),再加抖动,不会固定间隔砸接口。
  • 热升级保留 agent id 和通道身份;失败则旧进程继续跑。
  • 设置页空字段不覆盖已有密钥;GET 不回明文 Secret。

痛点对照

常见痛点
这里怎么处理
只用 GitHub:慢、限额紧、Issue 评论很脏
Worker 做主通道
,GitHub 只当备胎
双通道一上线变成两台马,对不上
侧栏合成一台
,两个徽章
Token 一过期,整群作废,只能重编重下
Backup URL
 拉新 JSON,热重启换票
到点不说话,面板一片「离线」,分不清死没死
窗外显示 安静,不是掉线
中继库一重建,命令水位错位,整群收不到令
水位失效自动复位
切通道时控制和马各听一边
[Channel]
 通知失败则 回滚
蓝队清掉一个开机项就没了
多策略持久化 + 每 6 小时自愈
普通用户权限不够,很多功能施展不开
启动自动提权
(环境允许才成功)
还要另下 Shell / 隧道二进制,目标机一堆文件
编进 Agent,内存跑
;还可 memfd 无文件
保存设置时空字段把密钥冲掉
空不覆盖
;浏览器拿不到全文 Secret
整群同一秒上线,流量像心跳
启动抖动 + 时间窗按天按台错开 + 轮询抖动
大文件走评论通道传不了 / 传爆
sendit 中转 + 分片上传

界面

侧栏列出已上线的 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 Token(只用于部署中继)

打开 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(编进 Agent,用于上线)

GitHub Token 会随二进制落到目标机。权限过大等于把仓库钥匙交给任何拿到样本的人。请用 Fine-grained personal access token,只开一个 私有仓库:

  1. 只选你建好的隐私仓库(Only select repositories)。
  2. Repository permissions:
  • Issues → Read and write(读命令、写回显评论)
  • Metadata → Read-only(系统必选,不要再加 Contents / Administration / Actions)

图中红字标注即:选择你事先建好的隐私仓库。

不要给 repo 经典全仓库权限,不要给组织管理员、不要给多个仓库。控制台设置里用于扫描的 Token 也按同一最小权限配置。

工具下载

https://github.com/Kxiandaoyan/github-C2

网络安全情报攻防站

www.libaisec.com

综合性的技术交流与资源共享社区

专注于红蓝对抗、攻防渗透、威胁情报、数据泄露

👇 点击阅读原文,访问网络安全情报攻防站

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/200902