nTune1030/brute_force
GitHub: nTune1030/brute_force
这是一个异步SSH凭证暴力破解工具,用于高效识别SSH服务的弱密码。
Stars: 1 | Forks: 0
# SSH 暴力破解工具
[](https://www.python.org/downloads/)
[](LICENSE)
[](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协议, 凭证测试, 多输出格式, 字列表处理, 安全测试, 密码破解, 异步编程, 攻击性安全, 攻击路径可视化, 无后门, 暴力破解, 终端输出, 网络安全, 自动化攻击, 计算机取证, 进度跟踪, 连接预检查, 逆向工具, 重试逻辑, 隐私保护, 黑客工具