10 Січ, 2023

SQL-ін'єкція

SQL-ін'єкція (SQLi) це тип уразливості безпеки, при якому зловмисник може вставити шкідливий код в інструкцію SQL, щоб отримати несанкціонований доступ до бази даних.

Повний опис: Впровадження SQL-коду - це тип уразливості безпеки веб-додатки, при якому зловмисник може вставити шкідливий код SQL в поля введення веб-додатки, щоб отримати несанкціонований доступ до бази даних. Це може дозволити зловмиснику вкрасти конфіденційні дані, маніпулювати вмістом бази даних або навіть отримати контроль над всією системою. Атаки з використанням SQL-ін'єкцій можливі, коли додаток неправильно перевіряє дані, що вводяться користувачем або не використовує підготовлені інструкції з параметризованными запитами.

 

Приклади:

 

• Зловмисник може спробувати ввести наступний SQL-код в форму входу у систему: 'АБО 1=1 -- це призведе до того, що додаток поверне всі рядки з таблиці users, що потенційно дозволить зловмиснику отримати доступ до конфіденційної інформації.

• Зловмисник може спробувати використовувати атаку SQL-ін'єкції на основі об'єднання для отримання даних з декількох таблиць в базі даних шляхом додавання додаткових інструкцій SQL до вихідного запиту.

 

Ось приклад уразливого коду SQL, який вразливий для SQL-ін'єкції:

 

<?php
$username = $_POST[“username”];
$password = $_POST[“password”];

$query = “SELECT * FROM users WHERE username = ‘$username’ AND password = ‘$password'”;
$result = mysqli_query mysqli_query($connection, $query);

if (mysqli_num_rows mysqli_num_rows($result) > 0) {
// вхід в систему пройшов успішно
} else {
// помилка входу в систему
}
?>

 

У цьому прикладі PHP-скрипт намагається аутентифікувати користувача, звіряючи надані їм ім'я користувача і пароль з записами в таблиці бази даних під назвою "користувачі". Проблема з цим кодом полягає в тому, що він безпосередньо включає користувальницький введення ($username and $password) у SQL-запит без належної перевірки або очищення. Це означає, що якщо зловмисник введе шкідливу рядок username and password поля, вони потенційно можуть призвести до того, що запит виконає ненавмисні команди.

 

Наприклад, зловмисник може ввести в username поле: admin' -- що привело б до того, що запит став би:

 

SELECT * FROM users WHERE ім'я користувача = ‘admin’ –' І пароль = 'whatever_password_entered'

 

Цей запит закомментирует іншу частину запиту, минаючи перевірку пароля, отже, вхід в систему буде успішним. Це може призвести до несанкціонованого доступу до системи.

Щоб зменшити цю уразливість, що вводяться користувачем дані повинні бути перевірені і очищені, а для побудови SQL-запиту слід використовувати підготовлені інструкції з параметризованными запитами. Таким чином, параметризований запит буде виглядати приблизно так:

 

$stmt = $connection->prepare(“SELECT * FROM users WHERE username = ? AND password = ?”);
$stmt->bind_param("сс", $username, $password);
$stmt->execute();b

 

Таким чином, навіть якщо зловмисник спробує ввести шкідливий enter, він не буде виконаний як запит і буде оброблений як рядок, запобігаючи атаки з використанням SQL-ін'єкцій.

 

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

 

Методологія тестування уразливості: Тестування на наявність вразливостей SQL-ін'єкцій може виконуватися вручну або за допомогою автоматизованих інструментів. Нижче наведено список кроків, які можна виконати для перевірки вразливостей SQL-ін'єкцій:

 

• Визначте всі поля введення у веб-додатку, включаючи форми, рядка запиту і файли cookie.

• Спробуйте ввести різні корисні дані SQL-ін'єкцій, такі як одинарні лапки, лапки і логічні оператори, в кожне поле вводу.

• Спостерігайте за поведінкою програми і шукайте будь-які несподівані результати, такі як повідомлення про помилки або витік даних.

• Використовуйте автоматичні інструменти для автоматизації цих кроків і сканування веб-сайту, додатки

 

