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

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

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

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

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

Категории

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

jdam

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

Репозиторий
558495 лет назадПроверено 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, за которым следует длинная шестнадцатеричная строка или длинная числовая строка, это может быть признаком того, что полезная нагрузка вызвала уязвимость форматной строки.
    9. Наличие /tmp/jdam.*.fail: все полезные нагрузки инъекции команд пытаются создать файл в папке /tmp системы с именем jdam.<number>.fail. Число будет случайным пятизначным числом, чтобы было легче идентифицировать ответственную полезную нагрузку.

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

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

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

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

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

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

    Скачать инструмент