用于识别可能受 CVE-2024-6387 和 CVE-2023-48795 影响的 SSH 软件服务器的扫描器。
| CVE | 名称 | 条件 | 严重性 |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | 严重 |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | 高 |
OpenSSH 服务器中 SIGALRM 信号处理器的竞争条件允许在 Linux 系统(使用 glibc)上以 root 身份进行未经身份验证的远程代码执行。影响早于 9.8p1 的所有 OpenSSH 版本。
SSH 握手(二进制协议)中的前缀截断攻击,允许 MITM 攻击者在会话开始时移除协商的安全扩展消息。影响 OpenSSH < 9.6。
该脚本直接连接到目标的 SSH 端口,读取标识横幅(例如:SSH-2.0-OpenSSH_9.7),不发送任何凭据。获取版本后,与每个 CVE 的修复版本进行比较,并对主机进行分类。
目标 → TCP 连接端口 22 → 读取 SSH 横幅 → 识别软件
→ 解析 OpenSSH 版本 → 与修复版本比较 → 分类 + 日志 + CSV
脚本还会从横幅中识别 SSH 厂商/软件,识别规则如下:
pip install requests packaging urllib3 dnspython
dnspython是可选的,但强烈推荐——使用它可以显著提高并行反向解析的速度。如果没有dnspython,脚本会回退使用socket。
# 单个 IP
python ssh_scanner.py --ip 192.168.1.10
# CIDR 范围
python ssh_scanner.py --cidr 10.0.0.0/24
# 多个 CIDR
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN(通过 RIPE Stat 解析前缀,回退到 bgp.tools)
python ssh_scanner.py --asn AS12345
# 混合输入
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# 从文件读取(每行一个 IP、CIDR 或 ASN)
python ssh_scanner.py --file alvos.txt
# 附加端口(除 22 外)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
DNS 解析在 SSH 扫描之前批量执行,使用专用线程队列,避免 DNS 延迟影响扫描速度。
所有结果写入 ./logs/ 目录:
| 文件 | 内容 |
|---|---|
formato_estruturado.csv)包含的列:
行示例:
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemplo.com | OpenSSH | OpenSSH | 9.7 | cve-2024-6387;cve-2023-48795 | SSH-2.0-OpenSSH_9.7
192.168.1.20 | 22 | 2026-05-20T12:46:03Z | host2.exemplo.com | OpenSSH | OpenSSH | 9.4 | cve-2023-48795;cve-2024-6387 | SSH-2.0-OpenSSH_9.4
192.168.1.30 | 22 | 2026-05-20T12:47:11Z | router.exemplo.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
扫描结束时,如果存在易受攻击的主机,脚本会自动在终端显示结构化 CSV 的前 20 行预览。
将 OpenSSH 更新到 9.8p1 或更高版本(同时覆盖两个 CVE):
# Ubuntu / Debian — 通过系统仓库
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# 从源代码编译(最新版本)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar xzf openssh-9.9p1.tar.gz
cd openssh-9.9p1 && ./configure && make && sudo make install
更新后,重启服务:
sudo systemctl restart sshd
此脚本仅用于您自己的基础设施或获得明确授权的情况下使用。 未经授权的扫描可能违反多种法律法规,请谨慎使用。
任何因滥用此工具而产生的行为和后果均由您自行承担。
如果您有改进建议或发现错误,请提交 issue 或 Pull Request。欢迎所有贡献!🚀
| 横幅 | 识别的厂商 |
|---|
SSH-2.0-OpenSSH_9.7 | OpenSSH |
SSH-2.0-ROSSSH | Mikrotik |
SSH-2.0-Cisco-1.25 | Cisco |
SSH-2.0-dropbear_2022.83 | Dropbear |
SSH-2.0-libssh-0.9.6 | libssh |
SSH-2.0-AsyncSSH_2.13.2 | AsyncSSH |
SSH-2.0-paramiko_2.9.5 | Paramiko |
SSH-2.0-Bitvise-... | Bitvise |
SSH-2.0-WolfSSH_1.4.14 | wolfSSH |
| 其他未映射的 | 从横幅提取的名称 |
| 参数 | 默认值 | 描述 |
|---|
--ports | 22 | 要扫描的 SSH 端口 |
--workers | 60 | SSH 扫描的并发线程数 |
--timeout | 3.0 | SSH 连接超时(秒) |
--dns-workers | 200 | 反向 DNS 解析的并发线程数 |
--dns-timeout | 1.5 | DNS 查询超时(秒) |
--no-confirm | — | 跳过开始前的确认(适用于自动化场景) |
ssh_scan_<timestamp>.log |
| 完整扫描日志(所有找到的 SSH 主机) |
ssh_scan_<timestamp>_vulneraveis.txt | 仅分类为 VULNERÁVEL 的主机 |
ssh_scan_<timestamp>_resultados.csv | 所有 SSH 主机及其完整状态 |
ssh_scan_<timestamp>_formato_estruturado.csv | 结构化 CSV,包含 IP、端口、时间戳、域名、厂商和 CVE |
| 列 | 描述 |
|---|
IP | 主机 IP 地址 |
PORTA | 捕获横幅的 SSH 端口 |
TIMESTAMP_UTC | 扫描时刻的 ISO 8601 UTC 时间戳 |
DOMINIO | 通过反向 DNS (PTR) 获取的主机名,或 SEM-PTR |
FABRICANTE | 从横幅识别的厂商 |
SW_NAME | 从横幅提取的 SSH 软件名称 |
SW_VERSAO | SSH 软件版本 |
CVEs | 受影响的 CVE,以 ; 分隔(小写) |
BANNER | 捕获的完整 SSH 横幅 |
| 状态 | 含义 |
|---|
VULNERÁVEL | 确认 OpenSSH 版本低于修复版本 |
SEGURO | 确认 OpenSSH 版本为修复版本或更高 |
VERSÃO-OCULTA | 检测到 SSH 但版本未暴露——无法确认安全 |
SSH-NÃO-OPENSSH | 找到 SSH 服务器,但不是 OpenSSH(如 Dropbear、Cisco 等) |
NÃO-SSH | 端口有响应,但横幅不匹配 SSH 协议 |