Інструменти:

 

• SQLMap

• SQLNinja

• Havij

• SQL Injection Lab

• sqlol

• sqliX

• sqliv

• sqldict

• sqldump

• sqlitebrowser

• sqlninja

• sqlite

• sqlcipher

• sqliteadmin

• sqliteman

• sqlite_analyzer

 

Популярні подвиги:

 

• Атаки з використанням SQL-ін'єкцій зазвичай використовуються для отримання конфіденційної інформації з бази даних, такий як номери кредитних карт, особиста інформація або облікові дані для входу.

• Впровадження SQL-коду можна використовувати для зміни вмісту бази даних, наприклад, для додавання, зміни або видалення записів.

• Зловмисник може використовувати SQL-ін'єкцію для отримання несанкціонованого доступу до системи шляхом впровадження коду, що надає йому підвищені привілеї, такі як доступ адміністратора.

 

Основні CVE, пов'язані з цією уразливістю:

 

• CVE-2019-19781

• CVE-2019-16759

• CVE-2018-7600

• CVE-2017-9805

• CVE-2015-5352

 

Головні новини, пов'язані з уразливістю:

 

Автомобільні компанії масово піддаються веб-вразливостям

Злом синтаксису JSON дозволив переправляти корисні дані SQL-ін'єкцій через WAF

Zendesk Досліджує недоліки, відкрили двері для грабежу облікового запису

Sophos виправляє уразливість SQL-ін'єкції в UTM-пристрої

 

Де можна перевірити наявність цієї уразливості:

 

• Тестування на проникнення в веб-додаток

• Набір Owasp Zap і burp

• Веб-сайти, на яких є форма, сторінка входу в систему, сторінки пошуку і т. Д

 

Корисні курси, Практичні заняття та Відеоролики:

 

• OWASP (Open Web Application Security Project) пропонує ресурси і навчання тому, як запобігати і пом'якшувати атаки з використанням SQL-ін'єкцій

• Інститут SANS пропонує різноманітні курси з безпеки веб-додатків, включаючи курс щодо запобігання і пом'якшення наслідків SQL-ін'єкцій

The SQL Injection Wiki надає обширну інформацію про різних типах атак з використанням SQL-ін'єкцій і про те, як їм запобігти

 

Книги:

 

• "Атаки і захист з використанням SQL-ін'єкцій" Джастіна Кларка

• "Злом відкритих веб-додатків" Джоела Скамбрея, Майка Шеми і Калеба Сіма

• "Посібник хакера веб-додатків: Пошук та використання вразливостей безпеки" Дафідда Статтарда та Маркуса Пінто

 

Корисне навантаження:

 

• ‘ or 1=1 —

• ‘ or 1=1#

• ‘ or 1=1/*

• ‘ or ‘a’=’a

• ” or “a”=”a

 

Правила Sigma / правила брандмауера для блокування або зупинки уразливості:

 

• блокувати вхідний трафік на порту 1433 (SQL Server)

• заблокувати вхідний трафік на порт 3306 (MySQL)

• заблокувати вхідний трафік на порт 1521 (Oracle)

• заблокувати вхідний трафік на порт 5432 (PostgreSQL)

 

Корисні сервіси:

 

• Брандмауер веб-додатків (WAF) може блокувати відомі атаки з використанням SQL-ін'єкцій

• Регулярні виправлення та оновлення програмного забезпечення можуть допомогти запобігти використанню вразливостей

 

Пом'якшення:

 

• Використовуйте готові оператори з параметризованими запитами замість побудови SQL-запитів з конкатенацією рядків.

• Перевіряйте введені користувачем дані та, за необхідності, обробляйте їх.

• Обмежте права доступу до мінімуму, необхідного для правильної роботи програми.

• Регулярно перевіряйте та відстежуйте базу даних і журнали додатків на предмет незвичної активності.

• Оновлюйте програмне забезпечення та систему.

• Використовуйте брандмауер веб-додатків, щоб заблокувати відому атаку

• Використовуйте кодування та екранування, коли це необхідно.

 

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

 

Інші Послуги

Готові до безпеки?

зв'язатися з нами