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

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

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

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

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

Категории

Все категории
Loading categories
nautilus — Фаззер с обратной связью на основе грамматики | Kitploit
Инструменты/GitHubGitHub/nautilus-fuzz/nautilus
Анализ уязвимостейФаззингАнализ Бинарных ФайловОбучение и Образование
GitHubnautilus-fuzz/nautilus

nautilus

Фаззер с обратной связью на основе грамматики

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

Популярное

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

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

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

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

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

Nautilus 2.0

Nautilus — это фаззер, управляемый покрытием кода и основанный на грамматике. Вы можете использовать его для улучшения тестового покрытия и поиска большего количества ошибок. Задавая грамматику полувалидных входных данных, Nautilus способен выполнять сложные мутации и обнаруживать более интересные тестовые случаи. Многие идеи, лежащие в основе этого фаззера, описаны в статье, опубликованной на NDSS 2019.

Версия 2.0 внесла множество улучшений в этот ранний прототип и теперь на 100% совместима с AFL++. Помимо общих улучшений юзабилити, версия 2.0 включает множество новых блестящих функций:

  • Поддержка режима AFL-Qemu
  • Поддержка грамматик, заданных на Python
  • Поддержка неконтекстно-свободных грамматик с использованием Python-скриптов для генерации входных данных на основе структуры
  • Поддержка задания бинарных протоколов/форматов
  • Поддержка терминалов на основе регулярных выражений, которые не участвуют в направленных мутациях
  • Улучшенная способность избегать повторной генерации одних и тех же очень коротких входных данных
  • Масштабная очистка кодовой базы
  • Полезный вывод ошибок для некорректных грамматик
  • Исправлена ошибка в коде тайм-аута, которая иногда приводила к зависанию фаззера

Как работает Nautilus?

Вы задаёте грамматику с помощью правил, таких как EXPR -> EXPR + EXPR или EXPR -> NUM и NUM -> 1. На основе этих правил фаззер строит дерево. Такое внутреннее представление позволяет применять гораздо более сложные мутации, чем при работе с сырыми байтами. Затем это дерево преобразуется в реальные входные данные для целевого приложения. В обычных контекстно-свободных грамматиках этот процесс прост: все листья конкатенируются. Левое дерево в примере ниже будет разобрано во входную строку a=1+2, а правое — в a=1+1+1+2. Чтобы повысить выразительность ваших грамматик, с помощью Nautilus вы можете предоставить Python-функции для процесса разбора, что позволяет задавать гораздо более сложные спецификации.

Установка

root@kitploit:~
# checkout the git
git clone '[email protected]:nautilus-fuzz/nautilus.git'
cd nautilus
/path/to/AFLplusplus/afl-clang-fast test.c -o test #afl-clang-fast as provided by AFL

# all arguments can also be set using the config.ron file
cargo run --release -- -g grammars/grammar_py_example.py -o /tmp/workdir -- ./test @@

# or if you want to use QEMU mode:
cargo run /path/to/AFLplusplus/afl-qemu-trace -- ./test_bin @@

Примеры

Здесь мы используем Python для генерации грамматики для входных данных, подобных XML. Обратите внимание на использование правила скрипта (script rule), чтобы гарантировать совпадение открывающих и закрывающих тегов.

root@kitploit:~
#ctx.rule(NONTERM: string, RHS: string|bytes) adds a rule NONTERM->RHS. We can use {NONTERM} in the RHS to request a recursion. 
ctx.rule("START","<document>{XML_CONTENT}</document>")
ctx.rule("XML_CONTENT","{XML}{XML_CONTENT}")
ctx.rule("XML_CONTENT","")

#ctx.script(NONTERM:string, RHS: [string]], func) adds a rule NONTERM->func(*RHS). 
# In contrast to normal `rule`, RHS is an array of nonterminals. 
# It's up to the function to combine the values returned for the NONTERMINALS with any fixed content used.
ctx.script("XML",["TAG","ATTR","XML_CONTENT"], lambda tag,attr,body: b"<%s %s>%s</%s>"%(tag,attr,body,tag) )
ctx.rule("ATTR","foo=bar")
ctx.rule("TAG","some_tag")
ctx.rule("TAG","other_tag")

#sometimes we don't want to explore the set of possible inputs in more detail. For example, if we fuzz a script
#interpreter, we don't want to spend time on fuzzing all different variable names. In such cases we can use Regex
#terminals. Regex terminals are only mutated during generation, but not during normal mutation stages, saving a lot of time. 
#The fuzzer still explores different values for the regex, but it won't be able to learn interesting values incrementally. 
#Use this when incremantal exploration would most likely waste time.

ctx.regex("TAG","[a-z]+")

Чтобы проверить ваши грамматики, вы можете использовать генератор:

root@kitploit:~
$ cargo run --bin generator -- -g grammars/grammar_py_exmaple.py -t 100 
<document><some_tag foo=bar><other_tag foo=bar><other_tag foo=bar><some_tag foo=bar></some_tag></other_tag><some_tag foo=bar><other_tag foo=bar></other_tag></some_tag><other_tag foo=bar></other_tag><some_tag foo=bar></some_tag></other_tag><other_tag foo=bar></other_tag><some_tag foo=bar></some_tag></some_tag></document>

Вы также можете использовать Nautilus в сочетании с AFL. Просто укажите в AFL -o на ту же рабочую директорию, и AFL будет синхронизироваться с Nautilus. Обратите внимание, что синхронизация односторонняя: AFL импортирует входные данные Nautilus, но не наоборот.

root@kitploit:~
#Terminal/Screen 1
./afl-fuzz -Safl -i /tmp/seeds -o /tmp/workdir/ ./test @@

#Terminal/Screen 2
cargo run --release -- -o /tmp/workdir -- ./test @@

Трофеи

  • https://github.com/Microsoft/ChakraCore/issues/5503
  • https://github.com/mruby/mruby/issues/3995 (CVE-2018-10191)
  • https://github.com/mruby/mruby/issues/4001 (CVE-2018-10199)
  • https://github.com/mruby/mruby/issues/4038 (CVE-2018-12248)
  • https://github.com/mruby/mruby/issues/4027 (CVE-2018-11743)
  • https://github.com/mruby/mruby/issues/4036 (CVE-2018-12247)
  • https://github.com/mruby/mruby/issues/4037 (CVE-2018-12249)
  • https://bugs.php.net/bug.php?id=76410
  • https://bugs.php.net/bug.php?id=76244
Скачать инструмент