
Nuclear Pond é uma utilidade que aproveita o Nuclei para realizar varreduras em toda a internet pelo custo de uma xícara de café.
Fizemos um fork deste projeto para podermos continuar com esta ótima ideia, espero que juntos possamos melhorar o código e disponibilizá-lo a todos - @OFJAAAH
Para instalar o Nuclear Pond, você precisa configurar o backend módulo terraform. Você pode fazer isso executando terraform apply ou utilizando terragrunt.
Ele usa AWS Lambda como backend para invocar varreduras Nuclei em paralelo, com a opção de armazenar resultados JSON no S3 para consultar com AWS Athena, e é facilmente uma das maneiras mais baratas de executar varreduras na nuvem.
Pense no Nuclear Pond apenas como uma maneira de executar o Nuclei na nuvem. Você pode usá-lo como faria em sua máquina local, mas executando as varreduras em paralelo e com quantos hosts desejar especificar. Tudo o que você precisa pensar são nas flags da linha de comando do nuclei que deseja passar.
Para instalar o Nuclear Pond, você precisa configurar o backend módulo terraform. Você pode fazer isso executando terraform apply ou utilizando terragrunt.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Você pode passar seu backend com flags ou através de variáveis de ambiente. Você pode usar -f ou --function-name para especificar sua função Lambda e -r ou --region para a região especificada. Abaixo estão as variáveis de ambiente que você pode usar.
AWS_LAMBDA_FUNCTION_NAME é o nome da sua função lambda para executar as varredurasAWS_REGION é a região onde seus recursos estão implantadosNUCLEARPOND_API_KEY é a chave de API para autenticação na APIAWS_DYNAMODB_TABLE é a tabela dynamodb para armazenar estados de varredura da APIAbaixo estão algumas das flags que você pode especificar ao executar nuclearpond. As flags principais que você precisa são -t ou -l para seu(s) alvo(s), -a para os args do nuclei e -o para especificar sua saída. Ao especificar args do Nuclei, você deve passá-los como strings codificadas em base64, executando -a $(echo -ne "-t dns" | base64).
Abaixo estão os subcomandos que você pode executar dentro do nuclearpond.
Para executar o subcomando nuclearpond nuclearpond run -t devsecopsdocs.com -r us-east-1 -f jwalker-nuclei-runner-function -a $(echo -ne "-t dns" | base64) -o cmd -b 1 no qual o alvo é devsecopsdocs.com, região é us-east-1, nome da função lambda é jwalker-nuclei-runner-function, argumentos nuclei são -t dns, saída é cmd, e executa uma função através de um lote de um host com -b 1.
$ nuclearpond run -h
Executa tarefas nuclei em paralelo invocando lambda de forma assíncrona
Uso:
nuclearpond run [flags]
Flags:
-a, --args string argumentos nuclei como string codificada em base64
-b, --batch-size int tamanho do lote para número de alvos por execução (padrão 1)
-f, --function-name string Nome da função AWS Lambda
-h, --help ajuda para run
-o, --output string tipo de saída para salvar resultados nuclei (s3, cmd ou json) (padrão "cmd")
-r, --region string Região AWS para executar nuclei
-s, --silent saída silenciosa da linha de comando
-t, --target string alvo individual a especificar
-l, --targets string lista de alvos em um arquivo
-c, --threads int número de threads para executar funções lambda, o padrão é 1, que será lento (padrão 1)
O módulo terraform, por padrão, baixa os modelos na execução e também adiciona os modelos como uma camada. As variáveis para baixar modelos usam o provedor github do terraform para baixar o zip da release. O nome da pasta dentro do zip estará localizado em /opt. Como o Nuclei os baixa na execução, não precisamos fazer isso, mas para melhorar o desempenho você pode especificar -t /opt/nuclei-templates-9.3.4/dns para executar modelos a partir do zip baixado. Para especificar seus próprios modelos, você deve referenciar uma release. Ao fazer isso em seu próprio repositório, você deve especificar estas variáveis no módulo terraform, github_token não é necessário se seu repositório for público.
Se você especificou s3 como saída, seus resultados estarão localizados no S3. A maneira mais rápida de acessá-los é através do Athena. Supondo que você configurou o módulo terraform como seu backend, tudo o que você precisa fazer é consultá-los diretamente pelo Athena. Pode ser necessário configurar os resultados da consulta se ainda não o fez.
select
*
from
nuclei_db.findings_db
limit 10;
Para aprofundar um pouco mais nas consultas, pensei em dar um exemplo rápido. Na instrução select, detalhamos a coluna info, a coluna "matched-at" deve estar entre aspas duplas devido ao caractere -, e você está pesquisando apenas resultados altos e críticos gerados pelo Nuclei.
SELECT
info.name,
host,
type,
info.severity,
"matched-at",
info.description,
template,
dt
FROM
"nuclei_db"."findings_db"
where
host like '%devsecopsdocs.com'
and info.severity in ('high','critical')
A infraestrutura de backend, tudo dentro do módulo terraform. Recomendo fortemente a leitura do README associado a ele, pois contém algumas notas importantes.