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, 可视化界面, 密码爆破, 网络流量审计, 通知系统