cyhfvg/brute
GitHub: cyhfvg/brute
一款基于 Rust 的多协议凭据测试与登录验证 CLI 工具,支持静态构建离线部署,专为授权安全评估场景设计。
Stars: 1 | Forks: 0
# brute
`brute` 是一个基于 Rust 的多协议凭据攻击与登录验证 CLI。
它专为授权的安全测试、实验环境验证和内部凭据审计而设计。
中文文档请参见:[README.zh-CN.md](README.zh-CN.md)。
## 重点
`brute` 专为贴合实际操作场景的使用而构建:
- 静态单文件 release 构建。
- 无需运行时依赖 OpenSSL/libssh2/native-tls 动态库。
- 适用于离线环境部署。
- 采用 NetExec 风格的协议优先命令布局。
- 清晰的终端输出,高亮显示成功的凭据。
- 本地 SQLite 凭据存储,支持工作区隔离。
预期的工作流程很简单:构建一次,将单个二进制文件复制到授权的测试环境中,无需安装额外的共享库即可运行。
## 支持的协议
已实现的模块:
- `ssh`
- `ftp`
- `mysql`
- `postgresql`
- `redis`
- `tomcat-manager` 别名:`tomcat`
已保留但尚未实现:
- `smb`
- `rdp`
- `winrm`
- `oracle`
- `http`
- `vnc`
查看 [docs/TODO.md](docs/TODO.md) 了解当前的协议待办列表。
## 安装说明
构建常规开发二进制文件:
```
cargo build
```
构建优化的 release 二进制文件:
```
cargo build --release
```
构建静态 Linux musl release:
```
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
```
静态二进制文件将生成在:
```
target/x86_64-unknown-linux-musl/release/brute
```
你可以使用以下命令验证静态链接:
```
ldd target/x86_64-unknown-linux-musl/release/brute
```
预期结果:
```
statically linked
```
## 快速开始
基本命令格式:
```
brute ... (-u ... -p ... | --id ) [options]
```
示例:
```
brute ssh 192.168.1.10 -u root admin -p 123456 password --port 22
brute ssh 192.168.5.5 -u admin -p 123456 -x 'id'
brute ssh targets.txt -u users.txt -p pass.txt --threads 32
brute ftp 10.10.10.20 -u users.txt -p pass.txt -x 'PWD'
brute mysql db.internal -u root -p weakpass --port 3306 -x 'show databases;'
brute postgresql 172.16.1.50 -u pg_users.txt -p pg_pass.txt -x 'select version();'
brute redis 192.168.10.5 -u '' -p redis_pass.txt -x 'INFO server'
brute tomcat 192.168.10.1 -u user.txt -p passwd.txt --port 8080 --path /manager/html
```
## 常用选项
- `TARGET`:目标 IP、主机名、FQDN 或包含目标的文件。允许指定多个目标。
- `-u, --username `:用户名值或包含用户名的文件。使用 `-u ''` 表示空用户名。
- `-p, --password `:密码值或包含密码的文件。使用 `-p ''` 表示空密码。
- `--id `:从当前工作区加载已保存的凭据。与 `-u/-p` 互斥。
- `--port `:覆盖协议默认端口。
- `--threads `:全局并发尝试次数。默认值:`16`;必须至少为 `1`。
- `--target-threads `:针对单个目标的最大并发尝试次数。默认值:`1`;必须至少为 `1`。
- `--retries `:针对临时传输错误的重试次数。默认值:`3`。
- `--timeout-ms `:单次尝试的超时时间(毫秒)。默认值:`5000`;必须至少为 `1`。
- `--continue-on-success`:在找到成功凭据后,继续对目标进行尝试。
- `--no-color`:禁用彩色输出。
`-u/-p` 与 `--id` 互斥。使用 `-u/-p` 进行常规喷射或暴力破解,使用 `--id` 复用已保存的凭据。
## 命令执行
以下模块支持使用 `-x, --execute ` 进行授权后命令执行:
- `ssh`:远程 shell 命令,例如 `-x 'id'`
- `ftp`:FTP 控制命令,例如 `-x 'PWD'`
- `mysql`:SQL 查询,例如 `-x 'show databases;'`
- `postgresql`:SQL 查询,例如 `-x 'select version();'`
- `redis`:Redis 命令,例如 `-x 'INFO server'`
示例:
```
brute ssh 192.168.5.5 -u admin -p 123456 -x 'id'
```
一旦认证成功,授权后命令的错误将单独报告,并且已验证的凭据仍会保存到当前工作区。
## 输出
输出使用固定的 NetExec 风格列:
```
SSH 192.168.5.5 22 192.168.5.5 [-] admin:123456
SSH 192.168.5.5 22 192.168.5.5 [+] root:toor Linux - Shell access!
SSH 192.168.5.5 22 192.168.5.5 [+] Executed command
SSH 192.168.5.5 22 192.168.5.5 uid=0(root) gid=0(root) groups=0(root)
```
当启用彩色输出时,成功的凭据对将被高亮显示。
## 凭据数据库
成功登录会自动保存到本地 SQLite 数据库:
```
~/.brute/brute.db
```
首次运行时,`brute` 会初始化数据库,创建默认工作区,并打印初始化信息。已存在的数据库将被静默打开。
保存的凭据字段包括:
- `id`
- `workspace`
- `protocol`
- `host`
- `port`
- `username`
- `password`
- `conn_url`
数据库值以明文形式存储。请根据你的授权规则和当地安全要求妥善保护 `~/.brute/brute.db`。
### 工作区
工作区按项目隔离已保存的凭据。默认工作区为 `default`。
```
brute workspace current
brute workspace new project-a
brute workspace use project-a
brute workspace delete project-a
brute workspace list
```
注意:
- `workspace new ` 创建工作区但不切换到该工作区。
- `workspace use ` 切换到已存在的工作区。
- `workspace delete ` 删除工作区及其已保存的凭据。
- `default` 无法被删除。
- 如果当前工作区被删除,`brute` 将回退到 `default`。
### 搜索已保存的凭据
```
brute creds list
brute creds list --workspace project-a
brute creds list --protocol ssh
brute creds list --host 192.168.5.5
brute creds list --protocol ssh --host 192.168.5.5
brute creds list --protocol ssh --conn-url
```
默认输出不包含 `conn_url`。
使用 `--conn-url` 时,输出将简化为仅包含:
```
ID PROTOCOL CONN_URL
1 ssh ssh://admin:123456@192.168.5.5:22
```
这避免了重复显示主机、端口、用户名和密码,因为它们已经编码在 URL 中。
### 复用已保存的凭据
使用 `--id` 从当前工作区加载已保存的凭据:
```
brute ssh 192.168.1.10 --id 3
```
`--id` 不强制要求协议匹配。这是有意设计的,以便操作人员可以测试密码复用和跨协议的凭据喷射。
## Tomcat Manager
`tomcat-manager` 模块是专门用于 Tomcat Manager 的 HTTP Basic Auth 模块。它支持将 `tomcat` 作为别名。
```
brute tomcat 192.168.10.1 -u user.txt -p passwd.txt --port 8080 --path /manager/html
```
结果处理:
- `200 OK`:认证成功
- `403 Forbidden`:凭据有效,但该用户可能缺少 `manager-*` 角色
- `401 Unauthorized`:认证失败
## 项目布局
```
src/
app.rs # command orchestration
cli.rs # clap command definitions
credentials.rs # username/password loading and expansion
database.rs # SQLite workspace and credential storage
error.rs # error types
output.rs # console rendering
targets.rs # target and target-file loading
protocol/
mod.rs # protocol abstraction
ssh.rs
ftp.rs
mysql.rs
postgresql.rs
redis.rs
tomcat.rs
stub.rs # reserved protocol placeholder
```
## 开发说明
格式化:
```
cargo fmt
```
检查:
```
cargo check
```
测试:
```
cargo test
```
本地 release 构建:
```
scripts/local_build.sh --release
```
在提交前运行 CI 所需的相同检查:
```
scripts/pre_commit_check.sh
```
使用 `scripts/pre_commit_check.sh --fix` 可以在运行检查之前应用 Rust 格式化。
## 安全与法律声明
仅在以下情况下使用此工具:
- 明确授权的安全评估。
- 实验室和培训环境。
- 对你拥有或被允许测试的资产进行凭据审计。
请勿对未经授权的目标使用 `brute`。你将对法律、合规和操作层面的后果承担责任。
标签:Rust, 可视化界面, 密码爆破, 网络流量审计, 通知系统