top of page

Взлом сайтов через SQL-injection

Разберем на практике, как можно достать с сайта логины, пароли, данные банковских карт, и прочие поля, которые люди заполняют на сайтах.

Всем салют, дорогие друзья! В сегодняшней статье мы с вами разберемся, как выполнить атаку на базу данных сайта, которая и называется 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 уязвимостей. Именно ее простота и огромная отдача сделали ей такую популярность.

 


202 просмотра

Недавние посты

Смотреть все

Comments


bottom of page