
SSHユーザー列挙スクリプト。認証応答とタイミングの差異に基づく。脆弱なOpenSSH(≤ 7.7)においてCVE-2018-15473と同じベクトルを悪用するが、最新の設定でもパターンを明らかにできる可能性がある。 Python 3 + Paramikoで動作し、以下をサポート:
バナー先行読み取り(EOF/NoBannerエラー回避)。
試行ごとのリトライとユーザー間のクールダウン(tarpit/MaxStartups回避)。
ターゲットのジッターに応じたパラメータ自動調整(-m, -t)。
⚠️ 倫理的な使用
このスクリプトは、自身の環境または明示的な許可を得た場合にのみ使用すべきです。 許可なく外部システムに対して悪用することは違法となる可能性があります。
📖 基本的な使い方 ./ssh_enum_py3.py -i -u users.txt -m <multiplier_ms> -t
例: ./ssh_enum_py3.py -i 149.210.234.234 -u users.txt -m 5000 -t 8
⚙️ オプション -i, --ip 対象ホスト/IP(必須) -p, --port SSHポート(デフォルト: 22) -u, --userlist ユーザーリストファイル(1行1ユーザー)
-a, --autotune 推奨パラメータ(multiplierとthreshold)を計算 -m, --multiplier ローカル中央値を超える閾値(ミリ秒) -t, --threshold カットオフを超えた試行の最小「投票」数
--attempts ユーザーあたりの試行回数(デフォルト: 12) --timeout 接続/認証タイムアウト(秒、デフォルト: 6) --banner-timeout SSHバナー読み取りタイムアウト(秒、デフォルト: 12) --delay 同一ユーザーの試行間の待機時間(秒、デフォルト: 0.6) --cooldown-users ユーザー間の待機時間(秒、デフォルト: 0) --retries バナー/トランスポートエラー時の試行あたりのリトライ回数
🚀 使用例
出力:
[*] Autotune sugerido: multiplier (ms): 4986 threshold : 8 baseline_med : 3586 ms (avg=3596 ms) error mix : {'AuthFailed': 12}
自動調整 + 同一実行での列挙
./ssh_enum_py3.py -i 149.210.234.234 -a -u users.txt
--timeout 12 --banner-timeout 30 --delay 3 --cooldown-users 15
固定パラメータによる直接列挙
./ssh_enum_py3.py -i 149.210.234.234 -u users.txt -m 4986 -t 8
--attempts 10 --timeout 12 --banner-timeout 30 --retries 5 --delay 3 --cooldown-users 15
📋 結果の解釈
likely VALID → ユーザーはおそらく存在する(カットオフを threshold 回以上の試行で超えた)。
likely INVALID → ユーザーはおそらく存在しない("AuthFailed" のような一貫した応答)。
errors={...} → コードの要約:
AuthFailed: 標準的なSSH応答。
NoBanner: サーバーがバナー前に接続を切断(tarpit、MaxStartups、WAF)。
TransportError: ネットワーク/タイムアウトエラー。