Авторские курсы Михаила Тарасова

SQL-инъекция: ломаем базы за 10 минут 💻🔍

SQL-инъекция: ломаем базы за 10 минут 💻🔍

Слушай, если ты ещё не знаешь, что такое SQLi — срочно читай. Это самая классическая, самая жирная, самая «да как они до сих пор не закрыли это» уязвимость в мире веба. OWASP Top 10, место A03:2021 — как постоянный жилец коммуналки.

Что это за зверь

SQL-инъекция (SQLi) — это когда ты суёшь свой вредоносный SQL-код туда, где приложение ждёт обычный текст, и база данных послушно его выполняет. Форма входа, строка поиска, параметры URL, заголовки, куки — всё это точки входа.

Вот как выглядит уязвимый запрос изнутри:

Тип Как работает Когда использовать
Error-based Ошибка БД сливает структуру Когда сервер болтливый
Union-based UNION SELECT тянет данные из других таблиц Когда есть вывод на страницу
Boolean-based Blind Сравниваем TRUE/FALSE по реакции сервера Когда вывода нет, но есть разница в ответах
Time-based Blind SLEEP(5) — измеряем задержку Когда вообще ничего не видно
Out-of-band DNS/HTTP пинг на внешний сервер Экзотика, но бывает
Second-order Payload сохраняется в БД, срабатывает позже Когда первый проход «чистый»

За 10 минут: пошаговый разбор 💣

Шаг 1 — Разведка (2 мин)

Ищем точки входа: GET/POST параметры, заголовки, куки. Burp Suite в руки, intercept ON, и смотрим на всё, что летит на сервер.

Шаг 2 — Первый тычок (1 мин)

Суём кавычку и смотрим на реакцию:

Если сервер упал с syntax error или вернул пустую страницу — бинго, уязвимость есть. Это как первый ping в темноту — и он ответил.

Шаг 3 — Определяем количество столбцов (2 мин)

Шаг 4 — Union-based дамп (3 мин)

Список таблиц у тебя в кармане. Дальше — вытаскиваем колонки:

И финал:

Шаг 5 — Автоматизация (2 мин)

Если лень — sqlmap сделает всё за тебя:

--dbs — дампаем базы, --batch — без вопросов, --level=3 — агрессивнее тестим.

Слепая инъекция — когда ничего не видно 🕵️

Если сервер молчит — переходим на time-based. Вот классика:

Плюс WAF не помешает — но помни: WAF это не стена, а приглашение к обфускации. Умный атакующий обойдёт его через /*!UNION*/, hex-кодирование или %0a между ключевыми словами.

Если нашёл SQLi в проде — молчи, пиши репорт, клади в карман bounty. А не молчишь — иди объяснять следователю, почему ты «просто тестировал». Всё, что описано выше — только для CTF, авторизованных пентестов и своих лабораторных стендов. Удачи в терминале! 🔍💣

Мои курсы