Содержание статьи
Sqlmap воспринимают как простую боевую утилиту: написал sqlmap , подождал, получил список баз. Вещь настолько привычная, что мануал никто не перечитывает. И зря! Автор выкатил за последний год два больших релиза (1.9 в январе 2025-го, 1.10 в январе 2026-го) и с тех пор регулярно штампует минорные — актуальная версия уже 1.10.7.
Если давно не обновлял мапу, перед прочтением выполни
sqlmap --update
А теперь поехали смотреть новинки!
Не только SQL
Раньше, если инъекция была не в SQL-запросе, а, скажем, в LDAP-фильтре или в шаблонизаторе Jinja2, sqlmap был бесполезен — приходилось искать такое руками или брать отдельный инструмент. Теперь появился целый новый блок ключей — Non-SQL injection. Это полноценный движок с автоматической детекцией и эксплуатацией под каждый класс уязвимостей.
Для выбора типа уязвимости используются соответствующие ключи: --nosql, --xxe и так далее. Все эти ключи взаимоисключающие — на один прогон можно указать только один из них.
При атаке логика такая же, как и раньше: тестируются GET/POST-параметры, атака на Cookie — от --level , атака в заголовках вроде User-Agent или Referer — от --level .
При слепом извлечении через любой из этих векторов sqlmap разделяет три состояния: true, false и inconclusive. Раньше обрыв соединения, ответ WAF, ошибка бэкенда или неоднозначный оракул могли молча интерпретироваться как один из битов (false или true) — и в дамп улетали испорченные данные. Теперь такие случаи получают состояние inconclusive и ретраятся: так можно убедиться в отсутствии инъекции. Если после повторов четкого подтверждения нет — затронутое значение (или строка) помечается как partial, а не выдается как достоверное.
info
Я использую два разных термина: NoSQL и Non-SQL. Первый классически означает атаку на документоориентированную базу данных, вроде MongoDB. Второй термин предлагает автор мапы. Этим термином описываются векторы атаки, отличные от чистого SQL Injection. Не запутайся!
NoSQL
Забудь про NoSQLMap. Он справляется с задачей, но зачем он, если теперь у тебя есть полноценный движок в sqlmap, который прекрасно справляется с NoSQL-инъекциями. Вот основные возможности:
- операторные инъекции MongoDB/CouchDB (
$ne,$gtи подобные); query_stringв Elasticsearch/Solr;- Cypher-инъекции в Neo4j;
- AQL в ArangoDB;
- N1QL в Couchbase;
- PartiQL в DynamoDB;
- классический
$whereв MongoDB.
sqlmap -u "http://siteurl.test/search?name=luther" -p name --nosql --batch
На выходе будет пейлоад с указанием, какой именно оператор сработал, и, если оракул позволяет, сразу in-band-данные без ручного дампа.
Давай потестим атаку на лабе Exploiting NoSQL injection to extract data. Запусти приложение и настрой проксирование через Burp. Авторизуйся с кредами wiener:. В истории запросов Burp найди GET /. Сохрани реквест в файл — жми правой кнопкой мыши, во всплывающем меню найди Save item.
Запусти sqlmap, передав файл через параметр -r:
sqlmap -r ps-lab-req -p user --nosql --level=5 --risk=3 --batch

Не все лабы PortSwigger подходят для мапы. В некоторых случаях мапа не увидит точки инъекции, а лаба выдаст поздравления. Часть лаб эмулирует поведение NoSQL-инъекции и делает это только на уровне демонстрации. Не увидев реальной инъекции, мапа выдаст отрицательный результат.

GraphQL
GraphQL сам по себе просто обертка, реальная уязвимость почти всегда либо в резолвере (SQL/NoSQL-инъекция), либо в самой схеме. Мапа теперь интроспектирует эндпоинт, перебирает аргументы всех запросов и мутаций, находит точку инъекции и репортит находку как SQL/NoSQL injection via GraphQL — с указанием транспорта отдельной строкой:
sqlmap -u "http://siteurl.test/graphql" --graphql --batch
Дальше как обычно: фингерпринт бэкенда, --dbs, --tables, --dump. Если инъекции нет в query-полях, sqlmap проверит и mutation-слоты, но с оговоркой: для массового извлечения задействуются только «read-подобные» мутации (login, verify, token) — деструктивную мутацию найдет и покажет, но эксплуатировать не станет.
Важный момент именно в векторе. Здесь не выйдет получить результат, атакуя лабы PortSwigger. Те лабы не заточены под SQL- или NoSQL-уязвимости. Лучше подойдет Damn Vulnerable GraphQL Application.
Выполни для запуска:
git clone https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application.git
cd Damn-Vulnerable-GraphQL-Application
docker build -t dvga .
docker run -t -p 5013:5013 -e WEB_HOST=0.0.0.0 dvga
Проверь, что приложение доступно на http://. Если все окей, выполни атаку:
sqlmap -u "http://localhost:5013/graphql" --graphql --batch

LDAP и XPath
LDAP-фильтры и XPath-запросы годами были слепой зоной sqlmap, хотя инъекции в них встречаются регулярно — особенно в корпоративных LDAP-биндах авторизации и в старом легаси на XML/XSLT.
sqlmap -u "http://192.168.30.7/ldap/search?q=x" --ldap --batch
sqlmap -u "http://192.168.30.7/xpath/search?q=x" --xpath --batch
Если у цели есть in-band-утечка (типичный сценарий для LDAP-каталогов, где результат поиска просто рендерится на страницу), sqlmap выгребет записи целиком — dn, cn, mail, uid, даже userPassword, если он в открытом виде. Если оракул чисто булев — движок вслепую перебирает каталог запись за записью и атрибут за атрибутом.
Для XPath то же самое: полноценный блайндовый обход всего XML-дерева с восстановлением имен элементов, атрибутов и текстового содержимого, с ограничением по глубине (по умолчанию 32 уровня, чтобы не закопаться в рекурсии).
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
