3. Уровни (level/risk) и Tamper
Уровни и Tamper: Продвинутый sqlmap
В арсенале sqlmap есть механизмы, позволяющие проводить атаки даже там, где на первый взгляд всё защищено. С помощью настройки уровней интенсивности и использования так называемых «Tamper-скриптов» хакеры могут модифицировать вредоносные запросы на лету, обходя фильтры и системы защиты (WAF).
Для Go-разработчика это важно понять с правильной стороны: типичная реакция на «у нас обнаружили SQLi» — добавить middleware, который банит запросы со словом UNION или с символом '. На staging это работает, на проде — атакующий запускает sqlmap --tamper=randomcase,space2comment и проходит через ваш фильтр за минуту. Каждый «костыль» в виде blacklist-фильтра рождает новый tamper-скрипт. Это игра, в которой WAF всегда отстаёт от инструмента.
Разберем, как эти инструменты позволяют «протолкнуть» атаку через препятствия. Аналогия — обыск в аэропорту: если охрана ищет металл, контрабандист использует керамический нож; если по форме — то ножу придают форму расчёски; если по 3D-сканеру — нож собирают из деталей в зоне duty-free. Каждое новое «правило фильтрации» атакующий обходит новым tamper-скриптом.
1. Механика: Уровни интенсивности и риска
По умолчанию sqlmap проверяет только явные URL-параметры. Но атакующий может повысить агрессивность сканирования. Уровни тут — это не «больше шума», а «больше поверхности атаки»: каждый level активирует дополнительные классы вредоносных payload-ов и расширяет места их внедрения. На Go-приложении с middleware-логированием это означает рост числа аномальных запросов в access-логе с десятков до тысяч.
--level=3: Проверка HTTP-заголовков (User-Agent,Referer,Cookie).--level=5: Глубокий анализ всех элементов запроса, включая сложные JSON-структуры в теле POST-запросов.--risk=3: Использование рискованных методов, которые могут повлиять на стабильность базы данных (например, агрессивные Time-based атаки).
2. Обход WAF через Tamper-скриптинг
Tamper-скрипты автоматически видоизменяют полезную нагрузку перед отправкой, маскируя её под легитимный трафик. Каждый скрипт — это маленький Python-плагин, который перепаковывает payload в новую форму, синтаксически эквивалентную исходной с точки зрения SQL-парсера базы, но другую с точки зрения regex-фильтра WAF.
- Если вы запретили пробелы, хакер использует:
sqlmap ... --tamper=space2comment. Это заменит все пробелы на/**/. - Если фильтр ищет слово
SELECT, поможетrandomcase, который превратит его вsElEcT.
3. Популярные способы маскировки
| Скрипт | Действие | Цель |
|---|---|---|
space2comment |
Пробел → /**/ |
Обход фильтров разделителей |
randomcase |
Смена регистра | Обход простых строковых фильтров |
base64encode |
Кодирование в Base64 | Обход WAF, читающих только текст |
charencode |
Кодирование в Hex | Маскировка спецсимволов |
4. Почему статическая фильтрация в Go не помогает
Существуют десятки различных Tamper-скриптов, которые можно комбинировать. Ваш встроенный фильтр в коде Go никогда не угонится за этим бесконечным разнообразием форм одной и той же атаки. Злоумышленник просто подберет нужную «маску», которая проскользнет через ваши проверки.
Типичная антипаттерн-история: после первого аудита в проект добавляют middleware вида if strings.Contains(strings.ToLower(input), "union") { return 403 }. Через неделю атакующий проходит через --tamper=uppercaseunion или --tamper=hex2char. Тогда фильтр расширяют до 30 запрещённых слов, отлавливают select, drop, --, /*. В понедельник падает фронтенд: пользователи не могут ввести в форму поиска слово «drop» (например, «micro-drop technology»). Чёрные списки всегда проигрывают: либо они слишком слабы (защищают от вчерашних атак), либо слишком сильны (ломают легитимный ввод).
Продвинутый sqlmap — это мастер маскировки. Он адаптирует атаку под особенности вашей защиты, пока не найдет лазейку. Единственное по-настоящему надежное средство — использование Prepared Statements, которые делают любые манипуляции с текстом запроса абсолютно бесполезными. С db.Query("SELECT id FROM users WHERE name=?", input) ввод хакера летит мимо SQL-парсера: какие бы tamper-маски на него ни накладывали, на стороне PostgreSQL/MySQL это всё ещё литеральная строка, которая сравнивается с колонкой name. WAF вообще можно выключить — защита перенесена на уровень драйвера, и она работает на 100%.
В завершение курса мы узнаем, как Go-разработчик может обнаружить автоматизированную атаку и какие защитные меры, помимо кода, помогут спасти сервер.
Продолжить чтение
Что бы прочитать модуль полностью, зарегистрируйтесь/войдите на платформу
Когда закончишь — отметь раздел, чтобы продолжить.