
سكريبت تعداد مستخدمي SSH يعتمد على فروقات التوقيت واستجابات المصادقة. يستغل نفس المتجه مثل CVE-2018-15473 في الإصدارات الضعيفة من OpenSSH (≤ 7.7)، رغم أنه يمكنه أيضًا كشف الأنماط في الإعدادات الحديثة.
نص برنامج لتعداد مستخدمي SSH يعتمد على اختلافات التوقيت واستجابات المصادقة. يستغل نفس المتجه مثل CVE-2018-15473 في إصدارات OpenSSH الضعيفة (≤ 7.7)، على الرغم من أنه يمكنه أيضًا الكشف عن أنماط في التكوينات الحديثة. يعمل على Python 3 + Paramiko ويدعم:
قراءة مسبقة للـ banner لتجنب أخطاء EOF/NoBanner.
إعادة محاولات لكل محاولة ووقت تبريد بين المستخدمين (لتجنب tarpits/MaxStartups).
ضبط تلقائي للمعلمات (-m, -t) بناءً على التذبذب (jitter) للهدف.
⚠️ الاستخدام الأخلاقي
يجب استخدام هذا البرنامج النصي فقط في البيئات الخاصة أو بإذن صريح. إساءة استخدامه ضد أنظمة خارجية دون إذن قد تكون غير قانونية.
📖 الاستخدام الأساسي ./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 يحسب المعلمات الموصى بها (المضاعف والحد) -m, --multiplier العتبة بالمللي ثانية فوق الوسيط المحلي -t, --threshold الحد الأدنى لعدد "الأصوات" (المحاولات التي تتجاوز الحد الفاصل)
--attempts المحاولات لكل مستخدم (الافتراضي: 12) --timeout مهلة الاتصال/المصادقة (ثوانٍ، الافتراضي: 6) --banner-timeout مهلة قراءة banner SSH (ثوانٍ، الافتراضي: 12) --delay توقف بين محاولات نفس المستخدم (ثوانٍ، الافتراضي: 0.6) --cooldown-users توقف بين المستخدمين (ثوانٍ، الافتراضي: 0) --retries إعادة المحاولات لكل محاولة في حالة خطأ banner/النقل
🚀 أمثلة الاستخدام
المخرجات:
[*] 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: قطع الخادم الاتصال قبل الـ banner (tarpit, MaxStartups, WAF).
TransportError: خطأ في الشبكة/الوقت.