Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-44203 — استغلال لـ CVE-2025-44203 يستهدف حالة سباق في HotelDruid 3.0.0/3.0.7 مما يؤدي إلى تسريب بيانات اعتماد المسؤول والتسبب في رفض الخدمة. يتضمن سكريبت هجوم بالقوة العمياء لاستعادة كلمة المرور دون اتصال. | Kitploit
أدوات/GitHubGitHub/ivant7d3/cve-2025-44203
كسر كلمات المرورتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبجمع المعلومات
GitHubivant7d3/cve-2025-44203

CVE-2025-44203

استغلال لـ CVE-2025-44203 يستهدف حالة سباق في HotelDruid 3.0.0/3.0.7 مما يؤدي إلى تسريب بيانات اعتماد المسؤول والتسبب في رفض الخدمة. يتضمن سكريبت هجوم بالقوة العمياء لاستعادة كلمة المرور دون اتصال.

عرض المستودع
6منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-44203: الكشف عن معلومات حساسة وحرمان الخدمة في HotelDruid 3.0.0 / 3.0.7

ملخص

يحتوي HotelDruid 3.0.0 و 3.0.7 على حالة سباق في نقطة الإعداد creadb.php، والتي يمكن الوصول إليها قبل اكتمال الإعداد. لها تأثيران، وكلاهما ناتج عن نفس السباق الضائع: الكشف عن معلومات حساسة (من خلال رسائل خطأ SQL التفصيلية) وحرمان الخدمة.

عن طريق إرسال العديد من طلبات POST في وقت واحد، يمكن للمهاجم تشغيل حالة سباق وقراءة بيانات حساسة من الرد، بما في ذلك اسم مستخدم المسؤول وتجزئة كلمة المرور والملح. إذا كانت كلمة المرور المختارة أثناء تكوين الحزمة Debian ضعيفة، فيمكن استعادتها دون اتصال باستخدام قائمة كلمات.

عندما ينجح الهجوم، يُترك المسؤول غير قادر على تسجيل الدخول باستخدام بيانات الاعتماد التي عينها أثناء التثبيت (حرمان الخدمة).

التأثير

  • الكشف عن المعلومات: يظهر اسم مستخدم المسؤول وتجزئة كلمة المرور والملح في رد HTTP.
  • حرمان الخدمة: يؤدي الهجوم الناجح إلى إفساد الإعداد، لذلك لا يمكن للمسؤول تسجيل الدخول بعد ذلك. يتطلب الاسترداد إعادة تثبيت HotelDruid.

العروض التوضيحية

  • HotelDruid 3.0.0: فيديو
  • HotelDruid 3.0.7: فيديو

الشروط المسبقة والموثوقية

  • لكي يتمكن مهاجم عن بُعد من الوصول إلى نقطة النهاية، يجب أن يكون خيار حزمة Debian "تقييد الوصول إلى HotelDruid على المضيف المحلي؟" قد تم تعيينه إلى 'لا' أثناء التثبيت. خلاف ذلك، يمكن فقط لجهاز المضيف نفسه الوصول إلى نقطة النهاية.
  • لا يعمل الهجوم دائمًا، وإذا فشل فلا يمكن محاولته مرة أخرى. يكتمل الإعداد الطبيعي ويُغلق النافذة، لذلك يلزم تثبيت جديد.
  • الموارد مهمة جدًا. عمليات التشغيل التي نجحت كانت على جهاز افتراضي صغير به 2 نوى CPU و 2 جيجابايت من ذاكرة الوصول العشوائي. على جهاز به 4 نوى أو أكثر و 4 جيجابايت أو أكثر من ذاكرة الوصول العشوائي، فشلت كل محاولة لأن كل طلب ينتهي بسرعة كبيرة جدًا بحيث لا يمكن أن تتداخل.
  • إذا قمت بتحرير النص لطباعة كل رد، يمكنك أحيانًا استعادة اسم المستخدم فقط وليس أي شيء آخر. يشرح قسم السبب الجذري السبب.
  • تم الاختبار على الإصدارين 3.0.0 و 3.0.7. قد تتأثر إصدارات أخرى أيضًا.

السبب الجذري

تترك حزمة Debian ملف creadb.php قابلاً للوصول دون تسجيل دخول حتى ينتهي الإعداد، ومع الإعداد الافتراضي للحزمة C_UTILIZZA_SEMPRE_DEFAULTS="AUTO" يعيد تشغيل إنشاء قاعدة البيانات بالكامل في كل طلب. يصدر هذا الروتين أكثر من 100 عبارة SQL (إنشاء الجداول وملئها) دون أي قفل حولها، لذا فإن العديد من الطلبات التي تصل معًا تشغله في نفس الوقت. هذا هو السباق.

على جهاز بطيء أو مشغول، تتداخل عمليات التشغيل المتوازية وتتصادم على قاعدة بيانات SQLite. بمجرد أن يبدأ طلب في إنشاء الجداول والصفوف، تفشل عبارات طلب لاحق بكميات كبيرة لأسباب مختلفة مثل وجود الصفوف بالفعل أو قاعدة البيانات مقفلة بواسطة كتابة أخرى. عند كل فشل، يطبع غلاف الاستعلام esegui_query() في HotelDruid العبارة الفاشلة الكاملة في رد HTTP. هذا يعني أن ردًا واحدًا يعود بعشرات من أخطاء SQL هذه، ويحتوي أحدها على المعلومات الحساسة لحساب المسؤول.

