
Эксплойт для 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-запрос. Этот PoC выполняется с использованием базы данных MySQL. Нам не удалось использовать stacked-queries-payload (как это можно сделать с postgres), и нам пришлось эксплуатировать эту уязвимость с помощью подхода, основанного на временных задержках.
В параметре "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". Успешный запрос к серверу выглядит так. 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.


