
타이밍 차이와 인증 응답을 기반으로 한 SSH 사용자 열거 스크립트. 취약한 OpenSSH 버전(≤ 7.7)에서 CVE-2018-15473과 동일한 벡터를 악용하지만, 최신 구성에서도 패턴을 드러낼 수 있습니다.
타이밍 차이와 인증 응답을 기반으로 한 SSH 사용자 열거 스크립트. 취약한 OpenSSH 버전(≤ 7.7)에서 CVE-2018-15473과 동일한 벡터를 악용하며, 최신 설정에서도 패턴을 드러낼 수 있습니다. Python 3 + Paramiko에서 작동하며 다음을 지원합니다:
배너 사전 읽기로 EOF/NoBanner 오류 방지
시도당 재시도 및 사용자 간 쿨다운 (tarpits/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 사용자 목록 파일 (한 줄에 하나씩)
-a, --autotune 권장 매개변수 계산 (multiplier 및 threshold) -m, --multiplier 로컬 중앙값보다 높은 임계값(밀리초) -t, --threshold “투표” (cutoff를 초과한 시도)의 최소 개수
--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 회의 시도에서 cutoff 초과).
likely INVALID → 사용자가 존재하지 않을 가능성이 높음 (일관된 "AuthFailed" 응답).
errors={...} → 코드 요약:
AuthFailed: 일반 SSH 응답.
NoBanner: 서버가 배너 전에 연결을 끊음 (tarpit, MaxStartups, WAF).
TransportError: 네트워크/시간 초과 오류.