# beacon_Http模拟 **Repository Path**: cutecuteyu/beacon-http-simulation ## Basic Information - **Project Name**: beacon_Http模拟 - **Description**: 模拟实现cs的http-beacon通信 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-28 - **Last Updated**: 2025-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 远程命令执行系统 一个用Go语言编写的简单远程命令执行(C2)系统,包含服务端和客户端两部分。 ## 项目概述 本项目实现了一个客户端-服务端架构的远程命令执行系统: - **服务端**:接收用户输入的命令,将其存储在HTTP路由中,并接收和显示客户端返回的命令执行结果 - **客户端**:每10秒轮询一次服务端获取命令,执行后将结果发送回服务端 ## 功能特性 ### 服务端功能 - 接收用户在终端输入的命令 - 通过 HTTP `/cmd/` 路由向客户端提供命令 - 通过 HTTP `/result/` 路由接收客户端返回的执行结果 - 命令过期机制:超过15秒未更新的命令会自动清空(每5秒检查一次) - 新命令会自动覆盖旧命令 ### 客户端功能 - 每10秒向服务端发送GET请求获取命令 - 使用系统shell执行命令(支持Windows和Unix/Linux) - 捕获命令的标准输出和标准错误 - 将执行结果通过POST请求发送回服务端 - 无命令时不执行任何操作 ## 项目结构 ``` NEWTEST/ ├── server/ │ ├── main.go # 服务端代码 │ └── go.mod ├── client/ │ ├── main.go # 客户端代码 │ └── go.mod └── README.md ``` ## 使用方法 ### 1. 启动服务端 ```bash cd server go run main.go ``` 服务端会启动在 `http://localhost:3000`,你将看到提示符 `>` 等待输入命令。 ### 2. 启动客户端 在新的终端窗口中: ```bash cd client go run main.go ``` 客户端会开始每10秒轮询一次服务端。 ### 3. 发送命令 在服务端终端输入命令,例如: ``` > dir ``` 或 ``` > ls -la ``` 客户端会获取命令并执行,结果会显示在服务端终端中。 ## API 接口 ### GET /cmd/ 客户端通过此接口获取待执行的命令。 **请求方法**:GET **响应**:纯文本格式的命令字符串 ### POST /result/ 客户端通过此接口发送命令执行结果。 **请求方法**:POST **请求体**:纯文本格式的命令执行结果 ## 工作流程 ``` ┌─────────┐ ┌─────────┐ │ 服务端 │ │ 客户端 │ └────┬────┘ └────┬────┘ │ │ │ 1. 用户输入命令 │ │ (如: dir) │ │ │ │ 2. 命令存入 /cmd/ 路由 │ │ │ │ │ 3. 每10秒GET /cmd/ │ │ 获取命令 │ │ │ │ 4. 执行命令 │ │ (cmd /c dir) │ │ │ 5. POST /result/ ←──────────│ 发送执行结果 │ │ │ 6. 显示结果 │ │ │ ``` ## 配置说明 ### 服务端配置 | 配置项 | 值 | 说明 | |--------|-----|------| | 监听地址 | `:3000` | HTTP服务器监听端口 | | 命令检查间隔 | 5秒 | 检查命令是否过期的时间间隔 | | 命令过期时间 | 15秒 | 命令超过此时间未更新则自动清空 | ### 客户端配置 | 配置项 | 值 | 说明 | |--------|-----|------| | 服务端地址 | `http://localhost:3000` | 服务端URL | | 轮询间隔 | 10秒 | 获取命令的时间间隔 | | 命令URL | `/cmd/` | 获取命令的端点 | | 结果URL | `/result/` | 发送结果的端点 | ## 代码说明 ### 服务端 (server/main.go) #### 全局变量 - `currentCmd`: 当前待执行的命令 - `cmdMutex`: 读写锁,保护并发访问 - `lastCmdSet`: 记录命令最后设置的时间 #### 主要函数 - `handleCmd()`: 处理客户端获取命令的GET请求 - `handleResult()`: 处理客户端发送结果的POST请求 - `handleUserInput()`: 处理用户在终端的输入 - `checkCommandExpiry()`: 定期检查命令是否过期 ### 客户端 (client/main.go) #### 主要函数 - `pollAndExecute()`: 轮询服务端获取命令并执行 - `executeCommand()`: 执行系统命令(支持跨平台) - `postResult()`: 将执行结果发送回服务端 - `trimWhitespace()`: 去除字符串首尾空白 - `isWindows()`: 检测操作系统类型 ## 跨平台支持 客户端支持Windows和Unix/Linux系统: - **Windows**: 使用 `cmd /c` 执行命令 - **Unix/Linux**: 使用 `sh -c` 执行命令 ## 注意事项 1. **命令过期机制**:命令会在15秒后自动过期,确保用户输入的是最新命令 2. **命令覆盖**:新输入的命令会覆盖旧命令 3. **无命令时不执行**:如果服务端没有命令,客户端不会执行任何操作 4. **并发安全**:服务端使用读写锁保护共享数据 ## 安全警告 本项目仅供学习和研究使用。在实际环境中使用时,请注意: 1. 添加身份验证机制 2. 使用加密通信(HTTPS/TLS) 3. 限制可执行的命令范围 4. 添加访问日志和审计功能 ## 许可证 本项目仅供学习和研究使用。