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


Поделиться публикацией в социальных сетях:

Хотите обсудить свой проект?

Заполните форму, и наши менеджеры бесплатно проконсультируют вас.




    our BLOG

    Последние публикации

    Категории