Sql инъекции в тестировании

29
SQL-инъекции в тестировании

Transcript of Sql инъекции в тестировании

SQL-инъекции

в тестировании

Definition of SQL injection

Внедрение SQL кода - один из

распространенных способов взлома сайтов

и программ, работающих с базами данных

Экранирование символов — это необходимая конвертация

строк для правильного составлении структурированных

текстов, таких как SQL-запрос.

Внедрение SQL, в зависимости от типа системы

управления базами данных и условий внедрения,

может дать возможность атакующему выполнить

произвольный запрос в базу данных, получить

возможность чтения и/или записи файлов и

выполнения произвольных команд на атакуемом

сервере.

Явные SQL инъекции - запрашиваемые данные

отображаются на странице

Профилактика / теория

НЕ использовать

динамических

запросов к базе

НЕ использовать пользовательских данных

в запросах

Профилактика / Практика

1. Не помещать в БД данные без обработки. Это можно сделать либо с помощью подготовленных выражений, либо обрабатывая параметры вручную.

2. Не помещать в запрос управляющие структуры и идентификаторы, введенные пользователем. А заранее прописывать в скрипте список возможных вариантов, и выбирать только из них.

Тестирование

- Подстановка кавычек с запросом и

закомментированным окончанием (/*,--)

- Присоединение запросов оператором UNION

- Проверка на логические уязвимости поисковых

структур (Оператор LIKE - символы ‘&’ и ‘_’)

Классическая blind SQL injection - запрашиваемые

данные не отображаются. Aтакующий манипулирует

логикой работы приложения (true/false).

http://newspaper.com/items.php?id=2

SELECT title, description, body

FROM items

WHERE ID =2

Обнаружение уязвимости

http://newspaper.com/items.php?id=2 and ‘1’=‘1’--

SELECT title, description, body FROM items

WHERE ID =2 and 1=1;

http://newspaper.com/items.php?id=2 and ‘1’=‘2’--

SELECT title, description, body FROM items

WHERE ID =2 and 1=2;

Тестирование

1. Проверки обработки истинных и ложных запросов

2. Проверка подстановкой известных данных

(пользователей, таблиц)

Double blind SQL injection - запрашиваемые данные

не отображаются. Aтакующий манипулирует логикой

работы приложения (true/false) и временными

задержками.

MySQL:

site.com/index.php?id=1 UNION SELECT

IF(SUBSTRING(user_password,1,1) =

CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5

seconds')),null) FROM users WHERE user_id = 1;

Функции временной задержки для других типов БД

MS SQL:

'WAIT FOR DELAY '0:0:10

PostgreSQL:

pg_sleep()

Тестирование

1. Проверка отсутствия временных задержек при

выполнении истинных и ложных запросов

2. Подбор приемлемого времени отклика

3. Проверка подстановкой известных данных

(пользователей, таблиц)

Error based injection

Вывод информации в сообщениях об

ошибках.

Выявление - использование готовых техник

для соответствующих типов баз данных

Вывод версии базы данных в сообщении об ошибках

MySQL: site.com/index.php?id=2’ OR (SELECT COUNT(*) FROM

(SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY MID

(VERSION (), FLOOR(RAND(0)*2), 64)) --

При наличии уязвимости приложение вернет ошибку:

Duplicate entry ‘5.0.45’ for key 1

Запросы для других баз данных

● PostgreSQL:

site.com/index.php?id=1 and(1)=cast(version() as numeric)--● MSSQL:

site.com/index.php?id=1 and(1)=convert(int,@@version)--● Sybase:

site.com/index.php?id=1 and(1)=convert(int,@@version)--● Oracle:

site.com/index.php?id=1 and(1)=(select

upper(XMLType(chr(60)||chr(58)||(select

replace(banner,chr(58)) from sys.v_$version where

rownum=1)||chr(62))) from dual)--

Тестирование

1. Определение версии и типа БД

2. Использование готовых запросов для

определенной БД

Aвтоматизация тестирования

● sqlmap

● WITOOL

● WebCruiser

● Mozilla tool - SQL Inject me

● Netsparker

sqlma

sqlmap

Заключение

● Проверки приложения на уязвимости повысят качество

тестирования

● Тесты быстрые и простые

● Можно использовать инструмент для автоматизированного

тестирования

Полезные ссылки

List of the best SQL scanners and Tools http://www.ma-

no.org/en/content/index_a-list-of-best-free-sql-injection-scanners-and-

tools_1649.php

SQL injection.

http://habrahabr.ru/post/87872/

http://habrahabr.ru/post/130826/

https://www.owasp.org/index.php/Blind_SQL_Injection

https://www.youtube.com/watch?v=eE-W2_M_mMU&feature=youtu.be -

SQL инъекции. Защита и нападение

http://sqadays.com/ru/talk/24027 - Слепые SQL иньекции (sqadays#16)