Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
jdam — Структурно-ориентированный фаззер JSON | Kitploit
Инструменты/GitLabGitLab/michenriksen/jdam
Анализ уязвимостейЭксплуатация веб-приложенийФаззингТестирование на Проникновение
GitLabmichenriksen/jdam

jdam

Структурно-ориентированный фаззер JSON

Репозиторий
5585 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

jdam - Структурно-осознанный fuzzing JSON

jdam

jdam — это инструмент, вдохновлённый Radamsa, для фаззинга произвольных JSON-объектов с учётом структуры, что гарантирует, что результаты фаззинга всегда будут корректным JSON.

Многие существующие инструменты фаззинга слепо изменяют входные данные и часто приводят к получению некорректного JSON. Это означает, что фазз-тестирование будет задействовать только JSON-парсер целевого приложения, а тестирование никогда не достигнет основного кода приложения, потому что запросы невалидны. Jdam — попытка решить эту проблему.

jdam содержит несколько модулей мутации, каждый из которых нацелен на выявление потенциальных проблем и уязвимостей в системах, обрабатывающих фаззированные данные. Некоторые модули выполняют случайные изменения, такие как удаление, замена, перестановка и повторение случайных байтов, инвертирование булевых значений и отрицание чисел, в то время как другие модули заменяют значения полезными нагрузками, которые пытаются вызвать определённые типы уязвимостей, такие как:

  • SQL-инъекция
  • Инъекция команд
  • LDAP-инъекция
  • NoSQL-инъекция
  • Инъекция форматной строки
  • Локальное включение файла
  • Целочисленное переполнение
  • и другие

Чтобы увидеть полный список доступных мутаторов, используйте jdam -list.

Примечание

jdam всё ещё довольно сырой, и следует ожидать ошибок. Тем не менее, он достаточно стабилен для выпуска для самых смелых пользователей, но пока относитесь к нему как к альфа-программному обеспечению!

Установка

Загрузите предварительно собранный релиз для вашей операционной системы или клонируйте репозиторий и скомпилируйте с помощью go build -o jdam cmd/jdam/*.

Использование

root@kitploit:~
Usage of jdam:
  -count int
    	Number of fuzzed objects to generate (default 1)
  -ignore string
    	Comma-separated list of fields to exclude from fuzzing
  -list
    	List available mutators
  -max-depth int
    	Maximum object depth to fuzz (default 100)
  -mutators string
    	Comma-separated list of mutator IDs to use (default: all)
  -nil-chance float
    	Probability of value being set to nil (between 0 (no nils) and 1 (all nils)) (default 0.75)
  -output string
    	Output file pattern to use for results (e.g. /tmp/jdam-%d.json)
  -rounds int
    	Number of times to fuzz object (default 1)
  -seed int
    	Seed to use for pseudo-random number generator (default: current UNIX timestamp)
  -verbose
    	Print activity information
  -version
    	Print current jdam version

jdam работает путём передачи в него корректного JSON-объекта ({...}) через конвейер. По умолчанию jdam выполняет одну случайную перестановку на случайном поле и выводит результирующий JSON-объект:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam
{"hello":{"id":1}}

Исходный JSON может быть мутирован несколько раз с помощью флага -rounds, но имейте в виду, что предыдущие полезные нагрузки фаззинга также могут быть мутированы:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -rounds 10
{"hello":{"_constructor":"${42*444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444442}"}}

Несколько фаззированных объектов можно сгенерировать с помощью флага -count:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10
{"hello":"sorld"}
{"hello":"../../../../../../../../../../../../../../../../../../../../etc/passwd"}
{"hello":"{{42*42}}"}
{"hello":null}
{"hello":"' \u0026\u0026 this.password.match(/.*/)//+\u0000"}
{"hello":{"$where":"1"}}
{"hello":"null"}
{"hello":"\";touch /tmp/jdam.70797.fail'"}
{"hello":null}
{"hello":"|| 1==1"}

Запись результатов в файлы

jdam может записывать результаты фаззинга в отдельные файлы, если вы хотите подготовить тестовые файлы вместо использования STDOUT команды:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10 -output "/tmp/jdam-%d.json"

Приведённая выше команда создаст 10 файлов в /tmp от jdam-1.json до jdam-10.json. Специальный спецификатор %d будет автоматически заменён на порядковый номер, чтобы результаты можно было записывать в отдельные файлы.

Игнорирование полей

Если вы хотите, чтобы jdam никогда не мутировал определённые поля в исходном JSON-объекте, вы можете указать jdam игнорировать их с помощью флага -ignore:

