Публикации - SQL-инъекция

Особенности ключевого слова UNION

Рассмотрим еще один уязвимый запрос к БД.

$query = "SELECT name FROM $tbl_news WHERE url = '".$file."'";

Тогда строка запроса будет выглядеть следующим образом:

http://127.0.0.1/shablon/index.php?url=contact%27+UNION+SELECT+name+FROM+system_accounts+WHERE+name+!=%27contact

Где:
%27 — это закрывающаяся (в начале запроса) и открывающаяся (в конце) кавычка. Т.е. реально выполнится следующий запрос:

SELECT name FROM $tbl_news WHERE url = 'contact' UNION SELECT pass FROM system_accounts WHERE name != 'contact'

Особенности работы команды UNION заключаются в том, что количество столбцов двух склеиваемых таблиц должно совпадать. До сих пор мы склеивали один столбец из таблицы $tbl_news с одним столбцом таблицы system_account. Но в реальности, мы не всегда знаем количество столбцов основной таблицы.

Тогда SQL-инъекция осуществляется путем подбора количества элементов полей:

http://127.0.0.1/shablon/index.php?url=contact%27+UNION+SELECT+name,name,name,name,name,name,name,name+FROM+system_accounts+WHERE+name+!=%27contact

Параметр name нужно повторить столько раз, сколько столбцов в таблице $tbl_news (подбирается экспериментально до тех пор, пока запрос не выполнится). Если же мы не знаем имён столбцов таблицы system_accounts, то можно SQL-инъекцию можно произвести следующим образом:

http://127.0.0.1/shablon/index.php?url=contact%27+UNION+SELECT+1,1,1,1,1,1,1,1+FROM+system_accounts+WHERE+name+!=%27contact

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. PHP Pro 3. Михалькевич А.В. PHP PRO –Мн. :ОДО «Центр Обучающих Технологий», 2016, 381 с.
2. Java. Промышленное программирование: практическое пособие Блинов, И. Н. / И. Н. Блинов, В. С. Романчик. - Мн. : УниверсалПресс, 2007. - 704 с.