كشف الخدمات والإصدارات ونظام التشغيل
إزاي تعرف الخدمة وإصدارها بـ Nmap -sV، ونظام التشغيل بـ -O، والـ Banner Grabbing بـ nc، وتطلّع الإصدارات من الـ banners بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
إنك تعرف إن port eighty مفتوح، ده نص المعلومة. النص التاني: إيه الخدمة اللي عليه بالظبط؟ Apache؟ ولا nginx؟ وإصدار كام؟ لأن الثَغَرات بتبقى في إصدارات معيّنة.
الـ Version Detection، أو dash s capital V: Nmap بيكلّم الخدمة، ويقارن ردها بقاعدة بيانات كبيرة. وبيطلّعلك اسم المنتج والإصدار. ودايماً اعمله على الـ ports المفتوحة بس، علشان بياخد وقت.
ونظام التشغيل، بـ dash capital O: Nmap بيبص على تفاصيل الـ packets، زي الـ TTL. مثلاً TTL قريب من sixty four غالباً Linux، وقريب من one twenty eight غالباً Windows. و dash capital A بيعمل الـ version، والـ OS، والـ scripts، والـ traceroute مرة واحدة.
وفيه طريقة يدوي اسمها Banner Grabbing: تتصل بالـ port بـ nc، والخدمة أول ما تفتح بتقولّك هي مين. وده مفيد لو Nmap ما عرفش الخدمة. هنا banners جت من أربع خدمات. function اسمها product بتدوّر بـ regular expression على اسم المنتج، والإصدار اللي بعده. نشغّل… vsFTPd اتنين تلاتة أربعة، و OpenSSH سبعة اتنين، و Apache اتنين أربعة تمنتاشر. و Postfix ما قالش إصداره، وده بيحصل كتير.
import re
# Banners we got with: nc -nv 10.10.10.5 <port>
banners = {
21: "220 (vsFTPd 2.3.4)",
22: "SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8",
25: "220 mail.example-corp.com ESMTP Postfix (Ubuntu)",
80: "HTTP/1.1 200 OK\r\nServer: Apache/2.4.18 (Ubuntu)",
}
def product(banner):
m = re.search(r"(vsFTPd|OpenSSH|Apache|Postfix)[ _/]?([\d.p]*)", banner)
return (m.group(1), m.group(2) or "?") if m else ("unknown", "?")
for port, banner in banners.items():
name, version = product(banner)
print(f"{port:>3} {name:8} {version}")المخرجات
21 vsFTPd 2.3.4 22 OpenSSH 7.2p2 25 Postfix ? 80 Apache 2.4.18
الإصدار vsFTPd اتنين تلاتة أربعة ده مشهور جداً، فيه backdoor. دورك: اعمل dictionary للإصدارات الخطيرة، ولِف على الـ banners، واطبع تحذير لو لقيت واحد منهم.
known_bad = {("vsFTPd", "2.3.4"): "backdoor (CVE-2011-2523)"} واطبع لو product(banner) جُوّاه.
الحل: نشغّل… لقينا الـ backdoor على port twenty one. وفي الكورس الجاي هنتعلم ندوّر على الثَغَرات دي بشكل منظم.
import re
# Banners we got with: nc -nv 10.10.10.5 <port>
banners = {
21: "220 (vsFTPd 2.3.4)",
22: "SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8",
25: "220 mail.example-corp.com ESMTP Postfix (Ubuntu)",
80: "HTTP/1.1 200 OK\r\nServer: Apache/2.4.18 (Ubuntu)",
}
def product(banner):
m = re.search(r"(vsFTPd|OpenSSH|Apache|Postfix)[ _/]?([\d.p]*)", banner)
return (m.group(1), m.group(2) or "?") if m else ("unknown", "?")
for port, banner in banners.items():
name, version = product(banner)
print(f"{port:>3} {name:8} {version}")
known_bad = {("vsFTPd", "2.3.4"): "backdoor (CVE-2011-2523)"}
for port, banner in banners.items():
hit = known_bad.get(product(banner))
if hit:
print(f"[!] port {port}: {hit}")المخرجات
21 vsFTPd 2.3.4 22 OpenSSH 7.2p2 25 Postfix ? 80 Apache 2.4.18 [!] port 21: backdoor (CVE-2011-2523)
الدرس الجاي: الـ Nmap Scripting Engine، وإزاي تحفظ نتايج Nmap صح. يلا بينا.
03 / دروس المسار (22)
- 01يعني إيه جمع معلومات (Recon)؟
- 02سلبي ولا نشط؟ والنطاق القانوني
- 03WHOIS: مين صاحب الـ Domain؟
- 04سجلات DNS: كنز المعلومات
- 05اكتشاف الـ Subdomains
- 06Certificate Transparency: الشهادات بتتكلم
- 07Google Dorking
- 08OSINT: الموظفين والإيميلات
- 09الـ Metadata: أسرار جُوّه الملفات
- 10اكتشاف الأجهزة الشغّالة (Host Discovery)
- 11الـ Port Scanning بيشتغل إزاي؟
- 12Nmap: البداية
- 13أنواع الـ Scan والسرعة في Nmap
- 14كشف الخدمات والإصدارات ونظام التشغيلانت هنا
- 15NSE Scripts وحفظ النتايج
- 16تعداد الويب: الـ Headers والتكنولوجيا
- 17الـ Directory Brute Force
- 18تعداد SMB
- 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
- 20تنظيم نتايج الـ Recon
- 21أتمتة الـ Recon بـ Python
- 22مراجعة شاملة وخطة Recon