root@kitploit:~
$ echo '{"id":13,"articleId":37,"comment":"Hello"}' | ./jdam -count 10 -ignore id,articleId
{"id":13,"articleId":37,"comment":"%x%x%x%x"}
{"id":13,"articleId":37,"comment":"search=')] | //user/*[contains(*,'"}
{"id":13,"articleId":37,"comment":"' and count(/comment())=1 and '1'='1"}
{"id":13,"articleId":37,"comment":"\u0016ello"}
{"id":13,"articleId":37,"comment":"/"}
{"id":13,"articleId":37,"comment":null}
{"id":13,"articleId":37,"comment":"{{{42*42}}}"}
{"id":13,"articleId":37,"comment":"@*"}
{"id":13,"articleId":37,"comment":"Helloooooooooooooooo"}
{"id":13,"articleId":37,"comment":"//*"}

Использование jdam с Ffuf

ffuf — это отличный веб-фаззер, и jdam легко может использоваться в качестве входных данных для фаззинга:

root@kitploit:~
ffuf -input-cmd 'cat subject.json | jdam -rounds 3' -d FUZZ -u http://localhost/api/todos/1 -X PUT -v -mc 500 -mr 'error|failed|failure|fault|abort|root:|1764|0x|\d{20}' -od /tmp/ffuf_test

Приведённая выше команда укажет ffuf получать свои входные данные для фаззинга от jdam и отправлять их в теле запроса к PUT /api/todos/1. Детали запроса и ответа будут записаны в tmp/ffuf_test/, если ответом является 500 Internal Server Error или тело ответа содержит определённые интересные строки.

Использование jdam в качестве пакета

Если вы знаете Go и вам нужен очень специализированный фаззинг, вы можете использовать jdam в своём собственном коде на Go. Примеры использования см. в папке examples/.

На что обращать внимание

Фаззинг полезен только в том случае, если вы можете обнаружить, что конкретная мутация вызвала проблему или спровоцировала уязвимость. Эти признаки будут различаться в зависимости от целевой системы и окружения, но вот несколько хороших общих моментов, на которые стоит обратить внимание:

  1. Сбои: если целевая система больше не принимает соединения, велика вероятность, что она аварийно завершилась из-за какой-то ошибки повреждения памяти. Повторите последний запрос и проверьте, воспроизводится ли сбой.
  2. Необычно медленные ответы: если запрос заставляет сервер отвечать необычно медленно, велика вероятность, что полезная нагрузка вызвала проблемы в нижележащей системе или дала команду базе данных на sleep.
  3. Необычно большие ответы: если ответ необычно большой по сравнению со средним, он может содержать интересные данные, которые не предполагалось возвращать.
  4. 500 Internal Server Error и другие ответы с ошибками: обычно это происходит, когда полезная нагрузка вызывает неожиданную или необработанную ошибку в приложении.
  5. Ключевые слова ошибок и сбоев: ответы, содержащие ключевые слова, связанные с ошибками, такие как error, failure, failed и т. д.
  6. Содержимое файла /etc/passwd: все полезные нагрузки локального включения файла пытаются включить файл /etc/passwd, чтобы иметь предсказуемое содержимое. Так что любой ответ, содержащий root:, очень интересен!
  7. Магическое число 1764: все полезные нагрузки инъекции шаблонов будут пытаться заставить уязвимые шаблонизаторы вычислить 42*42, что равно 1.764. Если это число когда-либо встретится в ответе, велика вероятность, что система уязвима к инъекции шаблонов.
  8. 0x и длинные числа: если ответ содержит 0x, за которым следует длинная шестнадцатеричная строка или длинная числовая строка, это может быть признаком того, что полезная нагрузка вызвала уязвимость форматной строки.

Комната трофеев

jdam всё ещё очень новый инструмент, поэтому пока не обнаружил каких-либо серьёзных ошибок. Я был бы рад узнать от вас, если jdam помог вам получить CVE или хороший баг-баунти, и я с удовольствием размещу ссылку на ваш отчёт здесь. :)

Благодарности

Я хотел бы выразить признательность и поблагодарить несколько других проектов:

  • Radamsa за вдохновение для jdam.
  • gofuzz за идеи по написанию jdam.
  • SecLists и PayloadsAllTheThings за полезные нагрузки для фаззинга.
  • ffuf за то, что сделал использование jdam с веб-приложениями очень простым.

Удачного фаззинга!

Скачать инструмент
  • Наличие /tmp/jdam.*.fail: все полезные нагрузки инъекции команд пытаются создать файл в папке /tmp системы с именем jdam.<number>.fail. Число будет случайным пятизначным числом, чтобы было легче идентифицировать ответственную полезную нагрузку.