jolovicdev/go-msf

GitHub: jolovicdev/go-msf

用 Go 语言编写的 Metasploit RPC 客户端库,提供类型安全的 API 用于自动化渗透测试操作。

Stars: 0 | Forks: 0

# go-msf [![Go 参考文档](https://pkg.go.dev/badge/github.com/jolovicdev/go-msf.svg)](https://pkg.go.dev/github.com/jolovicdev/go-msf) [![Go 报告卡](https://goreportcard.com/badge/github.com/jolovicdev/go-msf)](https://goreportcard.com/report/github.com/jolovicdev/go-msf) [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![稳定版本](https://img.shields.io/badge/version-v1.0.0-blue.svg)](https://github.com/jolovicdev/go-msf/releases) `go-msf` 是一个现代化的、符合 Go 语言习惯的库,用于与 [Metasploit 的 RPC API](https://docs.metasploit.com/docs/using-metasploit/advanced/RPC/) 进行交互。使用类型安全的 Go 代码构建安全自动化工具、CI/CD 安全管道和自定义漏洞利用框架。 ## 功能特性 - **完整的 RPC 覆盖** — Core、modules、consoles、sessions、jobs、plugins、auth 和数据库操作 - **类型安全的 API** — 具有验证功能的强类型请求和响应 - **Context 支持** — 完整的 `context.Context` 集成,支持超时和取消 - **错误处理** — 结构化的错误类型,用于 RPC 失败、超时和验证错误 - **并发安全** — 专为 goroutine 间的安全使用而设计 - **零外部依赖** — 最少的外部依赖(仅使用 msgpack 进行 RPC 编码) ## 安装 ``` go get github.com/jolovicdev/go-msf ``` 需要 Go 1.21 或更高版本。 ## 版本 **稳定版 v1.0.0** — API 已锁定。根据 [语义化版本控制](https://semver.org/),仅进行向后兼容的添加和修补。 ## 快速入门 ``` package main import ( "context" "fmt" "log" gomsf "github.com/jolovicdev/go-msf" ) func main() { ctx := context.Background() client, err := gomsf.NewClient( "yourpassword", gomsf.WithHost("127.0.0.1"), gomsf.WithPort(55553), gomsf.WithSSL(false), ) if err != nil { log.Fatal(err) } defer client.Logout(ctx) version, err := client.Core().Version(ctx) if err != nil { log.Fatal(err) } fmt.Printf("Metasploit v%s connected\n", version.Version) } ``` ## 前置条件 ### 启动 Metasploit RPC 使用 `msfrpcd`(推荐用于生产环境): ``` msfrpcd -P yourpassword -S -f ``` 使用显式绑定选项: ``` msfrpcd -P yourpassword -a 127.0.0.1 -p 55553 -S -f ``` 从 `msfconsole`(用于开发): ``` load msgrpc Pass=yourpassword ``` ## API 文档 ### 客户端配置 ``` // Password authentication client, err := gomsf.NewClient(password, options...) // Token authentication (if you already have a token) client, err := gomsf.NewClientWithToken(token, options...) ``` **选项:** | 选项 | 默认值 | 描述 | |--------|---------|-------------| | `WithHost(host)` | `127.0.0.1` | RPC 服务器主机 | | `WithPort(port)` | `55553` | RPC 服务器端口 | | `WithURI(uri)` | `/api/` | RPC 端点路径 | | `WithSSL(enabled)` | `true` | 使用 HTTPS(使用 `false` 禁用) | | `WithUsername(username)` | `msf` | RPC 用户名 | | `WithHTTPClient(client)` | `http.DefaultClient` | 自定义 HTTP 客户端 | | `WithConsolePollInterval(d)` | `500ms` | 控制台轮询间隔 | | `WithSessionPollInterval(d)` | `1s` | 会话轮询间隔 | ### 核心操作 ``` version, err := client.Core().Version(ctx) stats, err := client.Core().ModuleStats(ctx) threads, err := client.Core().ThreadList(ctx) err = client.Core().ReloadModules(ctx) ``` ### 模块管理 ``` // List available modules exploits, err := client.Modules().Exploits(ctx) payloads, err := client.Modules().Payloads(ctx) aux, err := client.Modules().Auxiliary(ctx) // Use a module mod, err := client.Modules().Use(ctx, gomsf.ExploitModuleType, "windows/smb/ms08_067_netapi") if err != nil { return err } // Set options if err := mod.SetOption("RHOSTS", "192.168.1.10"); err != nil { return err } // Execute result, err := mod.Execute(ctx) ``` ### 控制台操作 ``` console, err := client.Consoles().Create(ctx) if err != nil { return err } defer client.Consoles().Destroy(ctx, console.ID) con, err := client.Consoles().GetConsole(ctx, console.ID) if err != nil { return err } output, err := con.RunCommand(ctx, "show exploits", 10*time.Second) ``` ### 会话管理 ``` sessions, err := client.Sessions().List(ctx) session, err := client.Sessions().Get(ctx, "1") err = client.Sessions().Stop(ctx, "1") // Meterpreter interaction meterpreter := gomsf.NewMeterpreterSession(client, "1") output, err := meterpreter.RunWithOutput(ctx, "getuid", []string{">"}, 30*time.Second) ``` ### 作业 ``` jobs, err := client.Jobs().List(ctx) info, err := client.Jobs().Info(ctx, "0") err = client.Jobs().Stop(ctx, "0") ``` ### 插件 ``` plugins, err := client.Plugins().List(ctx) err = client.Plugins().Load(ctx, "plugin_name") err = client.Plugins().Unload(ctx, "plugin_name") ``` ### 数据库 ``` status, err := client.DB().Status(ctx) driver, err := client.DB().Driver(ctx) workspace, err := client.DB().CurrentWorkspace(ctx) workspaces, err := client.DB().Workspaces().List(ctx) ``` ## 错误处理 该库提供了结构化的错误类型,以便进行可靠的错误处理: | 错误 | 描述 | |-------|-------------| | `ErrNotAuthenticated` | 调用需要身份验证但客户端没有 token | | `ErrUnexpectedResponse` | Metasploit 返回了格式错误/意外的数据 | | `ErrCommandTimeout` | 控制台或会话命令超时 | | `ErrSessionNotFound` | 会话 ID 不存在 | | `ErrConsoleNotFound` | 控制台 ID 不存在 | | `ErrInvalidOption` | 无效的模块选项或枚举值 | | `ErrJobNotFound` | 作业 ID 不存在 | | `ErrRPC` | Metasploit 返回了结构化的 RPC 错误 | 处理 RPC 错误: ``` var rpcErr *gomsf.RPCError if errors.Is(err, gomsf.ErrRPC) && errors.As(err, &rpcErr) { fmt.Printf("RPC Error: %s - %s\n", rpcErr.Class, rpcErr.Message) } ``` ## 测试 运行单元测试: ``` go test ./... ``` 运行集成测试(需要运行 Metasploit RPC): ``` export RUN_MSF_INTEGRATION=1 export MSF_PASSWORD=testpass123 export MSF_USERNAME=msf export MSF_HOST=127.0.0.1 export MSF_PORT=55553 export MSF_SSL=false go test -v ./... ``` ## 安全注意事项 - **SSL/TLS**:该库默认启用 SSL。仅在可信的开发环境中使用 `WithSSL(false)`。 - **自签名证书**:使用自签名证书时,通过 `WithHTTPClient()` 提供具有适当 TLS 配置的自定义 `*http.Client`。 - **凭据**:永远不要硬编码凭据。使用环境变量或安全的密钥管理。 ## 示例 完整的可工作示例请参阅 [examples](https://github.com/jolovicdev/go-msf/tree/main/examples) 目录。 ## 贡献 欢迎贡献!请随时提交 Pull Request。对于重大更改,请先打开 issue 讨论您想要更改的内容。 1. Fork 该仓库 2. 创建您的功能分支(`git checkout -b feature/amazing-feature`) 3. 提交您的更改(`git commit -m 'Add amazing feature'`) 4. 推送到分支(`git push origin feature/amazing-feature`) 5. 打开 Pull Request ## 相关项目 - [Metasploit Framework](https://github.com/rapid7/metasploit-framework) — 世界上最常用的渗透测试框架 - [pymetasploit3](https://github.com/DanMcInerney/pymetasploit3) — 用于 Metasploit RPC 的 Python3 库 ## 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE)。 版权所有 (c) 2026 Dušan Jolović **关键词**:metasploit golang、metasploit rpc 客户端、go 渗透测试、安全自动化、红队工具、metasploit api、漏洞利用框架 go、安全研究工具、msfrpcd 客户端、golang 攻击性安全
标签:API客户端, CI/CD安全, EVTX分析, Go, Golang, Llama, msgpack, pentesting, Prisma Cloud, RPC, Ruby工具, 安全编程, 并发安全, 数据展示, 日志审计, 框架库, 类型安全, 红队, 网络安全, 隐私保护