
تطبيق ويب به ثغرات تم العثور عليها في حالات حقيقية، سواء في اختبارات الاختراق أو في برامج مكافآت الأخطاء.
ملعب اختراق الويب هو بيئة اختراق ويب خاضعة للتحكم. يتكون من ثغرات أمنية موجودة في حالات حقيقية، سواء في اختبارات الاختراق أو في برامج مكافآت الأخطاء. الهدف هو أن يتمكن المستخدمون من التدرب عليها، وتعلم اكتشافها واستغلالها.
سيتم أيضًا معالجة مواضيع أخرى ذات أهمية، مثل: تجاوز المرشحات عن طريق إنشاء حمولات مخصصة، وتنفيذ هجمات متسلسلة تستغل ثغرات أمنية متعددة، وتطوير سكريبتات إثبات المفهوم، وغيرها.
شفرة مصدر التطبيق مرئية. ومع ذلك، فإن نهج المختبر هو الصندوق الأسود. لذلك، لا ينبغي مراجعة الكود لحل التحديات.
بالإضافة إلى ذلك، تجدر الإشارة إلى أن الفازينغ (لكل من المعلمات والأدلة) وهجمات القوة الغاشمة لا توفر أي ميزة في هذا المختبر.
يوصى باستخدام Kali Linux لإجراء هذا المختبر. في حالة استخدام آلة افتراضية، يُنصح باستخدام برنامج المراقبة الافتراضية VMware Workstation Player.
تعتمد البيئة على Docker و Docker Compose، لذلك من الضروري تثبيتهما.
لتثبيت Docker على Kali Linux، قم بتشغيل الأوامر التالية:
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker --now
لتثبيت Docker على توزيعات أخرى قائمة على Debian، قم بتشغيل الأوامر التالية:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker --now
لتثبيت Docker Compose، قم بتشغيل الأمر التالي:
sudo apt install -y docker-compose
ملاحظة: في حالة استخدام M1 يُوصى بتنفيذ الأمر التالي قبل بناء الصور:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
الخطوة التالية هي استنساخ المستودع وبناء صور Docker:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose build
أيضًا، يُوصى بتثبيت إضافة المتصفح Foxy Proxy، والتي تسمح بتغيير إعدادات البروكسي بسهولة، و Burp Suite، والذي سنستخدمه لاعتراض طلبات HTTP.
سنقوم بإنشاء ملف شخصي جديد في Foxy Proxy لاستخدام Burp Suite كوكيل. للقيام بذلك، نذهب إلى خيارات Foxy Proxy، ونضيف وكيلًا بالتكوين التالي:
بمجرد تثبيت كل ما تحتاجه، يمكنك نشر البيئة بالأمر التالي:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose up -d
سيؤدي هذا إلى إنشاء حاويتين لتطبيقات مطورة بلغة Flask على المنفذ 80:
من الضروري إضافة IP الحاويات إلى ملف /etc/hosts، حتى يمكن الوصول إليها بالاسم ويمكن لخادم الاستغلال التواصل مع تطبيق الويب الضعيف. للقيام بذلك، قم بتشغيل الأوامر التالية:
sudo sed -i '/whp-/d' /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-socially) whp-socially" | sudo tee -a /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-exploitserver) whp-exploitserver" | sudo tee -a /etc/hosts
بمجرد القيام بذلك، يمكن الوصول إلى التطبيق الضعيف من http://whp-socially وخادم الاستغلال من http://whp-exploitserver.
عند استخدام خادم الاستغلال، يجب استخدام عناوين URL أعلاه، باستخدام اسم النطاق وليس عناوين IP. وهذا يضمن الاتصال الصحيح بين الحاويات.
عندما يتعلق الأمر بالاختراق، لتمثيل خادم المهاجم، يجب استخدام IP Docker المحلي، لأن المختبر ليس مخصصًا لتقديم طلبات إلى خوادم خارجية مثل Burp Collaborator، Interactsh، إلخ. يمكن استخدام Python http.server لمحاكاة خادم ويب واستقبال تفاعلات HTTP. للقيام بذلك، قم بتشغيل الأمر التالي:
sudo python3 -m http.server 80
تنقسم البيئة إلى ثلاث مراحل، كل منها بها ثغرات أمنية مختلفة. من المهم القيام بها بالترتيب، لأن الثغرات في المراحل التالية تبني على الثغرات في المراحل السابقة. المراحل هي:
فيما يلي مفسدات لثغرات كل مرحلة. إذا كنت لا تحتاج إلى مساعدة، يمكنك تخطي هذا القسم. من ناحية أخرى، إذا كنت لا تعرف من أين تبدأ، أو تريد التحقق مما إذا كنت على المسار الصحيح، يمكنك توسيع القسم الذي يهمك.
في هذه المرحلة، يمكن سرقة جلسة مستخدم معين من خلال Cross-Site Scripting (XSS)، والذي يسمح بتنفيذ كود JavaScript. للقيام بذلك، يجب أن يتمكن الضحية من الوصول إلى URL في سياق المستخدم، ويمكن محاكاة هذا السلوك باستخدام خادم الاستغلال.
التلميحات لحل هذه المرحلة هي:
في هذه المرحلة، يمكن إنشاء رمز (token) يسمح بالوصول كمسؤول. هذا هجوم نموذجي على JSON Web Token (JWT)، حيث يمكن تعديل حمولة الرمز لتصعيد الصلاحيات.
التلميح لحل هذه المرحلة هو أن هناك نقطة نهاية (endpoint) تعيد، عند إعطائها JWT، ملف تعريف ارتباط جلسة صالح.
في هذه المرحلة، يمكن قراءة ملف /flag من خلال ثغرة Server Side Template Injection (SSTI). للقيام بذلك، يجب أن تجعل التطبيق يقوم بتشغيل كود Python على الخادم. من الممكن تنفيذ أوامر النظام على الخادم.
التلميحات لحل هذه المرحلة هي:
الوظيفة الضعيفة محمية بمصادقة ثنائية العوامل. لذلك، قبل استغلال SSTI، يجب إيجاد طريقة لتجاوز طلب رمز OTP. هناك أوقات يثق فيها التطبيق بالطلبات القادمة من نفس الخادم وتلعب رؤوس HTTP دورًا مهمًا في هذه الحالة.
SSTI أعمى (Blind)؛ هذا يعني أنه لا يتم الحصول على مخرجات الكود المنفذ على الخادم مباشرة. تتيح وحدة Python smtpd إنشاء خادم SMTP يطبع الرسائل التي يتلقاها إلى الإخراج القياسي:
sudo python3 -m smtpd -n -c DebuggingServer 0.0.0.0:25
يستخدم التطبيق Flask، لذلك يمكن استنتاج أن محرك القوالب هو Jinja2 لأنه موصى به من وثائق Flask الرسمية ومستخدم على نطاق واسع. يجب الحصول على حمولة متوافقة مع Jinja2 للحصول على العلم النهائي.
رسالة البريد الإلكتروني لها حد في عدد الأحرف. يمكن العثور على معلومات حول كيفية تجاوز هذا الحد على الإنترنت.
يمكن العثور على حلول مفصلة لكل مرحلة في مجلد الحلول.
قد تكون الموارد التالية مفيدة في حل المراحل:
نرحب بطلبات السحب (Pull requests). إذا وجدت أي أخطاء، يرجى فتح مشكلة (Issue).