Основы базы данных и SQL, которые каждый безопасник должен знать – Information Security Squad
Основы базы данных и SQL, которые каждый безопасник должен знать

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

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

Чтобы понять, как эта атака работает, вам нужно твердо понять … вы догадались … SQL.

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

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

SQL, который представляет собой язык структурированных запросов, является стандартным языком, используемым для извлечения и обработки данных в системе управления реляционными базами данных (RDBMS).

Доступ к данным осуществляется с помощью запросов, которые позволяют создавать, читать, обновлять и удалять информацию (поэтому по этой причине вы часто увидите веб-приложения, называемые приложениями CRUD).

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

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

Инъекция допускается, когда поля ввода не подвергаются надлежащей дезинфекции или экранированию.

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

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

Формы аутентификации, в которых пользователь входит в систему с именем пользователя и паролем, являются наиболее распространенными типами данных, которые используются, но формы поиска, формы контактов и загрузки файлов – все это потенциальные цели для инъекций.

В первой части этой серии мы рассмотрим основы SQL, чтобы лучше понять типы выполняемых атак.

Анатомия базы данных

Данные, содержащиеся в реляционной базе данных, хранятся в объектах, называемых таблицами.

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

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

Поля, которые являются столбцами таблицы, представляют собой конкретную информацию для каждой записи.

Это лучше иллюстрируется в следующей таблице «Users»:

Эта таблица содержит три записи и четыре поля; каждому пользователю в базе данных присваивается идентификатор, имя, имя пользователя и пароль.

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

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

Типы данных и операторы

Чтобы понять данные, с которыми мы работаем, нам нужно знать различные типы данных, используемых в SQL.

Хотя точные типы данных различаются между различными системами баз данных, в большинстве случаев они достаточно схожи, чтобы сказать, что они собой представляют; Обычно они классифицируются по тексту, числу и дате.

Операторы позволяют нам манипулировать и взаимодействовать с данными в SQL.

Существует пять основных категорий операторов: арифметические, поразрядные, сравнительные, составные и логические.

Большинство из них аналогичны другим языкам программирования, но существует несколько отличий.

Операторы и синтаксис

Операторы SQL – это код, который передается в базу данных для извлечения или изменения данных. Давайте рассмотрим следующий запрос и сломаем его:

 SELECT * FROM Users WHERE Name=’John Smith’; 

Первая часть этого оператора (SELECT * FROM Users) выбирает все поля из таблицы Users.

Предложение WHERE указывает, что мы хотим видеть только информацию из записи, где «John Smith» находится в поле «Name».

SQL использует одинарные кавычки для строк, хотя большинство систем баз данных разрешают двойные кавычки, а точка с запятой отмечает конец оператора.

Следует отметить, что ключевые слова, такие как SELECT и WHERE, нечувствительны к регистру.

Комментарии в SQL могут быть записаны как однострочные или многострочные:

–this is a single line comment
SELECT * FROM Users;
/*this is a
multi-line comment*/

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

Следующая инъекция обходит необходимость ввода пароля:

 SELECT * FROM Users WHERE Username=” or 1=1– AND Password=”; 

Это вернет все записи из базы данных, так как пустая строка или 1 = 1 всегда оценивается как истина, а двойные тире (-) закомментируют поле password.

Существуют также ключевые слова, которые существуют для упрощения организации данных, таких как MIN и MAX, BETWEEN, и ORDER BY.

Давайте посмотрим на следующую таблицу под названием LoginSessions:

Предположим, мы хотели узнать, кто был зарегистрирован последним, и тогда – запрос ниже вернет идентификатор, имя пользователя и самый короткий и самый длинный сеанс между двумя датами:

 SELECT ID, Username, MIN(SessionLength), MAX(SessionLength)
FROM LoginSessions
WHERE LoginDate BETWEEN ‘2018-01-01’ AND ‘2018-05-01’
GROUP BY ID
ORDER BY MAX(SessionLength) DESC;

GROUP BY объединяет строки BY ID и ORDER BY MAX (SessionLength). DESC показывает нам пользователя с самым длинным сеансом (нисходящий, а не восходящий).

Другие полезные операторы включают INSERT INTO, который вставляет новые записи в таблицу UPDATE, которая обновляет существующие записи в таблице и DELETE, которая используется для удаления записей в таблице.

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

Злоумышленник может вставить новую запись, указывающую, что они купили что-то из интернет-магазина, например, и утверждают, что они никогда не получали продукт и не получали его за это.

Если они действительно хотели нанести максимальный урон, можно использовать оператор DROP.

DROP TABLE удалит существующую таблицу в базе данных, а DROP DATABASE удалит всю базу данных.

 

Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.

 

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

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