文章总结: 本文记录利用ClaudeAI开发C2框架的过程。作者通过定义B/S架构规范,采用Vue3、.NET8及Golang技术栈,实现了监听器策略(含流量伪装与CDN支持)及主机管理等核心功能。文章表明AI显著提升了开发效率,限制已由技术转为人的创意与设计能力。 综合评分: 85 文章分类: 红队,安全工具,AI安全,实战经验
AI练习生之C2开发日记(一)
原创
黑晶
黑晶
2025年12月1日 20:57 浙江
AI练习生之C2开发日记(一)
说实话自从染上AI瘾后,人是越来越懒了,能videcoding的,自己绝不动手写了,以前都是手搓C2,正好试试让AI来梭一个c2看看,而且以前写的c2都是c/s这种架构的,因为对前端不是很会,搞出来的ui太丑,所以这次正好让ai来实现。
本次秉持着自己尽量不写一行代码的原则,去让ai完成所有的工作,我们只给出整体的需求以及架构规划设计
给AI提需求
我主要用claude code sonnect4.5进行开发,其实大部分模型基本都用过,速度快的效果差,效果好的速度太慢,要么就是又慢又差,综合看下来cc是最好的选择。
每个用claude开发的项目,我建议你都应该写一个claude.md,这个东西可以理解为在当前项目上下文中,你给claude制定的执行框架和标准,同时也可以作为claude在这个项目的记忆载体。
这个文件其实挺重要的,尤其是你的项目比较复杂的时候,不仅能提高ai的效率,避免每次都去分析一个项目,而且还能保证后续项目开发的一致性。
我这里的claude.md是这样写的:
# CLAUDE.md
## 项目概览
本项目是一个基于B/S架构的主机远程运维系统,可供管理员通过统一管理界面对远程主机进行运维管理。
## 技术选型
- 前端:使用Vue3作为主要框架,以及Ant Design Vue UI 组件库。
- 后段:使用asp.net core webapi,语言版本为.net8,支持跨平台部署
- agent: 使用golang为编程语言,支持跨平台部署
## 编码规范
- 避免亢长的代码文件,注意功能代码解耦和模块化,合理运用设计模式,保证整体框架的可扩展性。
- 清晰简洁的注释。
- 仅在调试模式下输出debug信息。
- 良好的异常处理机制,杜绝因程序异常无接管导致的灾难性崩溃。
- 编写的代码要考虑性能问题,以及并发环境下的安全问题。
## 行动红线
- 禁止删除文件,删除目录等危险操作
- 禁止对已有功能进行大范围更改,如必要情况需要通知用户做决定。
- 禁止私自修改UI样式代码
-
## 技术细节
- 具体的项目细节以及代码编写具体要求参考 @README.md
README.md里面你就可以定义一些具体的技术细节了,例如:
### 通信协议
- server与agent应该支持http(s),websocket通信协议。
- 通信过程应该使用xxxxx算法进行加解密。
- 支持自定义请求,如添加请求头,支持响应数据嵌入自定义模板。
......
### 命令控制
- 远程agent可以支持通过简单的命令输入输出和交互式终端执行命令两种方式。
- 命令执行应支持跨平台,主要是windows,linux,darwin
......
### 前端用户界面
- UI风格以现代化,扁平化,清爽美观为主。
- VUE组件应注意解耦,避免出现前端大文件影响加载效率。
......
但是这里也不至于写的太细,比如具体到用什么API啊之类的。
然后AI给了一个大概的架构:
┌─────────────────────────────────────────────────────────────┐
│ 用户浏览器 │
│ (Vue3 + Ant Design Vue) │
└──────────────────────┬──────────────────────────────────────┘
│ HTTPS/WSS
│ (JWT认证)
┌──────────────────────▼──────────────────────────────────────┐
│ Server后端 │
│ (.NET 8 Web API + SignalR) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ 认证服务 │ │ 监听策略管理 │ │ Agent管理服务 │ │
│ │ (JWT Token) │ │ (动态监听器) │ │ (心跳/状态) │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ 命令队列 │ │ 数据伪装中间件 │ │ Shell代理服务 │ │
│ │ (异步下发) │ │ (流量混淆) │ │ (WebSocket桥) │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
│ │
│ SQLite数据库(Agent信息/监听策略) │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP/HTTPS/WebSocket/WSS
│ (加密+伪装通信)
┌──────────────────────▼──────────────────────────────────────┐
│ Agent客户端 │
│ (Golang 跨平台) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ 通信模块 │ │ 命令执行框架 │ │ 会话管理器 │ │
│ │ (多协议) │ │ (Shell/File) │ │ (PTY终端) │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ TLV编码 │ │ 加密/解密 │ │ 文件管理 │ │
│ │ (数据格式) │ │ (AES/Base64) │ │ (上传/下载) │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
│ │
│ 目标主机(Windows/Linux/macOS) │
└─────────────────────────────────────────────────────────────┘
接下来就开始让AI手搓代码了:
登录界面
登录界面还是要有的,我这里让AI去设计了一个左右布局的样式,左边是用户的登录信息区域,右边是一个图片区域:
风格还是蛮符合的,因为我给的项目名是blackcat。
至于密码的验证也很简单,后端提供了一个config.json配置文件,里面会有用户名密码字段,认证的时候去读取校验就行,认证通过,会生成对应的jwttoken返回前端,因为后续的操作都需要鉴权。
系统主界面
主界面的布局采用了菜单加功能区的布局方式,也就是左边是操作菜单,右边根据不同的菜单项展示不同的功能区,这个地方你让AI实现的话直接告诉他个大概就好了,基本现代很多管理后台都是这个布局,实现的效果也是大差不差的。
前期实现的功能比较简单,一个仪表盘后续可以规划用来查看整体的情况,比如一共上线了多少机器等等,我这里还没做,因为很多指标可能需要你把其他功能做的差不多,才好指定。
监听器实现
因为之前引导AI的缘故,所以这里AI生成的时候,理解是监听策略,说白了就是对agent的一些管控方式,其实在C2里面就是listener。
可以看看这里的一些配置:
- 1. 这里AI首先配置了一个基本的策略名和策略备注功能,主要供创建人写一些额外信息,比如使用者可以备注,这个监听器是用来做什么的,或者备注只用于哪个项目等等。
- 2. 然后是高级配置里面的一些通信相关的东西了。
- • 监听端口。
- • 心跳时间:用来控制agent的心跳间隔。
- • 请求地址:这个就是agent实际请求的地方,这里AI创建的是可以支持多个IP:PORT这种格式的,比如你是云服务器或者用了什么CDN之类的,这里可以填很多个,这样agent可以去轮询请求,起到一定的防封效果。
- • 加密key以及magic字符串都是对流量进行校验,只获取agent来的流量。
- • 请求URL:这个主要是用在http协议下,支持多个url,比如第一次请求http://xxxxx/1.php,第二次可能就是http://xxxxx/2.jsp,完全自定义请求地址。
- • 自定义host头:为了支持CDN,域前置。
- • 自定义请求头:这个都是通过用户的自定义,来实现对流量的伪装。
- • 自定义响应头也是类似,这个地方可以后面的数据伪装模板配合。
- • 数据伪装模板:这个主要用于server给agent返回响应的时候,比如下发命令,通过这个数据伪装模板,可以把响应嵌入到模板中特定的位置,这里通过
{***content***}字符串进行定位,比如你可以随便扒一个网站的html代码,然后把标记放在你想让数据嵌入的地方,再配合前面的响应头,可以实现一个很好的伪装。 - • 404页面,前面不是说会通过加密和magicstring匹配特定的流量么,假如没匹配到的情况下,就会返回一个你给定的404页面,和前面的配合,你可以几乎完整的模拟一个网站的流量。
- • 初始化脚本:这个就是用于agent初始运行后需要执行的功能,可以执行bash或者python脚本。
上面的这些内容其实不是写死在agent或者通过类似CS那种patch来实现的,AI这里的给的方案是,给每个listener创建一个配置下发的URL和临时的加密key,然后agent里面只有这个url和key,然后会这个配置下发的url请求配置以及后续加解密用的新key,这个还是蛮有意思的,也是借鉴了现在的EDR等系统的思想,运行后初始化会有一个请求配置的过程。
listener管理界面的UI:
关于心跳的设计,其实这里的实现其实都差不多,利用TLV实现数据封装,实现定义好统一字段,服务端接收到agent数据后进行解析即可。
// tlv.go
// OpCode定义(与服务端保持一致)
const (
OpCodeHostname byte = 0 // 主机名
OpCodeUsername byte = 1 // 用户名
OpCodeHostIP byte = 2 // 主机IP
OpCodeSystemVersion byte = 3 // 系统版本
OpCodePlatform byte = 4 // 操作系统平台
OpCodeArchitecture byte = 5 // 进程架构
OpCodeProcessName byte = 6 // 进程名
OpCodeUserPrivilege byte = 7 // 用户权限
OpCodeNetworkIPs byte = 8 // 网卡IP列表
OpCodeAgentID byte = 9 // Agent UUID
OpCodeTimestamp byte = 10 // 时间戳
)
// 编码单个TLV字段
func EncodeTLV(opcode byte, value []byte) []byte {
buf := bytes.NewBuffer(nil)
// Type (1 byte)
buf.WriteByte(opcode)
// Length (2 bytes, Big Endian)
binary.Write(buf, binary.BigEndian, uint16(len(value)))
// Value
buf.Write(value)
return buf.Bytes()
}
// 编码完整的Agent信息
func EncodeAgentInfo(info *types.SystemInfo, agentID string, timestamp int64) []byte {
buf := bytes.NewBuffer(nil)
// 按顺序编码各个字段
buf.Write(EncodeStringTLV(OpCodeAgentID, agentID))
buf.Write(EncodeStringTLV(OpCodeHostname, info.Hostname))
buf.Write(EncodeStringTLV(OpCodeUsername, info.Username))
// ... 更多字段
// 编码时间戳(8字节int64)
timestampBuf := new(bytes.Buffer)
binary.Write(timestampBuf, binary.BigEndian, timestamp)
buf.Write(EncodeTLV(OpCodeTimestamp, timestampBuf.Bytes()))
return buf.Bytes()
}
[Type][Length][Value][Type][Length][Value]...
1B 2B nB 1B 2B nB
示例:编码 Hostname="WIN10-PC"
09 00 08 57 49 4E 31 30 2D 50 43
│ │ │ └─────────┬────────────┘
│ │ │ Value (8 bytes)
│ │ └─ Length = 8
│ └─ OpCode = 0 (Hostname)
主机管理
这个界面的话,AI也是基于datagrid数据表格来实现的,列头作为数据标识,然后也支持分页,同时可以对每个机器进行备注标识,这里其实还可以扩展一下分组功能,用来区分不同的项目。
之前跟AI说过要支持并发,所以这里AI说理论上可以支持5w+的主机,也用了表格虚拟化等一些技术,反正我也没测过具体能不能扛这么多的机器,但是日常使用肯定是没问题的。
总结
至少截止到监听器创建,心跳设计以及机器上线,都是没啥问题的,然后AI设计的UI其实也是可以的,如我让我来搞,我肯定短时间搞不出来,因为我也不是很会前端,当前的这些功能和AI配合一共大概一天左右时间搞定,总体是比较满意的。
最终实际的效果,还是取决于你给AI的引导,有了AI之后技术不在是限制,限制的反而是人的创意和想象。
推荐阅读
- • 假如让AI来设计C2会怎么样
- • 还在手搓免杀?时代变了
- • 红队研发:C2的心跳设计
这是一个纯粹,开放,前沿的技术交流社区,成员主要有互联网大厂安全部门任职的成员,乙方红队专家,以及正在学习入门的小白等,目前主题主要以红队研发为主(有经验的都知道是什么意思),以及其他涉及到红队进攻侵入性技术,如果你想学习技术,认识不同的人或者寻求一个机会之类的,可以来看看👇👇👇****
欢迎加入交流圈
扫码获取更多精彩
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:黑晶 黑晶《AI练习生之C2开发日记(一)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论