July 17, 2022

Ferramentas de hackers: Nuclei, um scanner de vulnerabilidade baseado em YAML

Mr.Killsystema (Tradutor)

https://blog.intigriti.com/2021/05/10/hacker-tools-nuclei/?cn-reloaded=1

Tempo é dinheiro, e certamente quando se trata de recompensas por insetos! Boas ferramentas podem ajudá-lo a encontrar bugs antes dos outros – mas apenas se você souber como usá-los corretamente.

Analisaremos algumas de nossas ferramentas de código aberto favoritas e forneceremos algumas dicas e truques sobre como usá-las. Hoje revisaremos o Nuclei, o scanner de vulnerabilidade desenvolvido pela comunidade.

Como nossa análise anterior do FFuF , o Nuclei também é escrito em Go.

Mais e mais ferramentas de segurança migram para Golang para processamento rápido.

Nuclei é um scanner de vulnerabilidade de código aberto rápido que é configurável com modelos. Isso possibilita procurar um tipo de vulnerabilidade em um grande número de hosts.

A Nuclei pode escanear uma variedade de protocolos como TCP, HTTP, DNS… para encontrar vulnerabilidades específicas. Os modelos são baseados em YAML para configuração fácil e rápida.

Em geral, é um scanner baseado em modelo que você pode personalizar de acordo com suas necessidades. A ferramenta está sendo mantida pela equipe de descoberta do projeto https://nuclea.projectdiscovery.io

A instalação

Instalando o GoLang:

Antes de começarmos a usar o Nuclei, precisamos instalar o Go. Como nosso artigo anterior, isso pode ser feito facilmente com um gerenciador de pacotes. Usaremos “apt” para instalar o Golang. Se você quiser instalá-lo a partir do site, confira https://golang.org

sudo apt install golang

Instalando os Núcleos :

Para referência, mais informações e documentação podem ser encontradas no Github de descoberta de projetos ou em seu site. https://nuclea.projectdiscovery.io e https://github.com/projectdiscovery/nuclei .

Usaremos o Go para instalar a ferramenta, mas sinta-se à vontade para construí-la a partir do código-fonte.

GO111MODULE=on go get -v github.com/projectdiscovery/nuclei/v2/cmd/nucle
Para verificar sua instalação, vá para o diretório Go $HOME/go/bin/ e execute ./nuclei -v

Se você quiser que ele esteja disponível em todos os diretórios, você precisa adicionar go/bin à sua variável PATH .

Baixando alguns templates :

