Перейти к содержимому

Поиск по платформе

SQL Injection: WAF Bypass

Обход WAF с чёрным списком SQL-ключевых слов для эксплуатации SQL-инъекции в форме логина.

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Сложно+90 XP ~65 мин python
CWE-89 · A03:2021 Pro
Обложка: SQL Injection: WAF Bypass Обложка: SQL Injection: WAF Bypass
Задача
# SQL-инъекция: обход самописного WAF ## Сценарий «Экран-Сити» — магазин электроники, чья форма входа уже однажды становилась находкой пентеста. Вместо исправления разработчик добавил перед запросом самописный фильтр: значения полей проверяются на вхождение «опасных слов» SQL, и при совпадении вход отвергается с характерным сообщением. Вас пригласили на повторный аудит — проверить, держит ли теперь эта защита. ## Цель 1. Убедитесь, что классическая инъекция блокируется фильтром, а сам обработчик входа по-прежнему собирает SQL-запрос интерполяцией строк. 2. Изучите логику фильтра: как именно значения сравниваются с чёрным списком — учитывается ли регистр, все ли эквивалентные конструкции SQL перечислены. 3. Найдите щель, войдите под администратором без знания пароля и купите товар «CTF Flag» — флаг появится на странице профиля. ## Теория Чёрный список — защита по симптомам: он пытается распознать атаку вместо того, чтобы устранить её причину. Способов записать одну и ту же SQL-конструкцию почти бесконечно много — другой регистр, другой вид комментария, эквивалентный оператор, — поэтому любой конечный список проигрывает. **Уязвимый паттерн:** ```python blocked = ['select', 'union', 'or', 'and', '--', '#', 'drop', 'delete', 'insert', 'update'] for word in blocked: if word in username or word in password: ``` Сравнение выполняется как поиск подстроки с учётом регистра, а ключевые слова SQL, в отличие от него, регистронезависимы: слово из списка записано в одном регистре, а сработает в любом. За фильтром стоит всё та же интерполяция значений формы в текст запроса — фильтр лишь создаёт ложное чувство защищённости. ## Точка входа атаки `POST /login` — форма входа с полями `username` и `password`. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `???`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: SQL Injection: Time-based Blind Обложка лабы: SQL Injection: Time-based Blind
SQLi

SQL Injection: Time-based Blind

Извлечение данных через Time-based Blind SQLi в форме восстановления пароля Flask-приложения.

+90 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: Second-Order Обложка лабы: SQL Injection: Second-Order
SQLi

SQL Injection: Second-Order

SQL-инъекция второго порядка: payload сохраняется при регистрации и срабатывает при просмотре профиля.

+90 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: Boolean-based Blind Обложка лабы: SQL Injection: Boolean-based Blind
SQLi

SQL Injection: Boolean-based Blind

Извлечение данных через Boolean-based Blind SQLi в эндпоинте проверки купонов.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: UNION SELECT Обложка лабы: SQL Injection: UNION SELECT
SQLi

SQL Injection: UNION SELECT

Извлечение данных из БД через UNION SELECT в поиске каталога Flask-приложения.

+60 XP
Python Pro
Exploit Fix