Обмен технологиями

Вторичная инъекция SQL-инъекции

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

вторичная инъекция

Вторичные уязвимости внедрения — это форма уязвимости безопасности, широко распространенная в веб-приложениях. По сравнению с уязвимостью первичного внедрения, уязвимость вторичного внедрения сложнее обнаружить, но она имеет ту же силу атаки, что и уязвимость первичного внедрения.

Хакеры создают данные в виде отправки запросов пакетов данных HTTP на сервер для обработки в браузере или другом программном обеспечении. Отправленный запрос пакета данных может содержать операторы SQL или команды, созданные хакером.
Серверное приложение будет хранить информацию данных, предоставленную хакером, обычно в базе данных. Основная функция сохраненной информации данных — предоставить исходные входные данные приложению для выполнения других функций и ответа на запросы клиента.
Хакер отправляет на сервер второе сообщение с данными запроса, которое отличается от первого.
После того, как сервер получит информацию второго запроса, отправленную хакером, для обработки запроса сервер запросит информацию данных, уже хранящуюся в базе данных, и обработает ее, вызывая оператор SQL или команду, созданную хакером в первом запросе. быть в службе, выполненной в терминальной среде.
Сервер возвращает информацию о результатах выполнения. Хакеры могут использовать возвращенную информацию о результатах выполнения, чтобы определить, была ли успешно использована вторичная уязвимость внедрения.

Таким образом, вторичная инъекция происходит из-за невозможности отфильтровать данные при их сохранении в базе данных. Сначала созданный запрос специального символа отправляется для сохранения в базе данных, а затем, когда отправляется второй запрос, символы, которые будут сохранены. были отправлены в базу данных впервые. Возникает функция, формирующая новый оператор sql для выполнения.В качестве примера возьмем уровень sqli-labs 24.

SQLi-лаборатории меньше-24

1. Нажмите ниже, чтобы зарегистрировать пользователя.


Зарегистрированное имя пользователя здесь — admin'#.

         

На этом этапе мы проверяем базу данных, зарегистрированные пользователи сохранены, а пароль администратора — DDD.

2. Войдите под зарегистрированной учетной записью и измените пароль на ccccc.

В это время появится сообщение о том, что пароль был успешно изменен.

В это время мы обнаружили, что пароль администратора был изменен на ccccc, но пароль нашего зарегистрированного пользователя admin'# не был изменен.

Причина уязвимости

1. При регистрации пользователя разрешены специальные символы, такие как ' и #.

2. В исходном коде страницы смены пароля обнаружено наличие очевидной уязвимости внедрения.

$sql = "ОБНОВЛЕНИЕ пользователей УСТАНОВИТЬ ПАРОЛЬ='$pass', где имя пользователя='$username' и пароль='$curr_pass' ";

Когда мы входим в учетную запись admin'# и меняем пароль, оператор sql становится следующим: #Закомментируйте следующий код, чтобы пароль пользователя admin был изменен на ccccc

$sql = "ОБНОВЛЕНИЕ пользователей УСТАНОВИТЬ ПАРОЛЬ='$pass', где имя пользователя='admin'#' и пароль='$curr_pass' ";

Исходная ссылка: https://blog.csdn.net/qq_44159028/article/details/114325805.