Ferramentas de hackers: Nuclei, um scanner de vulnerabilidade baseado em YAML
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
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
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 .
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>
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
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/.
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.