Дані є однією з найважливіших складових інформаційних систем. Веб-програми, що працюють на базі даних, використовуються організацією для отримання даних від клієнтів. SQL є абревіатурою мови структурованих запитів. Він використовується для отримання та управління даними в базі даних.
Що таке ін'єкція SQL?
SQL Injection - це атака, яка отруює динамічні оператори SQL для коментування певних частин оператора або додавання умови, яка завжди буде істинною. Він використовує недоліки дизайну в погано розроблених веб-додатках, щоб використовувати оператори SQL для виконання шкідливого SQL-коду.
У цьому посібнику ви дізнаєтесь техніки введення SQL та способи захисту веб-програм від таких атак.
- Як працює ін’єкція SQL
- Діяльність злому: SQL вводить веб-додаток
- Інші типи атак SQL Injection
- Засоби автоматизації для ін'єкції SQL
- Як запобігти атакам ін'єкції SQL
- Діяльність злому: використовуйте Havji для ін'єкції SQL
Як працює ін’єкція SQL
Типи атак, які можна виконати за допомогою ін'єкції SQL, залежать від типу механізму баз даних. Атака працює на динамічні оператори SQL . Динамічний оператор - це оператор, який генерується під час виконання за допомогою пароля параметрів із веб-форми або рядка запиту URI.
Давайте розглянемо просту веб-програму з формою входу. Код форми HTML наведено нижче.
ТУТ,
- У наведеній вище формі приймається адреса електронної пошти, а потім пароль передається до файлу PHP з іменем index.php.
- Він має можливість зберігати сеанс входу в файлі cookie. Ми зробили це за допомогою прапорця Remember_me. Він використовує метод post для подання даних. Це означає, що значення не відображаються в URL-адресі.
Давайте припустимо, що заява на сервері для перевірки ідентифікатора користувача виглядає наступним чином
ВИБЕРІТЬ * ВІД користувачів, ДЕ пошта = $ _POST ['електронна пошта'] І пароль = md5 ($ _ POST ['пароль']);
ТУТ,
- У наведеному вище операторі безпосередньо використовуються значення масиву $ _POST [], не дезінфікуючи їх.
- Пароль зашифрований за допомогою алгоритму MD5.
Ми проілюструємо атаку ін'єкції SQL за допомогою sqlfiddle. Відкрийте URL-адресу http://sqlfiddle.com/ у своєму веб-браузері. Ви отримаєте наступне вікно.
Примітка: вам доведеться писати оператори SQL
Крок 1) Введіть цей код на лівій панелі
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Крок 2) Клацніть Схема побудови
Крок 3) Введіть цей код у правій області
вибрати * серед користувачів;
Крок 4) Клацніть Запустити SQL. Ви побачите наступний результат
Припустимо, користувацькі матеріали Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. і 1234 як пароль. Оператор, який буде виконано щодо бази даних, буде
SELECT * FROM users WHERE email = ' Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. ' І пароль = md5 ('1234');
Наведений вище код можна використати, прокоментувавши частину пароля та додавши умову, яка завжди буде істинною. Припустимо, зловмисник подає наступне введення в поле адреси електронної пошти.
Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. ' АБО 1 = 1 ОБМЕЖЕННЯ 1 - ']
xxx для пароля.
Сформований динамічний оператор буде таким.
SELECT * FROM users WHERE email = ' Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. ' АБО 1 = 1 ОБМЕЖИТИ 1 - '] І пароль = md5 (' 1234 ');
ТУТ,
- Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. закінчується однією лапкою, яка доповнює рядкову лапку
- АБО 1 = 1 ОБМЕЖЕННЯ 1 - умова, яка завжди буде істинною і обмежує повернені результати лише одним записом.
- - 'AND ... - це коментар SQL, який усуває частину пароля.
Скопіюйте вищезазначений оператор SQL та вставте його в текстове поле SQL FiddleRun, як показано нижче
Діяльність злому: SQL вводить веб-додаток
У нас є простий веб-додаток на http://www.techpanda.org/, який є вразливим до атак SQL Injection лише для демонстрації. Наведений вище код форми HTML взятий зі сторінки входу. Додаток забезпечує базову безпеку, таку як дезінфекція поля електронної пошти. Це означає, що наш наведений вище код не можна використовувати для обходу логіна.
Щоб обійти це, ми можемо замість цього використати поле пароля. На діаграмі нижче показано кроки, які ви повинні виконати
Припустимо, зловмисник подає наступні дані
- Крок 1: Введіть Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. як електронну адресу
- Крок 2: Введіть xxx ') АБО 1 = 1 -]
- Клацніть на кнопку Надіслати
- Вас перенаправлять на інформаційну панель
Сформований оператор SQL буде таким
SELECT * FROM users WHERE email = ' Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. ' І пароль = md5 ('xxx') АБО 1 = 1 -] ');
Діаграма нижче ілюструє заяву.
ТУТ,
- Заява розумно передбачає, що використовується шифрування md5
- Завершує одинарну лапку та заключну дужку
- Додає до твердження умову, яка завжди буде істинною
Загалом, успішна атака SQL Injection намагається виконати низку різних методів, таких як продемонстровані вище, для успішної атаки.
Інші типи атак SQL Injection
Ін’єкції SQL можуть завдати більшої шкоди, ніж просто передаючи алгоритми входу. Деякі з нападів включають
- Видалення даних
- Оновлення даних
- Вставка даних
- Виконання команд на сервері, які можуть завантажувати та встановлювати шкідливі програми, такі як троянські програми
- Експорт цінних даних, таких як дані кредитної картки, електронна пошта та паролі, на віддалений сервер зловмисника
- Отримання даних для входу користувачів тощо
Наведений перелік не є вичерпним; це просто дає вам уявлення про те, що таке SQL Injection
Засоби автоматизації для ін'єкції SQL
У наведеному вище прикладі ми використовували прийоми ручної атаки, засновані на наших величезних знаннях SQL. Існують автоматизовані інструменти, які допоможуть вам виконувати атаки ефективніше та в найкоротші терміни. Ці інструменти включають
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Як запобігти атакам ін'єкції SQL
Організація може застосувати таку політику, щоб захистити себе від атак SQL Injection.
- Ніколи не слід довіряти користувацькому вводу - він завжди повинен бути дезінфікований перед використанням у динамічних операторах SQL.
- Збережені процедури - вони можуть інкапсулювати оператори SQL і обробляти весь вхід як параметри.
- Підготовлені виписки - підготовлені виписки для роботи, спочатку створюючи виписку SQL, а потім обробляючи всі подані дані користувача як параметри. Це не впливає на синтаксис оператора SQL.
- Регулярні вирази - їх можна використовувати для виявлення потенційного шкідливого коду та видалення його перед виконанням операторів SQL.
- Права доступу користувачів підключення до бази даних - лише необхідні права доступу повинні надаватися обліковим записам, що використовуються для підключення до бази даних. Це може допомогти зменшити те, що оператори SQL можуть виконувати на сервері.
- Повідомлення про помилки - вони не повинні розкривати конфіденційну інформацію та де саме сталася помилка. Прості користувацькі повідомлення про помилки, такі як „Вибачте, ми маємо технічні помилки. Зв’язано з технічною командою. Повторіть спробу пізніше »можна використовувати замість відображення операторів SQL, що спричинили помилку.
Діяльність злому: Використовуйте Havij для SQL Injection
У цьому практичному сценарії ми збираємось використовувати програму Havij Advanced SQL Injection для сканування веб-сайту на наявність уразливостей.
Примітка. Ваша антивірусна програма може позначити його відповідно до своєї природи. Вам слід додати його до списку виключень або призупинити антивірусне програмне забезпечення.
На зображенні нижче показано головне вікно Havij
Зазначений інструмент можна використовувати для оцінки вразливості веб-сайту / програми.
Резюме
- SQL Injection - це тип атаки, який використовує погані оператори SQL
- Введення SQL можна використовувати для обходу алгоритмів входу, отримання, вставки та оновлення та видалення даних.
- Інструменти для ін'єкції SQL включають SQLMap, SQLPing та SQLSmack тощо.
- Хороша політика безпеки під час написання оператора SQL може допомогти зменшити атаки введення SQL.