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

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

    Категории

    Privacy Preference Center

    Strictly Necessary

    These cookies are essential for websites built on Wordpress to perform their basic functions. These include those required to allow registered users to authenticate and perform account related functions.

    wordpress_test_cookie, wordpress_{hash}, wordpress_logged_in_{hash}, wp-settings-{user_id}, wp_sharing_{id}

    Close your account?

    Your account will be closed and all data will be permanently deleted and cannot be recovered. Are you sure?