◄ BACK TO PROTOCOLS
► HTB ACADEMY · MODULE 112 · SECTION 17/21
SSH — SECURE SHELL
ENCRYPTED REMOTE ACCESS · PUBLIC KEY AUTH · FOOTPRINTING
22
TCP Port
SSH-2
Secure Version
SSH-1
MITM Vuln
6
Auth Methods
ssh-audit
Fingerprint Tool
id_rsa
Target File
ما هو SSH؟

Secure Shell — يسمح لجهازين بإنشاء اتصال مشفر عبر شبكة غير آمنة. Port 22 TCP. يعمل على كل الأنظمة: Linux, macOS, Windows. استبدل Telnet وR-Services القديمة.

SSH vs Telnet
Telnet: Clear-text — كل شيء مرئي
أي sniffing = username + password

SSH: مشفر بالكامل
MITM مش ممكن في SSH-2 ✅
SSH-1 vs SSH-2
SSH-1: ثغرة MITM — خطير ❌

SSH-2: تشفير أقوى، أسرع، أأمن ✅

Banner يكشف الإصدار:
SSH-1.99 = يدعم الاثنين ⚠️
SSH-2.0 = SSH-2 فقط ✅
💡 SSH يستخدم لـ: remote shell + نقل ملفات (SCP/SFTP) + port forwarding + tunnel
طرق الـ Authentication الستة
الطريقةالوصفأهمية Pentest
Passwordusername + passwordBrute force ممكن 🎯
Public-keyPrivate/Public key pairلو حصلت على id_rsa = دخول مباشر!
Host-basedثقة بناءً على الجهازمحدود
Keyboardأسئلة تفاعليةمحدود
Challenge-responseتحدي وردمحدود
GSSAPIKerberos/Active Directoryفي بيئات Windows/AD
🔑 Public-Key Authentication — كيف تشتغل؟
Password Auth
أنت ترسل الباسورد
السيرفر يشفره ويقارنه
بالـ hash المخزن عنده
الباسورد يمشي على الشبكة!
Public-Key Auth ✅
Private key = عندك أنت فقط
Public key = على السيرفر
السيرفر يولد "لغز" ويشفره
أنت تفكه بـ Private key
Private key لا يغادر جهازك! ✅
# خطوات Public-Key Auth: 1. السيرفر يولّد لغز عشوائي ويشفره بـ Public key ↓ 2. يرسله لك ↓ 3. أنت تفكه بـ Private key (الوحيد القادر يفكه!) ↓ 4. ترسل الحل للسيرفر ↓ 5. السيرفر يتحقق = دخول ✅
🎯 في الـ pentest: لو حصلت على id_rsa → ssh -i id_rsa user@TARGET = دخول بدون باسورد!
Default Configuration — sshd_config
cat /etc/ssh/sshd_config | grep -v "#" | sed -r '/^\s*$/d' Include /etc/ssh/sshd_config.d/*.conf ChallengeResponseAuthentication no UsePAM yes X11Forwarding yes ← CVE-2016-3115 في OpenSSH 7.2p1! PrintMotd no AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server
⚠️ X11Forwarding = تشغيل برامج GUI على السيرفر عبر SSH. في OpenSSH 7.2p1 كانت فيه Command Injection!
⚠️ Dangerous Settings
الإعدادالخطر
PasswordAuthentication yesBrute force ممكن على أي user
PermitEmptyPasswords yesدخول بدون باسورد! 💀
PermitRootLogin yesBrute force مباشر على root 💀
Protocol 1SSH-1 = MITM ممكن
X11Forwarding yesCVE-2016-3115 في 7.2p1
AllowTcpForwarding yesPort forwarding = تجاوز Firewall
PermitTunnelVPN-like tunnel عبر SSH
DebianBanner yesيكشف OS = CVEs محددة
💀 أخطر تركيبة
PermitRootLogin yes PermitEmptyPasswords yesssh root@TARGET Welcome to Ubuntu! ← دخول كـ root بدون باسورد! 💀
اختر الأداة:
🔍Nmap
🔎ssh-audit
🔌ssh client
🔍 Nmap على SSH
sudo nmap -sV -p22 TARGET -sC PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu | ssh-hostkey: | 3072 RSA key | 256 ECDSA key |_ 256 ED25519 key
💡 يكشف الإصدار → ابحث عن CVEs
🔎 ssh-audit — Fingerprinting
التثبيت والتشغيل:
git clone https://github.com/jtesta/ssh-audit.git && cd ssh-audit ./ssh-audit.py 10.129.14.132 # النتيجة: (gen) banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3 (gen) software: OpenSSH 8.2p1 # خوارزميات ضعيفة: (kex) ecdh-sha2-nistp256 -- [fail] using weak elliptic curves (key) ssh-rsa (3072-bit) -- [fail] using weak hashing algorithm
💡 يكشف: الإصدار + الـ OS + خوارزميات التشفير الضعيفة + CVEs محتملة
🔌 SSH Client — الاتصال والـ Enumeration
اتصال عادي:
ssh user@TARGET ssh -p 2222 user@TARGET # port غير افتراضي
اكتشاف طرق الـ Authentication:
ssh -v cry0l1t3@TARGET # يكشف: debug1: Authentications that can continue: publickey,password,keyboard-interactive
إجبار Password Auth (للـ Brute Force):
ssh -v cry0l1t3@TARGET -o PreferredAuthentications=passwordcry0l1t3@TARGET's password: ← جاهز للـ brute force
الدخول بـ Private Key:
ssh -i id_rsa root@TARGET Welcome to Ubuntu! ← دخول بدون باسورد! 🎯
🎯 لو حصلت على id_rsa من Rsync أو أي مكان → ssh -i id_rsa = دخول مباشر!
⛓️ خطوات الـ SSH Footprinting
1
Nmap + ssh-audit
اكتشاف الإصدار وخوارزميات التشفير الضعيفة
sudo nmap -sV -p22 TARGET ./ssh-audit.py TARGET
👀 SSH-1 مدعوم؟ → MITM ممكن. OpenSSH 7.2p1 → CVE-2016-3115
2
اكتشاف طرق الـ Auth
شوف أيها مفعّل
ssh -v user@TARGET # Authentications that can continue: publickey,password
3
جرب Default/Weak Credentials
Password auth مفعّل = brute force
hydra -l root -P rockyou.txt ssh://TARGET
🎯 PermitRootLogin + PasswordAuthentication = ابدأ بـ root
4
ابحث عن Private Keys
من Rsync أو أي خدمة أخرى
# لو حصلت على id_rsa: chmod 600 id_rsa ssh -i id_rsa root@TARGET
⛓️ Attack Chain
🔍
ssh-audit
إصدار + CVEs
🔑
Auth Methods
ssh -v
💀
Brute Force
hydra
💥
Shell Access
root shell
🌐 الأساسيات
إيش الفرق بين SSH وTelnet؟
Telnet = clear-text — أي sniffing يكشف username وpassword. SSH = مشفر بالكامل — MITM مش ممكن في SSH-2. لهيك SSH استبدل Telnet وR-Services القديمة.
ليش لا يزال بعض السيرفرات تدعم SSH-1؟
للتوافقية مع أجهزة قديمة ما تدعم SSH-2. "خليها تشتغل وما نلمسها" عقلية كثير admins. SSH-1 من 1995 وSSH-2 من 2006 — فرق 11 سنة من الأجهزة القديمة.
إيش X11 Forwarding وليش خطير؟
X11 = نظام الـ GUI على Linux. X11 Forwarding = تشغيل برامج GUI على السيرفر البعيد وتشوفها على شاشتك. في OpenSSH 7.2p1 كانت ثغرة CVE-2016-3115 تسمح Command Injection عبر X11.
🔑 Authentication
ليش Public-key أأمن من Password؟
في Password auth الباسورد يمشي على الشبكة = ممكن يُسرق. في Public-key auth الـ Private key لا يغادر جهازك أبداً — السيرفر يرسل لك لغز، أنت تفكه بـ Private key وترسل الحل. المهاجم ما يقدر يحصل على الـ Private key.
كيف تستغل id_rsa لو حصلت عليه؟
chmod 600 id_rsa عشان تغير الصلاحيات، بعدين ssh -i id_rsa user@TARGET = دخول مباشر بدون باسورد. لو الملف من Rsync أو أي مكان ثاني = نفس النتيجة.