• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Сергей Попов

Администратор
30.12.2015
4 793
6 493
Запуск sqlmap в командной строке для поиска SQL-инъекций - обложка для гайда по пентесту.

От основ до обхода 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 штук!
Пример команды для обхода популярных WAF (вроде Cloudflare, ModSecurity):
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 и карьерой в ИБ.
Если вы серьезно настроены превратить эти навыки в профессию, важно понимать весь путь. Начать можно с подробного руководства на форуме, которое поможет сориентироваться: Руководство для начинающего пентестера: как войти в профессию с нуля. Используйте инструмент только если у вас есть официальный договор на пентест или вы действуете в рамках публичной политики Bug Bounty. В остальных случаях — тренируйтесь на специально созданных для этого лабораториях (например, DVWA, bWAPP).

Как начать: пошаговый план​

Прежде чем мы перейдем к конкретным командам, полезно понимать, как этот инструмент вписывается в общую картину. Если вы хотите лучше разобраться в том, что такое пентест и чем он отличается от работы Red Team, на форуме есть отличный обзорный материал: Всё о Пентесте и Red Team для новичков в новых реалиях.

✅ Шаг 1: Поиск цели (для учебных целей!)​

Классические Google Dorks всё ещё работают, но в основном на старых сайтах или в рамках CTF:
Код:
inurl:.php?id=
inurl:product.php?item_id=
inurl:article.php?cat_id=
Сегодня большинство таких URL уже пропатчены. Но для понимания механики это отличный старт.

✅ Шаг 2: Быстрая ручная проверка​

Простейший тест — добавить кавычку (') в конец параметра URL:
http://test-site.com/product.php?id=123'

Если в ответ прилетела ошибка SQL — это хороший знак. Если нет — это еще ничего не значит! Уязвимость может быть слепой, и тут-то нам и нужен sqlmap.

✅ Шаг 3: Эксплуатация с помощью sqlmap​

  1. Простая проверка и получение списка БД
    Bash:
    sqlmap -u "http://test-site.com/product.php?id=123" --dbs
  2. Получение таблиц из конкретной БД
    Bash:
    sqlmap -u "..." -D target_db --tables
  3. Получение столбцов из таблицы
    Bash:
    sqlmap -u "..." -D target_db -T users --columns
  4. Дампинг данных из столбцов
    Bash:
    sqlmap -u "..." -D target_db -T users -C username,password --dump

А если сайт требует логин?​

В 99% случаев интересные уязвимости находятся за формой входа. Чтобы sqlmap работал в авторизованной зоне, ему нужно передать вашу сессионную cookie.
  1. Залогиньтесь на сайте через браузер.
  2. Откройте инструменты разработчика (F12) -> Application/Storage -> Cookies.
  3. Скопируйте значение вашей сессионной cookie (например, PHPSESSID=a1b2c3d4e5f6).
  4. Добавьте ее в команду:
    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-инъекций:
  1. Параметризованные запросы (Prepared Statements): Это золотой стандарт и самый надежный метод. Данные передаются в базу отдельно от самого SQL-запроса, и СУБД просто не может их исполнить. Используйте их всегда. ORM (Object-Relational Mapping) в современных фреймворках делают это по умолчанию.
  2. Принцип наименьших привилегий: Пользователь БД, от имени которого ваше веб-приложение работает с базой, должен иметь минимально необходимые права. Только SELECT, INSERT, UPDATE для своих таблиц. Никаких FILE, SHUTDOWN или прав администратора (dbo).
  3. Хорошо настроенный WAF: Не просто включить "для галочки". WAF должен работать в режиме блокировки, а его правила — регулярно обновляться.
  4. Валидация и фильтрация входных данных: Проверяйте все, что приходит от пользователя. Если ожидается число — убедитесь, что это число. Если email — проверьте его формат регулярным выражением.
  5. Отключение вывода ошибок: На продакшн-сервере пользователи никогда не должны видеть отладочную информацию и тексты ошибок СУБД.
  6. Регулярный аудит и пентесты: Нанимайте специалистов или проводите Bug Bounty программы, чтобы найти дыры раньше, чем их найдут злоумышленники.

Вместо заключения​

Sqlmap — это невероятно мощный скальпель в руках специалиста. Но, как и любой инструмент, он требует понимания. Важно не просто заучить команды, а осознавать, что происходит "под капотом", помнить об ответственности и всегда думать на два шага вперед — не только как атаковать, но и как защититься.

Надеюсь, это руководство поможет вам в ваших (легальных!) исследованиях. Успешного пентеста и безопасного кода!

Продолжение: Гайд по SQL-инъекциям: SQLMap + Hashcat

Обновлено и дополнено командой Codeby на основе официальной документации sqlmap и практического опыта.
 
Объясните или, если не сложно, дайте ссылку где описано, в чем разница в параметрах --level u --risk
Много инфы, да и на практике CTF не один раз валил БД с --level=5 --risk=3
при включении v3 увидел разницу, что при параметре risk=1 не используются where, он требует risk=3, но что к примеру делает risk=2, и levels не понимаю
спасибо за ответ
 
И oпять вызываем уже знакомую процедуру --columns (колоночки) но уже по таблице "user_".
Код:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_info --columns

Далее меня заинтересовало то что в сети находяться 4ре хоста, но в колоночке Избыточность...
 
Последнее редактирование:
  • Нравится
Реакции: ace911
1578498912726.png

И что дальше делать?как увидеть логин и пароль?

Яполный ламер,не судите строго.
 
Посмотреть вложение 36737
И что дальше делать?как увидеть логин и пароль?

Яполный ламер,не судите строго.
sqlmap --random-agent -u http:/site.php?id=1 -D название базы -T название таблицы -C название колонки --dump
или ещё проще, без названия колонки, вытащит сразу все данные изо всех колонок (применять, если данных мало)
sqlmap --random-agent -u http:/site.php?id=1 -D название базы -T название таблицы --dump
 
Объясните или, если не сложно, дайте ссылку где описано, в чем разница в параметрах --level u --risk
Много инфы, да и на практике CTF не один раз валил БД с --level=5 --risk=3
при включении v3 увидел разницу, что при параметре risk=1 не используются where, он требует risk=3, но что к примеру делает risk=2, и levels не понимаю
спасибо за ответ
Тоже хотелось бы подробнее узнать
 
Неплохо бы еще добавлять параметры --tor и --check-tor (добавит немножко анонимности в пентест)
 
Можно ли эти знания применять определенно на 1 сайт или только, те которые имеют подобный дорк ?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы