SQL-ін'єкція
Одна лапка в полі пошуку переписує запит.
Що таке SQL-ін'єкція?
Рядок, який надав користувач, вклеюється в запит, і цей рядок може змінити, про що запит питає. Кожен запит тут виконується на справжній вбудованій базі даних, тож нічого не підроблено. Ви зламаєте форму пошуку облікового запису однією лапкою, отримаєте всю таблицю members через ' OR '1'='1 , а потім через UNION SELECT і information_schema витягнете з бази електронні адреси й хеші паролів адміністраторів. Виправлення прив'язує значення як параметр, тож граматика SQL ніколи не розбирає введене як код. Це не санітизація і не список заборонених на брандмауері.
Що ви дізнаєтесь у SQL-ін'єкція
- Розпізнавайте хрестоматійну тавтологію SQL-ін'єкції ' OR '1'='1 і пояснюйте, чому завжди істинна умова обходить фільтр WHERE
- Простежуйте, як ендпоінт пошуку одного запису стає читанням усієї таблиці, коли його параметр вклеєно в рядок SQL
- Використовуйте UNION SELECT, щоб перебирати таблиці бази даних через information_schema і витягати записи з таблиці, яку форма не мала відкривати, як-от admin_users
- Відрізняйте параметризовані запити (надійний захист) від захисту маніпуляціями з рядками — списків заборонених, екранування й правил WAF — і пояснюйте, чому працює лише параметризація
- Читайте вразливий обробник бази даних достатньо уважно, щоб помітити помилку конкатенації, а потім підтверджуйте параметризоване виправлення: повторюйте точний пейлоад на виправленому ендпоінті й переконуйтеся, що повертається нуль записів
SQL-ін'єкція — Кроки навчання
-
Знайдіть цільову форму
Боб націлився на Vantyr — сервіс для учасників із публічною сторінкою пошуку облікового запису . Входу немає, є тільки поле електронної пошти, яке повертає тариф учасника. З такого починаються вебатаки: звичайна форма, що непомітно звертається до бази даних.
-
Надішліть звичайний пошук
Спершу подивіться, як форма працює за звичайних умов. Введіть електронну адресу справжнього учасника й надішліть форму. Відкривається панель Network браузера й записує запит — так його бачить розробник в DevTools.
-
Перегляньте запит
Ось і запит. Адреса, яку ви ввели, передається на сервер у пейлоаді запиту, а у відповіді повертається один відповідний учасник. Поки що все гаразд. Так ця функція й має працювати.
-
Прочитайте код обробника
Тепер найцікавіше: код сервера, який обробляє цей запит. Він будує SQL-запит, вклеюючи вашу електронну адресу прямо в рядок запиту . Цей один рядок коду — і є вся проблема.
-
Знайдіть вразливий рядок
Цей один рядок і є вся вразливість: введене вами значення вклеєне в рядок SQL, а коментар показує точний запит, що надсилається до бази даних; він перебудовується наживо з усього, що ви вводите.
-
Зламайте запит лапкою
У полі досі morgan.lee@example.com з вашого першого пошуку. Введене значення потрапляє в рядок у лапках, тож що буде, якщо надіслати лапку? Додайте в кінець одинарну лапку, надішліть форму й стежте, як коментар executed query у коді перебудовується під час введення: ваша лапка опиняється всередині рядка й ламає його. Ви більше не надсилаєте дані. Ви редагуєте запит.
-
Прочитайте помилку бази даних
Сервер повернув 500 зі справжньою помилкою бази даних. Зайва лапка завчасно закрила рядок, і запит став некоректним. База даних спробувала його виконати й не впоралася. Така помилка для зловмисника — зелене світло: введене значення потрапляє в рушій SQL.
-
Обійдіть фільтр
Тепер змусьте запит зробити щось корисне для вас. Закрийте рядок самі, додайте умову, яка завжди істинна , і фільтр WHERE перестає фільтрувати. Класика: ' OR '1'='1 .
-
Перегляньте повний дамп
Фільтра більше немає. Замість одного учасника відповідь містить усю таблицю members : кожну електронну адресу й кожен тариф Vantyr. Ви попросили один обліковий запис, а база даних віддала всі.
-
Перевірка знань
Охоплення стандартів безпеки
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-89 Improper Neutralization of Special Elements used in an SQL Command
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security