SQL инъекция . Что это такое?

SQL инъекция . Введение.

Огромное количество веб-ресурсов подвержено атакам с помощью SQL инъекции . И администратору сайта в этом случае приходится пенять лишь на себя. Я знаю немало пользователей сети, которые, не считая себя гуру хакинга, ради забавы сканируют сайты на подобные уязвимости и играют на ошибках интернет-ресурсов.

В этой статье мы и рассмотрим вопрос о том, что такое SQL инъекция и как происходит заражение. Думаю, экскурс о том, что такое SQL инъекция не помешает и начинающим веб мастерам, которые и не подозревает, чем может закончится пренебрежение средствами защиты родного детища.

Немного справки

  • SQL инъекция – это некая техника внедрения кода, если хотите, способ исполнения кода небольших (ну… как получится) размеров, который использует обычно какие-то определённые уязвимости в программном коде (базе данных) какого-то, то есть любого сайта. Это язык, который позволяет приложению общаться с базой данных. Базы данных, конечно, могут отличаться специфичным синтаксисом. Так, MySQL и SQL Server — базы данных, но различия в синтаксисе написания порой ощутимы. 

Сразу нужно отметить один важный пункт — обе указанные базы данных не имеют SQL основы: база данных хранит информацию, а SQL есть форма языка, который запрашивает эти данные из хранилища.

  • База данных хранит в себе всю информацию для конкретного проекта. Таблица — нижеследующая структура — хранит данные для конкретной цели. Ещё ниже в этой маленькой иерархии стоят столбцы (колонки, если желаете): они уже специализируют типы данных и требования к специальным строкам.
  • Строки — это просто отдельные секции данных, вкраплённые в базу данных.
  • Уязвимостью, таким образом,можно считать возможность внедрения дополнительного кода, «дырку» в коде программы, которые могут изменить поведение этой программы не в пользу владельца.

ПРИМЕР

Представьте себе сайт с форумом. База данных должна и содержит все необходимые для этого проекта строки, столбцы и таблицы. Значит, там обязательно есть таблица под названием user, которая хранит в себе все данные зарегистрированных пользователей. А пара столбцов точно имеют шапкой username (имя пользователя), password (пароль) и email. Характеристики столбцов это типы данных, длина, значения по умолчанию и много чего ещё. Нас пока интересует столбец с именами. Путь там будет какой-нибудь пользователь с именем Ivan.

Представьте, что этот пользователь собирается прочесть некую статью, переходя по ссылке. Нажав на неё, его взору откроется нужная статья, но что происходит перед этим? Приложению на стороне сервера нужно обратиться к базе данных, чтобы та передала данные этой новенькой статейки. Вот как будет выглядеть PHP код в файле viewnews.php:

запрос к базе данных

Это самый простой и работающий из примеров, как приложение использует SQL для получения данных из MySQL базы данных. Здесь

  • SELECT — команда MySQL выбрать данные из базы. Есть ещё UPDATE (обновить данные) и DELETE (удалить из базы)
  • title и article — столбцы таблицы, которые и которую мы сейчас выберем. Эти два атрибута говорят базе, что нас интересуют только эта информация
  • FROM  — откуда — указывает базе данных  на конкретную таблицу
  • news  — название таблицы, из которой мы сейчас будем вынимать данные
  •  WHERE  — обусловленный контроль. То есть следующая информация после этой команды задаёт определённые критерии тех данных, которые мы запрашиваем
  • newsid=’$newsid’ — детализация этого контроля. newsid — название столбца, а =’$newsid’ означает, что мы хотим, чтобы текущий ряд столбца совпадал с переменной $newsid.

Зачем нужна SQL инъекция ?

Решаются в основном три задачи в следующей последовательности:

  • Нащупать доступ к запрещённым владельцем сайта зонам, каталогам и папкам сайта. Это жизненно важные конкретные файлы, где хранятся настройки; страницы аутентификации и т.п.
  • Посылается запрос на получение прав к этим страницам
  • Если всё удачно прошло, данные стираются или уничтожаются.


 Как выглядит SQL инъекция ?

Для этого нужно знать, что представляет из себя код конкретной БД. Но для общего представления могу сказать, что это набор некоторых символов, добавляемых хакером в строки кода базы данных. Вот пример внедрения (или расширения, продолжения кода БД):

SQL – инъекция

спасибо slideshare.net за слайд

Для того, кому совсем трудно понять, вспомните сказки про Али-Бабу или про Летучий корабль. Главные герои знали заветные слова-пароли, которые заставляли недвижимое двигаться. Сами устройства понимали произнесённый код, о котором другие участники сказок и не догадывались. Также и здесь, готовый код базы данных работает прекрасно, однако вы уверены, что этот код и как он работает, кто-то ещё не знает лучше и больше?

Как SQL инъекция исполняется ?

Поисковик Google нам здесь поможет лучше всех. Они, поисковые системы, по умолчанию готовы проиндексировать все закоулки сайта. Задача администратора —  скрыть секреты от чужих глаз. Получается не всегда. Только Google на это наплевать. Так и появляются Дорки или Доркс : определённый набор операндов, с помощью которых, прямо из строки поиска можно найти ту уязвимость, в которой вы поднаторели. В их числе «вражеского» сайта может не оказаться, но в списке видимых есть чем хакеру позабавиться. Поисковая выдача таких дорков — и есть потенциальные жертвы  SQL – инъекций.

Вот как такие команды выглядят:

inurl:admin.asp
inurl:login/admin.asp
inurl:admin/login.asp
и т.д. (подробнее по ссылкам сверху)

При вводе таких команд Google укажет на страницы аунтентификации сайтов. Такие странички я бы посоветовал закрыть от глаз простых и случайных посетителей, однако, если попробуете, увидите как ресурсов много.

А теперь пошла и сама SQL инъекция:

‘ or ‘1’=’1
‘ or ‘x’=’x

То есть на странице сайта предпримите попытку ввода пароля:

Username : Admin
Password : ‘or’1’=’1

Вы уже попробовали? Не получится, конечно. Сайты уже к такому давно не уязвимы. Не буду же я прямым текстом со своих страниц учить вас нехорошим делам. Однако в Google этой информации полно, дерзайте. Прочтите ещё раз про дорки и желаю успехов.

Запись опубликована в рубрике Мошенники. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

семь + 17 =