
Очень часто организации, будучи сильно ограниченными в финансах, вынуждены обращаться к публичным открытым проектам (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.
Поделиться публикацией в социальных сетях:
Хотите обсудить свой проект?
Заполните форму, и наши менеджеры бесплатно проконсультируют вас.