Календарь на Май 2024 года: calendar2008.ru/2024/may/
Навигация
Главная »  Windows 

Базовые sql-инъекции в приложениях, использующих язык SQL. Руководство для чайников


Источник: habrahabr
rgen3

Примечание переводчика


Данная работа является переводом части работы Chris Anley Advanced SQL Injection In SQL Server Applications. (прямая ссылка для скачивания)
В последующих статьях, при наличии свободного времени, данный перевод будет доведен до конца. P.S. Перевод будет интересен более в образовательных и исторических целях. Оригинальное название статьи: Продвинутые SQL-инъекции в приложениях, использующих язык SQL.

Аннотация

В данной статье подробно рассматриваются общие способы "SQL-инъекции", для известной платформы Microsoft Internet Information Server/Active Server Pages/SQL Server. В ней обсуждаются различные варианты использования инъекции SQL в приложениях и объясняются методы проверки данных, а также защита баз данных, в которых могут быть использованы инъекции.

Введение

Structured Query Language (SQL) - это структурированный язык, используемый для взаимодействия с базами данных. Существует множетсво "диалектов" языка SQL, но сегодня, в основном, все они построены на основе стандарта SQL-92, один из ранних ANSI стандартов. Основной операционный блок SQL - запрос (query), который является совокупностью выражений, которые обычно возвращают совокупность результатов (result set). SQL выражения могут изменять структуру баз данных (используя выражения языков определения данных - DLL) и управлять их содержанием (используя выражения языков манипулирования данными - DML). В данной работе, мы рассмотрим transact-SQL, использующийся в Microsoft SQL Server. SQL-инъекции возможны в том случае, когда злоумышленник может вставить свой SQL-код в запрос (query), для управления данными, которые отправляются в приложение. Обычное SQL выражение выглядит следующим образом:
select id, forename, surname from authors
Это выражение берет "id", "forename" и "surname" из колонок таблицы "authors" и возвращает все строки в таблице. Выборка может быть ограниченна, определенным "автором", например:
select id, forename, surname from authors where forename = 'john' and surname = 'smith' 
Необходимо отметить, что в данном запросе строковые литералы разделены одинарной кавычкой. Предполагается, что "forename" и "surrname" являются данными, которые вводятся пользователем. В данном случае злоумышленник будет способен внести собственный SQL-запрос, путем добавления собственных значений в приложение. Например:
 Forename: jo'hn Surname: smith
Тогда выражение примет следующий вид:
select id, forename, surname from authors where forename = 'jo'hn' and surname = 'smith'
После того, как база данных попытается обработать подобный запрос будет возвращена следующая ошибка: 
Server: Msg 170, Level 15, State 1, Line 1 Line 1: Incorrect syntax near 'hn'. 
Причина ошибки будет заключаться в том, что введенная одиночная кавычка испортит структуру разделителей в запросе. Таким образом, база данных безуспешно попытается выполнить команду "hn", которая приведет к ошибке. В итоге, если злоумышленник введет в форму следующую информацию:
Forename: jo'; drop table authors-- Surname: 
Таблица "authors" будет удалена, почему это произойдет мы рассмотрим позже. Вам может показаться, что если мы будем удалять одиночные кавычки из формы ввода, а также "заменять" их, это может решить нашу проблему. И вы будете правы, однако существуют некоторые проблемы с использованием этого способа, в качестве решения данной задачи. Во-первых, не вся вводимая пользователем информация является "строками" (strings). Если пользовательская форма будет содержать "id" автора, который обычно является числом. Например, наш запрос может выглядеть следующим образом:
select id, forename, surname from authors where id=1234 
В данном случае взломщик беспрепятственно сможет добавить любое SQL-выражение в после численных данных. В других разновидностях SQL-запросов, используются различные разграничители. Например, в Microsoft Jet DBMS разграничителем будет символ "#". Во-вторых, "избегание" ("escaping") одиночных кавычек вовсе не самый простой способ защиты, как это может показаться сперва. Подробнее об этом мы поговорим далее. Приведем пример на основе страницы входа на основе Active Server Pages (ASP), которая при помощи SQL получает доступ к базе данных, чтобы авторизовать пользователя в каком-либо приложении. Приведем код страницы, содержащей форму входа, в которую вводятся имя пользователя и пароль.
  Login Page    

Login

Username:
Password:
Ниже код (process_login.asp), определяющий корректность введенных данных.
     

 

 Все драйверы прошедшей недели (с 8 по 14 января 2007 года) (download).
 Microsoft провела "черную" PR-атаку против Google.
 Резервное копирование баз MySQL.
 Запуск Windows под Linux KVM.
 Вышла Ubuntu 13.04 "Raring Ringtail".


Главная »  Windows 

© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено.