Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
nautilus — Um Fuzzer baseado em gramática com feedback | Kitploit
Ferramentas/GitHubGitHub/nautilus-fuzz/nautilus
Análise de VulnerabilidadesFuzzingAnálise de BináriosAprendizado e Educação
GitHubnautilus-fuzz/nautilus

nautilus

Um Fuzzer baseado em gramática com feedback

Ver Repositório
4756726há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Nautilus 2.0

Nautilus é um fuzzer guiado por cobertura e baseado em gramática. Você pode usá-lo para melhorar sua cobertura de teste e encontrar mais bugs. Ao especificar a gramática de entradas semi-válidas, o Nautilus é capaz de realizar mutações complexas e descobrir casos de teste mais interessantes. Muitas ideias por trás deste fuzzer estão documentadas em um artigo publicado no NDSS 2019.

A versão 2.0 adicionou muitas melhorias a este protótipo inicial e agora é 100% compatível com o AFL++. Além das melhorias gerais de usabilidade, a versão 2.0 inclui muitos novos recursos interessantes:

  • Suporte para o modo AFL-Qemu
  • Suporte para gramáticas especificadas em python
  • Suporte para gramáticas não livres de contexto usando scripts python para gerar entradas a partir da estrutura
  • Suporte para especificação de protocolos/formatos binários
  • Suporte para especificação de terminais baseados em regex que não fazem parte das mutações direcionadas
  • Melhor capacidade de evitar gerar repetidamente as mesmas entradas muito curtas
  • Limpeza massiva da base de código
  • Saída de erro útil em gramáticas inválidas
  • Corrigido um bug no código de timeout que ocasionalmente travava o fuzzer

Como o Nautilus Funciona?

Você especifica uma gramática usando regras como EXPR -> EXPR + EXPR ou EXPR -> NUM e NUM -> 1. A partir dessas regras, o fuzzer constrói uma árvore. Essa representação interna permite aplicar mutações muito mais complexas do que bytes brutos. Essa árvore é então transformada em uma entrada real para a aplicação alvo. Em gramáticas livres de contexto normais, esse processo é direto: todas as folhas são concatenadas. A árvore à esquerda no exemplo abaixo resultaria na entrada a=1+2 e a da direita em a=1+1+1+2. Para aumentar a expressividade das suas gramáticas, usando o Nautilus você pode fornecer funções python para o processo de unparse para permitir especificações muito mais complexas.

Configuração

# 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 @@

Exemplos

Aqui, usamos python para gerar uma gramática para entradas semelhantes a xml válidas. Observe o uso de uma regra de script para garantir que as tags de abertura e fechamento correspondam.

#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]+")

Para testar suas gramáticas, você pode usar o gerador:

$ 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>

Você também pode usar o Nautilus em combinação com o AFL. Basta apontar o AFL -o para o mesmo diretório de trabalho (workdir), e o AFL sincronizará com o Nautilus. Observe que isso é unilateral. O AFL importa entradas do Nautilus, mas não o contrário.

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

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

Troféus

  • 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
Baixar ferramenta