nTune1030/brute_force

GitHub: nTune1030/brute_force

这是一个异步SSH凭证暴力破解工具,用于高效识别SSH服务的弱密码。

Stars: 1 | Forks: 0

# SSH 暴力破解工具 [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![asyncssh](https://img.shields.io/badge/depends-asyncssh-orange.svg)](https://pypi.org/project/asyncssh/) 基于 `asyncssh` 构建的异步、并发 SSH 凭证测试工具。支持可配置的并行性、带指数退避的重试逻辑、带预计完成时间的进度追踪、横幅抓取以及多种输出格式。 ## 功能特性 - **异步并发** — 使用 `asyncio` 生产者/消费者模式的可配置工作池(默认 20) - **带退避的重试** — 对瞬时连接错误和超时使用指数退避 + 抖动 - **进度监控** — 实时尝试次数、百分比、速率(尝试数/秒)、预计完成时间和已用时间 - **横幅抓取** — 可在开始前选择性地获取并显示 SSH 服务器横幅 - **连通性预检** — 在启动攻击前验证目标可达性 - **多种输出格式** — `colon`(`用户:密码`)、`csv` 或 `json`(JSONL) - **成功后继续** — `--no-stop` 标志可在找到有效凭证后继续搜索 - **优雅关闭** — 处理 SIGINT/SIGTERM,排空剩余结果,打印摘要 - **注释感知的字典文件** — 字典文件中以 `#` 开头的行将被跳过 - **彩色终端输出** — 在终端运行时使用 ANSI 颜色的日志级别 ## 依赖要求 - Python 3.9+ - [asyncssh](https://pypi.org/project/asyncssh/) ``` pip install asyncssh ``` ## 使用方法 ``` usage: ssh_brute_force.py [-h] [-u USER] [-U USERLIST] -w WORDLIST [-p PORT] [-c CONCURRENCY] [-t TIMEOUT] [--delay DELAY] [--jitter JITTER] [--max-retries MAX_RETRIES] [-o OUTPUT] [--format {colon,json,csv}] [--no-stop] [--banner] [-v] [-q] target ``` ### 位置参数 | 参数 | 描述 | |------------|--------------------------| | `target` | 目标 IP 或主机名 | ### 选项 | 标志 | 默认值 | 描述 | |----------------------|----------------|----------------------------------------| | `-u`, `--user` | — | 要测试的单个用户名 | | `-U`, `--userlist` | — | 包含用户名的文件(每行一个) | | `-w`, `--wordlist` | `wordlist.txt` | 密码字典文件 | | `-p`, `--port` | `22` | SSH 端口 | | `-c`, `--concurrency`| `20` | 并行工作者数量 | | `-t`, `--timeout` | `5` | 每个连接的超时时间(秒) | | `--delay` | `0` | 排队尝试之间的秒数 | | `--jitter` | `0` | 延迟上的随机抖动(±秒) | | `--max-retries` | `2` | 连接错误/超时的重试次数 | | `-o`, `--output` | — | 将找到的凭证写入文件 | | `--format` | `colon` | 输出格式:`colon`、`json`、`csv` | | `--no-stop` | 关闭 | 找到有效凭证后继续 | | `--banner` | 关闭 | 抓取并显示 SSH 服务器横幅 | | `-v`, `--verbose` | 关闭 | 调试级别日志 | | `-q`, `--quiet` | 关闭 | 仅警告级别日志 | ### 示例 **基础用法 — 单个用户,默认字典:** ``` python ssh_brute_force.py 10.10.10.10 -u admin ``` **自定义字典:** ``` python ssh_brute_force.py 10.10.10.10 -u admin -w rockyou.txt ``` **多个用户,限制并发:** ``` python ssh_brute_force.py 10.10.10.10 -U users.txt -w pass.txt -c 10 --delay 0.5 ``` **自定义端口,保存结果:** ``` python ssh_brute_force.py 10.10.10.10 -u root -w words.txt -o found.txt --port 2222 ``` **JSON 输出,查找所有有效凭证:** ``` python ssh_brute_force.py 10.10.10.10 -u admin -w pass.txt --format json -o creds.jsonl --no-stop ``` **带横幅抓取的详细模式:** ``` python ssh_brute_force.py 10.10.10.10 -u root -w words.txt --banner -v ``` ## 输出格式 当指定 `-o` 时,找到的凭证将按所选格式写入: **冒号格式**(默认): ``` admin:password123 root:toor ``` **CSV 格式**(带表头): ``` "username","password" "admin","password123" "root","toor" ``` **JSON 格式**(JSONL — 每行一个 JSON 对象): ``` {"username": "admin", "password": "password123"} {"username": "root", "password": "toor"} ``` ## 架构设计 该工具使用 **异步生产者/消费者** 模式: ``` ┌──────────┐ ┌──────────────────────────────────┐ ┌──────────────────┐ │ Producer │────▶│ CredQueue (username, password) │────▶│ Worker Pool (N) │ │ (feeder) │ │ asyncio.Queue, maxsize=2×N │ │ attempt_login() │ └──────────┘ └──────────────────────────────────┘ └────────┬─────────┘ │ ResultQueue (Attempt) │ ▼ ┌──────────────────┐ │ Progress Monitor │ │ (stats, logging, │ │ file output) │ └──────────────────┘ ``` 1. **生产者** — 遍历所有 `用户 × 密码` 组合,并将其推入 `CredQueue`,项目之间可设置延迟 + 抖动。完成时推入 `N` 个哨兵值 `None`。 2. **工作者** — 每个工作者从 `CredQueue` 拉取任务,调用 `attempt_login()`,并将 `Attempt` 结果推入 `ResultQueue`。成功时(或收到 `stop_event`),工作者退出。 3. **进度监视器** — 排空 `ResultQueue`,更新 `Stats`,定期记录进度,将找到的凭证写入输出文件,并在设置了 `--stop-on-success` 时发出 `stop_event` 信号。 4. **主程序** — 协调启动,处理信号(SIGINT/SIGTERM),等待完成,取消剩余任务,排空最终结果,并打印摘要。 ### 关键数据结构 | 类名 | 用途 | |------------------|--------------------------------------------------------------| | `AttemptResult` | 枚举:`SUCCESS`, `AUTH_FAILED`, `CONNECTION_ERROR`, `TIMEOUT` | | `OutputFormat` | 枚举:`COLON`, `JSON`, `CSV` | | `Attempt` | 数据类:用户名、密码、结果、已用重试次数、错误 | | `Stats` | 数据类:计数器 + 计算属性(已用时间、速率、百分比、预计完成时间) | | `CredQueue` | 类型别名:`asyncio.Queue[Optional[Tuple[str, str]]]` | | `ResultQueue` | 类型别名:`asyncio.Queue[Attempt]` | ### 重试逻辑 瞬时错误(连接丢失、断开连接、超时、操作系统错误)会触发最多 `--max-retries` 次带指数退避的重试: ``` backoff = 0.5 × 2^attempt_num + random(0, 0.3) seconds ``` `PermissionDenied` **不会** 被重试 — 它会立即导致 `AUTH_FAILED`。 ## 字典文件格式 每行一个条目。以 `#` 开头的行被视为注释并被跳过。空行会被忽略。 ``` # 常见密码 password123 admin letmein qwerty ``` ## 退出代码 | 代码 | 条件 | |------|----------------------------------------| | `0` | 正常退出(完成或中断) | | `1` | 缺少依赖(`asyncssh` 未安装) | | `1` | 缺少 `--user` 或 `--userlist` | | `1` | 字典文件或用户列表文件未找到 | | `1` | 用户或密码列表为空 | | `1` | 目标不可达 | ## 许可证 本项目仅用于教育和授权测试目的。请负责任地使用,并遵守所有适用法律。
标签:asyncio, asyncssh, ATT&CK 框架, Banner抓取, DOS头擦除, Linux安全, PoC, Python, SSH协议, 凭证测试, 多输出格式, 字列表处理, 安全测试, 密码破解, 异步编程, 攻击性安全, 攻击路径可视化, 无后门, 暴力破解, 终端输出, 网络安全, 自动化攻击, 计算机取证, 进度跟踪, 连接预检查, 逆向工具, 重试逻辑, 隐私保护, 黑客工具