root@kitploit:~
update ...utenti set password = '<hash>', salt = '<salt>', tipo_pass = '5' where idutenti = '1'

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

يأتي الإغلاق من نفس الفشل. يتم إدراج صف المسؤول أولاً باستخدام tipo_pass='n'، وفقط التحديث (UPDATE) أعلاه يحوله إلى حساب فعال (tipo_pass='5' مع تعيين كلمة مرور). لا يتحقق الكود الذي يعمل بعد التحديث مباشرة مما إذا كان قد نجح. يقوم بإنشاء ملف abilita_login، الذي يقوم بتشغيل تسجيل الدخول، ويحذف ini.php، الذي كان يحتوي على بيانات اعتماد المسؤول، ثم يكتب لاحقًا ultimo_accesso، الذي يغلق الإعداد للأبد. لذلك عندما يخسر التحديث السباق، يظل الحساب عند tipo_pass='n'، والذي ترفضه صفحة تسجيل الدخول دائمًا حتى مع كلمة المرور الصحيحة، بينما يتم تشغيل تسجيل الدخول واختفى ملف بيانات الاعتماد. في هذه المرحلة، لا توجد طريقة للعودة بدون إعادة التثبيت.

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

إعادة الإنتاج

قم بتشغيل الاستغلال ضد الهدف من جهاز المهاجم:

root@kitploit:~
python3 exploit.py 192.168.1.1

حيث 192.168.1.1 هو عنوان IP للجهاز الذي يعمل عليه HotelDruid.

إذا نجح، استخدم brute.py مع قائمة كلمات لمحاولة استعادة كلمة المرور النصية. افتح brute.py، واضبط salt على الملح الذي حصلت عليه و final_hash على التجزئة التي حصلت عليها، ثم قم بتشغيل:

root@kitploit:~
python3 brute.py rockyou.txt

حيث rockyou.txt هي قائمة كلماتك.

لاحظ أنه حتى مع اسم المستخدم وكلمة المرور الصحيحين، لن تتمكن من تسجيل الدخول، ولا يستطيع المسؤول ذلك. كلمة المرور التي تستعيدها صحيحة، لكن السباق الناجح ترك الحساب عالقًا عند tipo_pass='n'، لذلك ترفضه صفحة تسجيل الدخول. راجع قسم السبب الجذري.

الإصلاح

تم إصلاح الثغرة الأمنية في HotelDruid 3.0.8. إليك سجل التغييرات، فقط ابحث عن "CVE-2025-44203".

كان مساعد القفل الذي يستخدمه (crea_lock_file()، وهو flock(LOCK_EX) مانع) موجودًا بالفعل في الإصدار 3.0.7 وكان يُستخدم في أجزاء أخرى من الكود. ومع ذلك، لم يستدعِه creadb.php. يقوم التصحيح بأمرين:

  1. يأخذ قفلًا حصريًا حول روتين الإعداد، بحيث تنتظر الطلبات التي تصل معًا دورها بدلاً من السباق. ينفذ الإصلاح ذلك عن طريق استدعاء ذلك المساعد أخيرًا في creadb.php: يمسك القفل قبل توفير المسؤول ويحرره باستخدام distruggi_lock_file() بعده. ما يجعله يعمل هو الفحص بعد أخذ القفل مباشرة. الطلب الذي يدخل أولاً يحذف ini.php بينما لا يزال يحمل القفل، ويعيد كل طلب قراءة ما إذا كان ini.php موجودًا قبل التوفير، لذا فإن الطلبات التي تنتظره في الطابور تأخذ القفل، وتجد الملف قد اختفى بالفعل، وتتخطى الكتلة بأكملها. بحلول الوقت الذي يتم فيه تشغيل الطلب الثاني، يكون الإعداد قد اكتمل بالفعل ولا يفعل شيئًا.
  2. يمرر علامة الصمت إلى استعلامي التحديث (UPDATE) الخاصين بالمسؤول، بحيث حتى إذا فشل أحدهما، لم يعد يطبع بيانات الاعتماد في الرد. ينفذ الإصلاح ذلك عن طريق إضافة وسيطة ثانية، 1، إلى استدعاءات esegui_query() تلك، الاستعلام الذي يعيّن اسم المستخدم والاستعلام الذي يعيّن كلمة المرور والملح. تخبر هذه العلامة غلاف الاستعلام بالبقاء صامتًا عندما يفشل استعلام. لا يزال يسجل الخطأ في سجل الخادم، لكنه يتخطى echo الذي كان سيعرض العبارة الفاشلة، بما في ذلك التجزئة والملح، في الصفحة.
root@kitploit:~
creadb.php:

879: esegui_query("update $tableutenti set nome_utente = '".aggslashdb($admin)."' where idutenti = '1'",1);

897: esegui_query("update $tableutenti set password = '$passw', salt = '$salt', tipo_pass = '5' where idutenti = '1'",1);

المراجع

  • https://nvd.nist.gov/vuln/detail/CVE-2025-44203
  • https://www.cve.org/CVERecord?id=CVE-2025-44203
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-44203
تنزيل الأداة