
إثبات للمفهوم (PoC) لـ CVE-2020-24913، ثغرة حقن SQL في qcubed (جميع الإصدارات بما في ذلك 3.1.1) في profile.php عبر المعامل strQuery تسمح لمهاجم غير مصادَق عليه بالوصول إلى قاعدة البيانات عن طريق حقن كود SQL عبر طلب POST مُصمَّم.
إثبات مفهوم (PoC) لـ CVE-2020-24913، وهي ثغرة حقن SQL في qcubed (جميع الإصدارات بما في ذلك 3.1.1) في ملف profile.php عبر معامل strQuery تسمح لمهاجم غير مصادق بالوصول إلى قاعدة البيانات عن طريق حقن كود SQL عبر طلب POST مُعدّل. تم تنفيذ إثبات المفهوم هذا باستخدام قاعدة بيانات MySQL. لم نتمكن من استخدام حمولة استعلامات مُكدّسة (كما يمكن فعله مع PostgreSQL) واضطررنا لاستغلال هذه الثغرة باستخدام نهج زمني (time-based).
في المعامل "strProfileData"، نستخدم الحمولة التالية (غير مشفرة): a:1:{i:0;a:3:{s:12:"objBacktrace";a:1:{s:4:"args";a:1:{i:0;s:3:"pwn";}}s:8:"strQuery";s:38:"(SELECT * FROM (SELECT(SLEEP(10)))CP);";s:11:"dblTimeInfo";s:1:"1";}}
المعامل المعرض للخطر هو "strProfileData". يبدو الطلب الناجح الذي يُرسل إلى الخادم بهذا الشكل. يجب أن تكون المصفوفة المُسلسلة (serialized array) الخاصة بـ PHP المُرسلة في هذا المعامل مُشفرة بـ base64.
بالنسبة للصور التالية، تم فك تشفير معامل strProfileData من base64 ليتمكن القارئ من رؤيته بشكل أوضح، ولكن كما ذكر أعلاه، يجب إرساله مشفرًا بـ base64.
يحتوي الطلب التالي على استعلام يجعل الخادم ينام لمدة 10 ثوانٍ. سنستغل ثغرة حقن SQL عن طريق إرسال استعلام SQL إلى قاعدة البيانات يجبرها على الانتظار لمدة زمنية محددة (بالثواني) قبل الرد.
ولاستخراج البيانات من قاعدة البيانات، سنستخدم بنية IF تجعل قاعدة البيانات تنام وقتًا أطول أو أقصر اعتمادًا على ما إذا كانت الشرط صحيحًا أم لا.
في الصور التالية نحصل على الأحرف الأولى من إصدار قاعدة البيانات (8.0.XX)
نستخدم استعلام SQL التالي: "SLEEP(5-(IF(SUBSTRING(@@version,X,1)='Y',2,5)))" الذي يجعل قاعدة البيانات تنام لمدة (5-2)=3 ثوانٍ إذا كان الشرط صحيحًا، أو يجعلها تنام لمدة (5-5)=0 ثانية إذا كان الشرط خاطئًا. الشرط هو أن الحرف من إصدار قاعدة البيانات في الموضع X يساوي الحرف Y.

