Підручник із впровадження SQL: як вчитися на прикладі

Що таке ін'єкція SQL?

SQL Injection — це атака, яка отруює динамічні оператори SQL, щоб коментувати певні частини оператора або додавати умову, яка завжди буде істинною. Він використовує недоліки дизайну погано розроблених веб-додатків, щоб використовувати оператори SQL для виконання шкідливого коду SQL.

Дані є одним із найважливіших компонентів інформаційних систем. Організація використовує веб-програми, що працюють на базі даних, щоб отримати дані від клієнтів. SQL це абревіатура від Structured Query Language. Він використовується для отримання та обробки даних у базі даних.

SQL-ін'єкція

Як працює атака SQL Injection?

Типи атак, які можна виконати за допомогою впровадження SQL, відрізняються залежно від типу механізму бази даних. Атака працює на динамічні оператори SQL. Динамічний оператор — це оператор, який генерується під час виконання з використанням параметрів пароля з веб-форми або рядка запиту URI.

Приклад впровадження SQL

Розглянемо простий веб-додаток із формою входу. Код HTML-форми показано нижче.

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

ТУТ,

  • Наведена вище форма приймає адресу електронної пошти та пароль, а потім надсилає їх до a PHP файл з назвою index.php.
  • Він має можливість зберігати сеанс входу в файл cookie. Ми дійшли висновку про це з прапорця Remember_me. Для надсилання даних використовується метод post. Це означає, що значення не відображаються в URL-адресі.

Припустімо, що оператор на серверній частині для перевірки ідентифікатора користувача такий

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

ТУТ,

  • Наведений вище оператор використовує значення $_POST[] масив безпосередньо без їх дезінфекції.
  • Пароль шифрується за допомогою алгоритму MD5.

Ми проілюструємо атаку SQL-ін’єкції за допомогою sqlfiddle. Відкрийте URL-адресу http://sqlfiddle.com/ у вашому веб-браузері. Ви отримаєте таке вікно.

Примітка: вам доведеться написати оператори SQL

SQL Injection працює

Крок 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 ('m@m.com',md5('abc'));

Крок 2) Натисніть Побудувати схему

Крок 3) Введіть цей код на правій панелі

select * from users;

Крок 4) Натисніть «Запустити SQL». Ви побачите наступний результат

SQL Injection працює

Припустимо, користувальницькі витратні матеріали admin@admin.sys та 1234 як пароль. Оператор, який буде виконано проти бази даних, буде

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

Наведений вище код можна використати, закоментувавши частину пароля та додавши умову, яка завжди буде істинною. Припустімо, що зловмисник вводить такі дані в поле електронної адреси.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx для пароля.

Згенерований динамічний оператор буде таким.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

ТУТ,

  • xxx@xxx.xxx закінчується одинарною лапкою, яка завершує лапку рядка
  • OR 1 = 1 LIMIT 1 – це умова, яка завжди буде істинною та обмежує отримані результати лише одним записом.
  • — ' AND … — це коментар SQL, який усуває частину пароля.

Скопіюйте наведений вище оператор SQL і вставте його SQL FiddleЗапустіть текстове поле SQL, як показано нижче

SQL Injection працює

Хакерська діяльність: SQL Inject a Web Application

У нас є простий веб-додаток на http://www.techpanda.org/ який є вразливим до атак SQL Injection лише для демонстраційних цілей. Наведений вище HTML-код форми взято зі сторінки входу. Програма забезпечує базову безпеку, наприклад очищення поля електронної пошти. Це означає, що наш код вище не можна використовувати для обходу входу.

Щоб обійти це, ми можемо використати поле пароля. На діаграмі нижче показано кроки, які ви повинні виконати

SQL Inject веб-програми

Припустімо, що зловмисник надає такі дані

  • Крок 1: Введіть xxx@xxx.xxx як адресу електронної пошти
  • Крок 2: Введіть xxx') АБО 1 = 1 — ]

