SQL-ін'єкція

SQL-ін'єкція

Одна лапка в полі пошуку переписує запит.

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

Рядок, який надав користувач, вклеюється в запит, і цей рядок може змінити, про що запит питає. Кожен запит тут виконується на справжній вбудованій базі даних, тож нічого не підроблено. Ви зламаєте форму пошуку облікового запису однією лапкою, отримаєте всю таблицю members через ' OR '1'='1 , а потім через UNION SELECT і information_schema витягнете з бази електронні адреси й хеші паролів адміністраторів. Виправлення прив'язує значення як параметр, тож граматика SQL ніколи не розбирає введене як код. Це не санітизація і не список заборонених на брандмауері.

Що ви дізнаєтесь у SQL-ін'єкція

SQL-ін'єкція — Кроки навчання

  1. Знайдіть цільову форму

    Боб націлився на Vantyr — сервіс для учасників із публічною сторінкою пошуку облікового запису . Входу немає, є тільки поле електронної пошти, яке повертає тариф учасника. З такого починаються вебатаки: звичайна форма, що непомітно звертається до бази даних.

  2. Надішліть звичайний пошук

    Спершу подивіться, як форма працює за звичайних умов. Введіть електронну адресу справжнього учасника й надішліть форму. Відкривається панель Network браузера й записує запит — так його бачить розробник в DevTools.

  3. Перегляньте запит

    Ось і запит. Адреса, яку ви ввели, передається на сервер у пейлоаді запиту, а у відповіді повертається один відповідний учасник. Поки що все гаразд. Так ця функція й має працювати.

  4. Прочитайте код обробника

    Тепер найцікавіше: код сервера, який обробляє цей запит. Він будує SQL-запит, вклеюючи вашу електронну адресу прямо в рядок запиту . Цей один рядок коду — і є вся проблема.

  5. Знайдіть вразливий рядок

    Цей один рядок і є вся вразливість: введене вами значення вклеєне в рядок SQL, а коментар показує точний запит, що надсилається до бази даних; він перебудовується наживо з усього, що ви вводите.

  6. Зламайте запит лапкою

    У полі досі morgan.lee@example.com з вашого першого пошуку. Введене значення потрапляє в рядок у лапках, тож що буде, якщо надіслати лапку? Додайте в кінець одинарну лапку, надішліть форму й стежте, як коментар executed query у коді перебудовується під час введення: ваша лапка опиняється всередині рядка й ламає його. Ви більше не надсилаєте дані. Ви редагуєте запит.

  7. Прочитайте помилку бази даних

    Сервер повернув 500 зі справжньою помилкою бази даних. Зайва лапка завчасно закрила рядок, і запит став некоректним. База даних спробувала його виконати й не впоралася. Така помилка для зловмисника — зелене світло: введене значення потрапляє в рушій SQL.

  8. Обійдіть фільтр

    Тепер змусьте запит зробити щось корисне для вас. Закрийте рядок самі, додайте умову, яка завжди істинна , і фільтр WHERE перестає фільтрувати. Класика: ' OR '1'='1 .

  9. Перегляньте повний дамп

    Фільтра більше немає. Замість одного учасника відповідь містить усю таблицю members : кожну електронну адресу й кожен тариф Vantyr. Ви попросили один обліковий запис, а база даних віддала всі.

  10. Перевірка знань

Охоплення стандартів безпеки

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