jolovicdev/go-msf
GitHub: jolovicdev/go-msf
用 Go 语言编写的 Metasploit RPC 客户端库,提供类型安全的 API 用于自动化渗透测试操作。
Stars: 0 | Forks: 0
# go-msf
[](https://pkg.go.dev/github.com/jolovicdev/go-msf)
[](https://goreportcard.com/report/github.com/jolovicdev/go-msf)
[](https://opensource.org/licenses/MIT)
[](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工具, 安全编程, 并发安全, 数据展示, 日志审计, 框架库, 类型安全, 红队, 网络安全, 隐私保护