Здравствуйте, дорогие друзья.
Я хотел бы показать Вам достаточно хитрую SQL-инъекцию. Нам понадобится уязвимое веб-приожение DVWA.
Поставим низкий уровень безопасности «low»:
Я заинтересован в среднем уровне, но хотел бы показать, как все работает на низком. Откроем вкладку «SQL Injection», и введем единицу «1»:
Как видим, страница отображается корректно.
Теперь проведем инъекцию через URL, вставив символ кавычки «'»:
Видим ошибку.
Теперь добавим истинное утверждение, которое будет выглядеть как: «1' and 1=1%23»:
Оно является истинным, и страница отображается корректно.
Если мы добавим цифру «0» в выражение, то мы получим неправильную страницу, а это значит, что мы можем сделать инъекцию:
Мы также можем использовать выражение «order by 1»:
Получаем корректный вывод страницы.
Добавим к выражению несколько нулей, а именно «order by 10000»:
Вывод некорректный, и это значит, что веб-страница уязвима к SQL-инъекциям.
Попытаемся выяснить количество столбцов, и введем значение 3:
На странице отображается, что данный столбец неизвестный.
Вставим цифру 2:
Страница отобразилась правильно. Это значит, что на странице 2 столбца.
Мы можем писать утверждение с выражением «union select», которое будет выглядеть как: «union select column name,2 from information_schema.columns where table name = 'users' %23».
Для начала пропишем в URL «union select 1,2», и посмотрим на вывод:
Мы можем выводить информацию в первом и втором столбце.
Я хочу выбрать базу данных в 1-м столбце:
Имя искомой базы данных – «dvwa».
Для вывода более полной информации нам пригодится выражение: «union select table_name,2 from information_schema.tables where table_schema = 'dvwa'»:
Как видим, я получил столбцы: «guestbook», и «users».
И теперь мы можем попробовать найти столбцы для каждой из этих таблиц. Это будет Вашим домашним заданием.
Я знаю, что в таблице «users», есть столбцы «username», и «password». Для инъекции мне понадобится выражение: «union select user, password from users»:
Как Вы можете видеть, произошел вывод всех паролей и пользователей, которые есть в таблице «users».
Усложним задачу и изменим уровень безопасности на средний «medium»:
Перейдем на вкладку SQL Injection и повторим те же шаги, что и на уровне «low»:
При вводе цифры 1, страница работает корректно.
А когда мы прописываем кавычку в URL, то видим ошибку:
Данная ошибка отличается от предыдущей, так как страница жалуется на введенную кавычку.
Добавим в выражение истинное значение «and 1=1%23». Мы должны увидеть правильную страницу:
Как Вы заметили, страница неправильная.
Попробуем изменить кавычку на код HTML. Символ кавычки «'», будет эквивалентен %27:
И я снова получаю ту же ошибку.
Использование SQL-инъекций может отличаться от сайта к сайту. Это метод проб и ошибок.
Вовсе избавимся от кавычек в строке URL:
Страница отображается корректно.
Изменим выражение на ложное, заменив цифру 1 на 2:
Видим вывод, который говорит нам о том, что страница уязвима к SQL-инъекциям. Суть в том, что мы не используем кавычку, а сразу добавляем выражение.
Продолжим исследование, и введем выражение «union select 1,2»:
Этот вывод говорит о том, что мы можем выводить информацию в 1-м и 2-м столбцах.
Попытаемся получить список таблиц, которые нам необходимы. Это делается с помощью выражения «union select table_name, 2 from information_schema.tables»:
Отлично, и мы добились того же результата, что и раньше.
На этом все. Всем хорошего дня!