SQL Inject веб-програми

  • Натисніть кнопку Відправити
  • Вас буде спрямовано на інформаційну панель

Згенерований оператор SQL буде таким

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

Діаграма нижче ілюструє сформовану заяву.

SQL Inject веб-програми

ТУТ,

  • Заява розумно припускає, що використовується шифрування md5
  • Завершує одинарні лапки та закриваючу дужку
  • Додає умову до твердження, яка завжди буде істинною

Загалом, під час успішної атаки SQL Injection намагаються застосувати низку різних методів, наприклад продемонстрованих вище, щоб здійснити успішну атаку.

Інші типи атак SQL Injection

Ін’єкції SQL можуть завдати більше шкоди, ніж просто передача алгоритмів входу. Деякі з нападів включають

  • Видалення даних
  • Оновлення даних
  • Вставлення даних
  • Виконання команд на сервері, які можуть завантажувати та встановлювати шкідливі програми, такі як трояни
  • Експорт цінних даних, таких як дані кредитної картки, електронна пошта та паролі, на віддалений сервер зловмисника
  • Отримання даних для входу користувача тощо
  • Впровадження SQL на основі файлів cookie
  • Ін'єкція SQL на основі помилок
  • Сліпе впровадження SQL

Наведений вище перелік не є вичерпним; це просто дає вам уявлення про те, що таке SQL Injection

Інструменти автоматизації для впровадження SQL

У наведеному вище прикладі ми використали методи ручної атаки, засновані на наших глибоких знаннях SQL. Існують автоматизовані інструменти, які можуть допомогти вам виконувати атаки ефективніше та за найкоротший час. Ці інструменти включають

Як запобігти атакам SQL Injection

Організація може прийняти наведену нижче політику, щоб захистити себе від атак SQL Injection.

  • Ніколи не слід довіряти введеним користувачами – Перед використанням у динамічних інструкціях SQL його завжди потрібно очищати.
  • Збережені процедури – вони можуть інкапсулювати оператори SQL і розглядати всі вхідні дані як параметри.
  • Підготовлені звіти – підготовлені оператори для роботи, спочатку створивши оператор SQL, а потім обробляючи всі надіслані дані користувача як параметри. Це не впливає на синтаксис інструкції SQL.
  • Регулярні вирази – їх можна використовувати для виявлення потенційно шкідливого коду та видалення його перед виконанням операторів SQL.
  • Права доступу користувача підключення до бази даних – обліковим записам, які використовувалися, слід надавати лише необхідні права доступу підключитися до бази даних. Це може допомогти зменшити те, що оператори SQL можуть виконувати на сервері.
  • Повідомлення про помилки – вони не повинні розкривати конфіденційну інформацію та де саме сталася помилка. Прості спеціальні повідомлення про помилки, наприклад «Вибачте, у нас виникли технічні помилки. Зв’язалися з технічною командою. Спробуйте пізніше» можна використовувати замість відображення операторів SQL, які спричинили помилку.

Хакерська діяльність: використовуйте Havij для впровадження SQL

У цьому практичному сценарії ми збираємося використовувати програму Havij Advanced SQL Injection для сканування веб-сайту на наявність уразливостей.

Примітка: ваш антивірусна програма може позначити це через його природу. Вам слід додати його до списку виключень або призупинити антивірусне програмне забезпечення.

На зображенні нижче показано головне вікно Havij

Використовуйте Havij для впровадження SQL

Наведений вище інструмент можна використовувати для оцінки вразливості веб-сайту/програми.

Підсумки

  • SQL-ін’єкція – це тип атаки, який використовує неправильні оператори SQL
  • SQL-ін’єкцію можна використовувати для обходу алгоритмів входу, отримання, вставки, оновлення та видалення даних.
  • Інструменти впровадження SQL включають SQLMap, SQLPing і SQLSmack тощо.
  • Хороша політика безпеки під час написання оператора SQL може допомогти зменшити атаки SQL-ін’єкції.