
تبسّط محاكاة البرنامج الثابت لجهاز D-Link DCS-932L عبر مكوّنات مرقّعة مسبقًا وتتضمّن استغلالًا لإثبات المفهوم لثغرة CVE-2024-37606.

مرحبًا! يوفر هذا المستودع أدوات وبيئة لمحاكاة البرنامج الثابت لكاميرا D-Link DCS-932L وعرض ثغرة CVE-2024-37606. يتضمن ملفات ثنائية معدلة مسبقًا والمكتبات اللازمة، مما يبسط إعداد المحاكاة بحيث لا تحتاج إلى إجراء تصحيح يدوي باستخدام أدوات مثل Ghidra.
يتضمن هذا المشروع استغلالًا لإثبات المفهوم (CVE-2024-37606-DCS932L.py) لثغرة CVE-2024-37606. تتضمن هذه الثغرة تجاوز سعة المخزن المؤقت في خدمة alphapd. يُرجى استخدام هذا بمسؤولية ولأغراض تعليمية فقط.
انقر على الصورة لمشاهدة الفيديو

تم إجراء عدة تعديلات لتحسين وظائف وإمكانية استخدام بيئة محاكاة البرنامج الثابت:
startup.sh) لتبسيط المحاكاة.libnvram.so الأصلي لضمان عمل محاكي NVRAM بشكل صحيح. الملف المعدل (firmadyne/libnvram.so) مرفق.alphapd الثنائي باستخدام Ghidra لإصلاح خطأ يمنع استرجاع عنوان IP من sysinfo أثناء المحاكاة.qemu-mipsel-static لمحاكاة بنية MIPS الطرفية الصغيرة (Little Endian).اتبع هذه الخطوات لإعداد بيئة المحاكاة وتشغيل الاستغلال.
gitqemu-user-staticpython3 و pipgit clone https://github.com/itwizardo/DCS932L-Emulation-CVE-2024-37606-Attack DCS932L-CVE
cd DCS932L-CVE
sudo apt update
sudo apt install qemu-user-static
brew install qemu
# QEMU installation via Homebrew includes user-mode static binaries.
choco install qemu
انسخ الملف الثنائي الثابت الخاص بـ QEMU إلى نظام ملفات البرنامج الثابت:
sudo cp /usr/bin/qemu-mipsel-static ./usr/bin/
عيّن السمة غير القابلة للتغيير على دليل الويب. يمنع هذا تعديل ملفات خادم الويب الحرجة اللازمة لعمل المحاكاة والاستغلال بشكل صحيح:
sudo chattr +i etc_ro/web/
Set-ItemProperty -Path ./etc_ro/web -Name IsReadOnly -Value $true
# Note: This sets the directory as Read-Only, preventing accidental changes.
# To make contents read-only too, add -Recurse to Get-ChildItem:
# Get-ChildItem -Path ./etc_ro/web -Recurse | Set-ItemProperty -Name IsReadOnly -Value $true
sudo chflags schg etc_ro/web/
ادخل إلى بيئة chroot باستخدام ملف QEMU الثنائي لبنية MIPS الطرفية الصغيرة:
sudo chroot . /usr/bin/qemu-mipsel-static /bin/sh
داخل قشرة chroot، قم بتشغيل سكريبت بدء التشغيل وابدأ خادم الويب:
# Execute startup tasks (network setup, etc.)
./startup.sh
# Set environment variables for nvram emulation
export LD_PRELOAD=/firmadyne/libnvram.so
export HOME=.
export RANDFILE=$HOME/.rnd
# Start the vulnerable web server (binds to 0.0.0.0, may take 1-2 mins to fully initialize)
alphapd
اترك هذه النافذة الطرفية تعمل. ستكون خدمات الجهاز المُحاكى قابلة للوصول عبر الجهاز المضيف باستخدام عنوان IP الذي يضبطه startup.sh (غالبًا 192.168.0.1).
افتح نافذة طرفية جديدة على جهازك المضيف (خارج بيئة chroot).
افتح في نافذة طرفية جديدة:
cd /path/to/DCS932L # Adjust path if necessary
(اختياري) ثبّت حزم Python المطلوبة إذا كان السكريبت يحتاجها (مثل requests):
# pip3 install requests # Uncomment if needed
نفّذ سكريبت الاستغلال. يستهدف تلقائيًا البيئة المُحاكاة المحلية (192.168.0.1 التي يضبطها startup.sh):
python3 CVE-2024-37606-DCS932L.py
لاستهداف عنوان IP مختلف، استخدم الوسيطة --ip:
# Example: python3 CVE-2024-37606-DCS932L.py --ip <target_ip>
تابع مخرجات السكريبت لرؤية الاستغلال أثناء التنفيذ.
qemu-mipsel-static.qemu-mips-static (Big Endian) سيؤدي إلى أخطاء Invalid ELF image.alphapd ترتبط بـ 0.0.0.0 داخل بيئة chroot وقد تحتاج من دقيقة إلى دقيقتين لتصبح مستجيبة بالكامل بعد التنفيذ.startup.sh يُعد واجهة شبكة (مثل tap0) بعنوان IP 192.168.0.1. تحقق من ذلك إذا فشل الاستغلال في الاتصال./lib/ld-uClibc.so.0) في دليل /lib ببيئة chroot.هذا المشروع لأغراض تعليمية وبحثية فقط. يعرض ثغرة معروفة (CVE-2024-37606). المؤلفون غير مسؤولين عن أي إساءة استخدام لهذه المعلومات أو الكود. استخدم هذه البيئة والاستغلال بمسؤولية وأخلاقية.
تم تطوير هذا كجزء من مشروع مدرسي لصالح Novi Hogeschool.
Georgio T. - itwizardo
لا تتردد في المساهمة في هذا المشروع وتحسين الأدوات الخاصة بهندسة عكسية للبرامج الثابتة وتحليل الأمان!