SQL-Injection

  • 11 апр. 2013 г.
  • 3647 Слова
SQL Injections
Введение

Чем займемся?
• • • • Обзор уязвимостей Классика SQL-injection атак Blind SQL Injection. Выполнение команд на сервере с помощью встроенных функций MySQL,MSSQL при эксплуатировании уязвимости. • Обход фильтров • WAF

Подводя итоги 2009
По данным компании CENZIC • 25% атак приходится на SQL-Injection • 17% атак приходится на XSS • 14% атак на ошибки в авторизации• 12% на Переполнение буффера • 8% отдается WEB браузерам

Подводя итоги 2009
• Если представить это в виде диаграммы, то получим вот что:

На сегодняшний день

На сегодняшний день

Классика SQL-Injection атак
Что такое SQL, базы данных и как всем этим пользоваться.

Сервер. PHP. MySQL.
• • • • Linux Apache MySQL PHP

LAMP

PHP: Hypertext Preprocessor (устар : Personal HomePage Tools)

Windows – DENWER,XAMPP

Что такое SQL?
• SQL (Structured Query Language) – структурированный язык запросов. • Получение данных из вне • Формирование данных • Посылка запроса • Обработка запроса • Получение ответа от сервера

Структура базы данных
COLUMNS

ID
RECORD

name
• admin • loga

pass
• pass • invar

•1 • 921

FIELDS

Синтаксис языка SQL
• CREATETABLE имя таблицы (имя поля тип, имя поля тип, ...)
CREATE TABLE users (name char (15), password char (10));

• DROP TABLE имя таблицы • INSERT INTO имя таблицы (имя поля1, имя поля2, ...) VALUES ('значение1','значение2',...)
• INSERT INTO users (name, password, email) VALUES ('root', 'pass', 'admin@localhost.com'); ИЛИ

INSERT INTO имя таблицы SET `имя поля`=‘значение1’, `имяполя2`=‘значение2’..;

Синтаксис языка SQL
• DELETE FROM имя_таблицы WHERE выражение
DELETE FROM users WHERE name='root'; DELETE FROM admins WHERE post=2;

• SELECT * FROM имя_таблицы WHERE выражение
SELECT * FROM users; SELECT name, email FROM users; SELECT name FROM admins WHERE post>2; SELECT * FROM admins WHERE name='root';

• UPDATE имя_таблицы SET имя поля1='значение1', имя поля2='значение2',... WHERE выражениеUPDATE users SET name='bad-admin' WHERE password='qwerty';

Наглядный пример
http://invar/ex1/news.php?id=1

WEB-сервер

БД

SELECT * FROM news WHERE id=‘1’

Сережа

Команда INVAR
Аня

Леша

Наглядный пример
http://invar/ex1/news.php?id=1’+UNION+SELECT+1,title,3+FROM+news+WHERE+id>1/* WEB-сервер

БД
SELECT * FROM news WHERE id=‘1’+UN…

Успешная инъекция

Основы SQLInjection

Основы SQL Injection
• Внедрение операторов SQL
Способ нападения на базу данных в обход межсетевой защиты. В этом методе параметры, передаваемые к базе данных через Web-приложения, изменяются таким образом, чтобы изменить выполняемый SQL запрос.

• Выделяют два вида SQL Injection
SQL Injection в строковом параметре
– Примеры:

» SELECT * FROM table WHERE name = “$_GET*‘name’+”;» SELECT * FROM table WHERE pass = ‘$pass’;
SQL Injection в числовом параметре
– Примеры: » SELECT * FROM table WHERE news = 123; » SELECT * FROM table WHERE id=2 LIMIT 1, $_POST*‘limit’+;

Основы SQL Injection
• Эксплуатацию SQL Injection разделяют в зависимости от типа используемой СУБД и условий внедрения
– – – – Уязвимый запрос может обрабатывать Insert, Update, Delete Инъекция можетбыть в любом участке SQL-запроса Blind SQL Injection Особенности языка SQL, используемого в разных СУБД

• Уязвимость SQL-инъекция – это не только уязвимость, характерная для Webприложений!

Основы SQL Injection
• Способы обнаружения SQL-инъекций
– Тестирование функций – Фаззинг (fuzzing) – Статический/динамический/ручной анализ исходного кода

• Примеры тестирования функций
–http://site/?param=1' http://site/?param=1 order by 1000 http://site/?param=1” http://site/?param=1 AND 1=1— http://site/?param=1'# http://site/?param=1'-http://site/?param=1 AND 1=2-- http://site/?param=1'/* http://site/?param=1' AND '1'='1 и т.д.

Основы SQL Injection
• Поиск уязвимости
– Сообщение о ошибке
You have an error in your SQL syntax; check the manual that corresponds to...
tracking img