Como mencionamos anteriormente, o Nuclei é executado em modelos. Por padrão, não há modelos disponíveis e precisamos baixá-los. Todos os modelos da comunidade podem ser encontrados no Git de descoberta de projetos. ( https://github.com/projectdiscovery/nuclei-templates ).

Esses modelos são feitos pela comunidade e são um ótimo ponto de partida.

Por padrão, os modelos serão armazenados em $HOME/nuclei-templates

./nuclei -update-templates

O básico

Estamos prontos para usar o Nuclei e seus modelos criados pela comunidade. Vamos explorar o básico. Para visualizar todas as opções, você precisa executar os núcleos com o sinalizador (-h). Vamos explicar algumas para você começar.

O básico é fornecer uma lista de destinos ( -l ) e um modelo ( -t ) que precisa ser verificado nesses destinos.

./nuclei -l <target-list> -t <template-path>

Muitos programas Bug-Bounty exigem que você identifique o tráfego HTTP que você faz, isso pode ser feito definindo o cabeçalho personalizado usando o arquivo de configuração em $HOME/.config/nuclei/config.yaml ou com o sinalizador (-H).

./nuclei -H 'Your-Custom-Header' -l <target-list> -t <template-path>

Usando modelos :

Interessante saber é que Nuclei suporta entrada padrão (STDIN) para sua lista de alvos. Isso facilita o encadeamento de várias ferramentas.

cat <target-list> | ./nuclei -t <template-path>

Para salvar os resultados em um arquivo, você pode usar o sinalizador ( -o ), como na maioria das ferramentas de linha de comando.

cat <target-list> | ./nuclei -t <template-path> -o results.txt

Se você gosta de executar vários modelos na lista de destino, pode usar o fornecimento de um diretório em vez de um arquivo. A Nuclei processará todos os arquivos .yaml no diretório. Se você deseja selecionar modelos de vários diretórios, pode adicionar sinalizadores (-t) para cada modelo ou diretório.

./nuclei -l <target-list> -t templates/http/ -t templated/ftp/ -o results.txt

Você pode controlar o número de hosts e o número de modelos que estão sendo processados ​​em paralelo usando os sinalizadores ( -bs max nr hosts default 25 ) e ( -c max nr templates default 10 ).

./nuclei -l <target-list> -t templates/http/ -bs 30 -c 50 -o results.txt

Trabalhando com TAGs :

Tags são uma coleção de templates que podem ser usados ​​para execução de templates com ou sem a necessidade do sinalizador ( -t ). Se o sinalizador ( -t ) for usado com tags, as tags serão aplicadas no diretório de modelo específico, caso contrário, ele executará todos os modelos com tags correspondentes do local de download de modelo padrão $HOME/nuclei-templates/.

Algumas tags comuns são:

cve, rce, lfi, xss, network, logs, config, ssrf

Se você deseja executar uma tag em um diretório de template específico, você pode usar o sinalizador ( -t ).

./nuclei -tags rce -t <my-templates> -l <target-list>

E como último exemplo, executando várias tags em sua lista de destino.

./nuclei -tags rce,cve,config -t <my-templates> -l <target-list>

Criando modelos e fluxos de trabalho

Agora a parte mais interessante. Modelos personalizados e criar o seu próprio é o poder dos núcleos. Quando você deseja encontrar bugs válidos com núcleos, você precisa criar seus próprios modelos e fluxos de trabalho. Uma referência completa em: https://nuclea.projectdiscovery.io/template-guide

Criando seu modelo personalizado :

Os modelos são escritos em YAML para facilitar a configuração e a leitura. Este arquivo é dividido em seções que vamos discutir aqui.

O primeiro em cada modelo é o “ id ”. Esta é uma string exclusiva para identificar seu modelo. Tenha em mente que isso não pode conter espaços.

id: my-first-template

Em seguida, temos o bloco de informações. Isso fornecerá mais informações sobre o modelo e para que ele é usado. Anteriormente discutimos as tags, que podemos definir no bloco de informações.

id: my-first-template  info: name: My First Template author: Intigriti severity: medium description: Searches for bugs. tags: config

Agora temos a base do nosso modelo e podemos preenchê-lo com as coisas que ele precisa fazer. O próximo bloco depende do que você deseja verificar. Alguns blocos são solicitações, headless, rede, arquivo, dns. Para o nosso artigo, vamos mantê-lo simples e usar o bloco de solicitações .

No bloco de requisições , precisamos definir alguns parâmetros como o método que queremos usar, o caminho que queremos verificar e as correspondências que precisam ser verificadas. Para uma referência completa de todos os parâmetros e opções, acesse: https://nuclea.projectdiscovery.io/template-guide

id: my-first-template  info: name: My First Template author: Intigriti severity: medium description: Searches for bugs. tags: config  requests: - method: GET path: - '{{BaseURL}}/secret/login' matchers: - type: word words: - "admin_content"

Este é um modelo personalizado básico que podemos usar em nossa automação que verifica o caminho /secret/login em cada destino.

Criando um fluxo de trabalho :

Os fluxos de trabalho permitem definir uma sequência de execução para modelos. Os modelos serão executados nas condições definidas. Para fazer uso de fluxos de trabalho, usamos o sinalizador ( -w ).

Os fluxos de trabalho podem ser definidos com o atributo de fluxos de trabalho, seguindo o modelo ou submodelos a serem executados.

workflows: - template: files/my-first-template.yaml - template: files/find-xss.yaml

O verdadeiro poder da automação Nuclei vem com o uso de fluxos de trabalho condicionais. Dessa forma, podemos pesquisar se encontrarmos tecnologia e, em seguida, executar submodelos para ver se a tecnologia é vulnerável.

workflows: - template: technologies/tech-detect.yaml matchers: - name: vbulletin subtemplates: - template: exploits/vbulletin-exp1.yaml - template: exploits/vbulletin-exp2.yaml - name: jboss subtemplates: - template: exploits/jboss-exp1.yaml - template: exploits/jboss-exp2.yaml

No exemplo acima, procuramos tecnologias e, se forem encontradas, executaremos modelos nas tecnologias encontradas.

Conclusão

Isso é tudo por hoje. Cobrimos o básico do Nuclei para você começar.

Nuclei é um scanner poderoso que você pode personalizar de acordo com suas necessidades para encontrar seus bugs secretos em vários alvos. A velocidade e a precisão ao usar fluxos de trabalho personalizados são incríveis. As opções são infinitas, Nuclei trará grande valor às suas ferramentas de caça de bugs.