Найти тему

#12 SQL-инъекции. Исследование более сложных SQL-инъекций.

Здравствуйте, дорогие друзья.

Я хотел бы показать Вам достаточно хитрую SQL-инъекцию. Нам понадобится уязвимое веб-приожение DVWA.

Поставим низкий уровень безопасности «low»:

-2

Я заинтересован в среднем уровне, но хотел бы показать, как все работает на низком. Откроем вкладку «SQL Injection», и введем единицу «1»:

-3

Как видим, страница отображается корректно.

Теперь проведем инъекцию через URL, вставив символ кавычки «'»:

-4

Видим ошибку.

Теперь добавим истинное утверждение, которое будет выглядеть как: «1' and 1=1%23»:

-5

Оно является истинным, и страница отображается корректно.

Если мы добавим цифру «0» в выражение, то мы получим неправильную страницу, а это значит, что мы можем сделать инъекцию:

-6

Мы также можем использовать выражение «order by 1»:

-7

Получаем корректный вывод страницы.

Добавим к выражению несколько нулей, а именно «order by 10000»:

-8

Вывод некорректный, и это значит, что веб-страница уязвима к SQL-инъекциям.

Попытаемся выяснить количество столбцов, и введем значение 3:

-9

На странице отображается, что данный столбец неизвестный.

Вставим цифру 2:

-10

Страница отобразилась правильно. Это значит, что на странице 2 столбца.

Мы можем писать утверждение с выражением «union select», которое будет выглядеть как: «union select column name,2 from information_schema.columns where table name = 'users' %23».

Для начала пропишем в URL «union select 1,2», и посмотрим на вывод:

-11

Мы можем выводить информацию в первом и втором столбце.

Я хочу выбрать базу данных в 1-м столбце:

-12

Имя искомой базы данных – «dvwa».

Для вывода более полной информации нам пригодится выражение: «union select table_name,2 from information_schema.tables where table_schema = 'dvwa'»:

-13

Как видим, я получил столбцы: «guestbook», и «users».

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

Я знаю, что в таблице «users», есть столбцы «username», и «password». Для инъекции мне понадобится выражение: «union select user, password from users»:

-14

Как Вы можете видеть, произошел вывод всех паролей и пользователей, которые есть в таблице «users».

Усложним задачу и изменим уровень безопасности на средний «medium»:

-15

Перейдем на вкладку SQL Injection и повторим те же шаги, что и на уровне «low»:

-16

При вводе цифры 1, страница работает корректно.

А когда мы прописываем кавычку в URL, то видим ошибку:

-17

Данная ошибка отличается от предыдущей, так как страница жалуется на введенную кавычку.

Добавим в выражение истинное значение «and 1=1%23». Мы должны увидеть правильную страницу:

-18

Как Вы заметили, страница неправильная.

Попробуем изменить кавычку на код HTML. Символ кавычки «'», будет эквивалентен %27:

-19

И я снова получаю ту же ошибку.

Использование SQL-инъекций может отличаться от сайта к сайту. Это метод проб и ошибок.

Вовсе избавимся от кавычек в строке URL:

-20

Страница отображается корректно.

Изменим выражение на ложное, заменив цифру 1 на 2:

-21

Видим вывод, который говорит нам о том, что страница уязвима к SQL-инъекциям. Суть в том, что мы не используем кавычку, а сразу добавляем выражение.

Продолжим исследование, и введем выражение «union select 1,2»:

-22

Этот вывод говорит о том, что мы можем выводить информацию в 1-м и 2-м столбцах.

Попытаемся получить список таблиц, которые нам необходимы. Это делается с помощью выражения «union select table_name, 2 from information_schema.tables»:

-23

Отлично, и мы добились того же результата, что и раньше.

На этом все. Всем хорошего дня!