Разберем на практике, как можно достать с сайта логины, пароли, данные банковских карт, и прочие поля, которые люди заполняют на сайтах.
Всем салют, дорогие друзья! В сегодняшней статье мы с вами разберемся, как выполнить атаку на базу данных сайта, которая и называется SQL-injection.
Я не рекомендую вам пытаться находить уязвимости на сайтах, которые вам не принадлежат, если вы не имеете разрешение на проведение подобных действий. Это уголовно наказуемо.
Ну, а теперь давайте начнем!
Что же такое SQL инъекция?
Говоря простым языком — это атака на базу данных, которая позволит выполнить некоторое действие, которое не планировалось создателем скрипта.
✅ Чтобы было проще понять, вот вам пример из жизни:
Отец написал в записке маме, чтобы она дала Васе 100 рублей и положил её на стол. Переработав это в шуточный SQL язык, мы получим:
ДОСТАНЬ ИЗ кошелька 100 РУБЛЕЙ И ДАЙ ИХ Васе
Так-как отец плохо написал записку (Корявый почерк), и оставил её на столе, её увидел брат Васи — Петя. Петя, будучи хакер, дописал там «ИЛИ Пете» и получился такой запрос:
ДОСТАНЬ ИЗ кошелька 100 РУБЛЕЙ И ДАЙ ИХ Васе ИЛИ Пете
Мама прочитав записку, решила, что Васе она давала деньги вчера и дала 100 рублей Пете. Вот простой пример SQL инъекции из жизни :) Не фильтруя данные (мама еле разобрала почерк), Петя добился профита.
За дело!
Итак, дабы не взламывать чужой сайт, я развернул собственный тестовый стенд на котором запустим DVWA.
Damn Vulnerable Web Application (DVWA) — это веб-приложение (сайт) на PHP/MySQL, которое чертовски уязвимо. Его главная цель — помочь хакерам протестировать их навыки и инструменты в легальном окружении
Теперь откроем браузер и перейдем по адресу, на котором у нас висит DWVA. Обычно это один из двух адресов: 127.0.0.1 или же 192.168.1.100.
Мы увидим вот такое окно:
Теперь введем нужные для входа данные:
login: admin
password: password
Сразу же бежим в настройки. Изменяем уровень безопасности на "low":
Теперь можно потренироваться с SQL-Injection
Переходим на страницу "SQL Injection":
В поле User ID мы вводим значения: 1 или 2 или 3 и тд
В результате наш сервис выводит нам данные о пользователе.
Скорее всего, скрипт обработки на стороне сервера выглядит примерно так:
<?php .... <Лишнее скрыто> .... mysql_query("SELECT id, First, Surname FROM db where 'id' = '<наш запрос>'"); .... ?>
Подставляя цифры 1, 2 или 3, у нас получается: where 'id'='<наше число>'
Данный запрос отрабатывает без проблем. Мы получаем:
Теперь, давайте сделаем так:
'1 or '1'='1
Опа! Приложение вдруг вывело ВСЕ данные из своей БД
⚠️ В реальной жизни вместо этих цифр могут быть логины, пароли, данные банковских карт, и прочие поля, которые вы вводите на сайтах. Так преступник может получить Ваши данные, которые Вы доверили сайту.
Давайте разберемся, почему так случилось?
Как мы помним, скрипт на стороне сервера выглядит примерно так:
<?php
....
mysql_query("SELECT id, First, Surname FROM db where 'id' = '<наш запрос>'");
....
?>
Мы проходим по всей базе данных, забираем значения id, First, Surname из таблицы db, которые удовлетворяют части where. Например id = 1
Но на стороне сервера отсутствует фильтрация входных данных!
И наши записи из поля ввода попали сразу в скрипт. Получилось следующее:
SELECT id, First, Surname FROM db where 'id' = '' OR '1'='1'
Получили простое логическое выражение:
Ложь или Истина = Истина (всегда!)
Поэтому, когда происходит запрос, из БД выбирают данные, удовлетворяющие условию, которое всегда истина. А поскольку условие всегда истина - выводятся ВСЕ значения из текущей таблицы. Магия, не иначе.
✅ Итак, основная идея - сделать инъекцию SQL кода в код запроса, тем самым изменив его так, что бы он вывел данные, к которым мы не должны были иметь доступ. Разумеется, этот пример "детский" и будет довольно редко встречаться в вашей реальной практике (хотя, кто знает... на каждого из нас хватит плохого кода от разработчиков).
Я рекомендую вам узнать больше об инъекциях, найти еще примеры, узнать о таких штуках, как комментарии, научиться составлять сложные запросы, и, самое главное, тренироваться на этой машине. Постепенно поднимать уровень безопасности до high (там появится фильтрование входных данных, которое нужно обходить).
В реальной жизни эта ошибка очень распространена и входит в топ 10 уязвимостей. Именно ее простота и огромная отдача сделали ей такую популярность.
Opmerkingen