
Um scanner de portas rápido escrito em Go com foco em confiabilidade e simplicidade. Projetado para ser usado em combinação com outras ferramentas para descoberta de superfície de ataque em bug bounties e testes de penetração.
Funcionalidades • Instalação • Uso • Executando o naabu • Configuração • Integração NMAP • Exclusão CDN/WAF • Discord
Naabu é uma ferramenta de varredura de portas escrita em Go que permite enumerar portas válidas para hosts de forma rápida e confiável. É uma ferramenta muito simples que realiza varreduras rápidas SYN/CONNECT/UDP no host/lista de hosts e lista todas as portas que retornam uma resposta.
naabu -h
Isso exibirá a ajuda da ferramenta. Aqui estão todas as opções que ela suporta.```yaml
Usage:
naabu [flags]
Flags:
INPUT:
-host string[] hosts to scan ports for (comma-separated)
-list, -l string list of hosts to scan ports (file)
-exclude-hosts, -eh string hosts to exclude from the scan (comma-separated)
-exclude-file, -ef string list of hosts to exclude from scan (file)
PORT:
-port, -p string ports to scan (80,443, 100-200)
-top-ports, -tp string top ports to scan (default 100) [full,100,1000]
-exclude-ports, -ep string ports to exclude from scan (comma-separated)
-ports-file, -pf string list of ports to scan (file)
-port-threshold, -pts int port threshold to skip port scan for the host
-exclude-cdn, -ec skip full port scans for CDN/WAF (only scan for port 80,443)
-display-cdn, -cdn display cdn in use
RATE-LIMIT:
-c int general internal worker threads (default 25)
-rate int packets to send per second (default 1000)
UPDATE:
-up, -update update naabu to latest version
-duc, -disable-update-check disable automatic naabu update check
OUTPUT:
-o, -output string file to write output to (optional)
-j, -json write output in JSON lines format
-csv write output in csv format
SERVICES-DISCOVERY:
-sD, -service-discovery identify services by port number
-sV, -service-version detect service versions using nmap-service-probes
-sV-fast only probe port-hinted services (faster, skips fallback)
-sV-timeout duration timeout for service version probes (default 5s)
-sV-workers int number of concurrent service version workers (default 25)
-sV-probes string custom nmap-service-probes file path (auto-detected from local nmap install if empty)
-uP, -udp-probes send protocol-specific payloads on UDP scans using nmap-service-probes
CONFIGURATION:
-config string path to the naabu configuration file (default $HOME/.config/naabu/config.yaml)
-scan-all-ips, -sa scan all the IP's associated with DNS record
-ip-version, -iv string[] ip version to scan of hostname (4,6) - (default 4,6) (default ["4","6"])
-scan-type, -s string type of port scan (SYN/CONNECT) (default "c")
-source-ip string source ip and port (x.x.x.x:yyy - might not work on OSX)
-cp, -connect-payload string payload to send in CONNECT scans (optional)
-interface-list, -il list available interfaces and public ip
-interface, -i string network Interface to use for port scan
-nmap invoke nmap scan on targets (nmap must be installed) - Deprecated
-nmap-cli string nmap command to run on found results (example: -nmap-cli 'nmap -sV')
-r string list of custom resolver dns resolution (comma separated or from file)
-proxy string socks5 proxy (ip[:port] / fqdn[:port]
-proxy-auth string socks5 proxy authentication (username:password)
-dns-order string dns resolution order (p/l/lp/pl) (default "l")
-sr, -system-resolver use system DNS as fallback resolver
-resume resume scan using resume.cfg
-stream stream mode (disables resume, nmap, verify, retries, shuffling, etc)
-passive display passive open ports using shodan internetdb api (automatically enables stream mode)
-irt, -input-read-timeout value timeout on input read (default 3m0s)
-no-stdin Disable Stdin processing
HOST-DISCOVERY:
-sn, -host-discovery Perform Only Host Discovery
-show-dead show hosts that did not respond to host discovery (requires host discovery)
-Pn, -skip-host-discovery Skip Host discovery (Deprecated: use -wn/-with-host-discovery instead)
-wn, -with-host-discovery Enable Host discovery
-ps, -probe-tcp-syn string[] TCP SYN Ping (host discovery needs to be enabled)
-pa, -probe-tcp-ack string[] TCP ACK Ping (host discovery needs to be enabled)
-pe, -probe-icmp-echo ICMP echo request Ping (host discovery needs to be enabled)
-pp, -probe-icmp-timestamp ICMP timestamp request Ping (host discovery needs to be enabled)
-pm, -probe-icmp-address-mask ICMP address mask request Ping (host discovery needs to be enabled)
-arp, -arp-ping ARP ping (host discovery needs to be enabled)
-nd, -nd-ping IPv6 Neighbor Discovery (host discovery needs to be enabled)
-rev-ptr Reverse PTR lookup for input ips
OPTIMIZATION:
-retries int number of retries for the port scan (default 3)
-timeout int millisecond to wait before timing out (default 1000)
-warm-up-time int time in seconds between scan phases (default 2)
-ping ping probes for verification of host
-verify validate the ports again with TCP verification
-ss, -smart-scan predictive port scanning using port correlation model (not compatible with stream mode)
-pt, -prediction-threshold int minimum confidence for port predictions (0-100%) (default 20)
DEBUG:
-health-check, -hc run diagnostic check up
-debug display debugging information
-verbose, -v display verbose output
-no-color, -nc disable colors in CLI output
-silent display only results in output
-version display version of naabu
-stats display stats of the running scan (deprecated)
-si, -stats-interval int number of seconds to wait between showing a statistics update (deprecated) (default 5)
-mp, -metrics-port int port to expose naabu metrics on (default 63636)
CLOUD:
-auth configure projectdiscovery cloud (pdcp) api key (default true)
-ac, -auth-config string configure projectdiscovery cloud (pdcp) api key credential file
-pd, -dashboard upload / view output in projectdiscovery cloud (pdcp) UI dashboard
-tid, -team-id string upload asset results to given team id (optional)
-aid, -asset-id string upload new assets to existing asset id (optional)
-aname, -asset-name string assets group name to set (optional)
-pdu, -dashboard-upload string upload naabu output file (jsonl) in projectdiscovery cloud (pdcp) UI dashboard
Baixe o binário / docker prontos para execução ou instale com GO
Nota: antes de instalar o naabu, certifique-se de instalar a biblioteca
libpcappara captura de pacotes.
Para instalar o libpcap no Linux: sudo apt install -y libpcap-dev, no Mac: brew install libpcap, no Windows: instale o Npcap
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
# Executando Naabu
Para executar a ferramenta em um alvo, basta usar o seguinte comando.```sh
naabu -host hackerone.com
Isto executará a ferramenta contra hackerone.com. Existem várias opções de configuração que você pode passar junto com este comando. A opção verbose -v pode ser usada para exibir informações detalhadas.```console
naabu -host hackerone.com
__
___ ___ ___ / / __ __ / _ / _ / _ / _ / // / ////_,/_,/.__/_,_/ v2.0.3
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions [WRN] Developers assume no liability and are not responsible for any misuse or damage. [INF] Running SYN scan with root privileges [INF] Found 4 ports on host hackerone.com (104.16.100.52)
hackerone.com:80 hackerone.com:443 hackerone.com:8443 hackerone.com:8080
As portas para escanear no host podem ser especificadas via parâmetro `-p` (portas udp devem ser expressas como `u:port`). Ele aceita portas no formato nmap e executa enumeração nelas.```sh
naabu -p 80,443,21-23,u:53 -host hackerone.com
Para varreduras UDP, você pode especificar um payload personalizado para enviar usando a flag -cp ou --connect-payload. Isso é particularmente útil para serviços UDP que exigem dados específicos para responder:```sh
naabu -p u:53 -host example.com -cp "DNS query payload"
Por padrão, o Naabu verifica as portas `Top 100` do nmap. Ele suporta as seguintes listas de portas incorporadas -
| Flag | Descrição |
|-------------------|----------------------------------------------|
| `-top-ports 100` | Verificar as primeiras **100** portas do nmap |
| `-top-ports 1000` | Verificar as primeiras **1000** portas do nmap|
| `-p - ` | Verificar todas as portas de **1-65535** |
Você também pode especificar portas específicas que deseja excluir da verificação.```sh
naabu -p - -exclude-ports 80,443
Para executar o naabu em uma lista de hosts, a opção -list pode ser usada.```sh
naabu -list hosts.txt
Para executar o naabu em um ASN, a entrada AS pode ser usada. Ele pega os endereços IP disponíveis para o ASN fornecido e executa a enumeração neles.```console
echo AS14421 | naabu -p 80,443
216.101.17.249:80
216.101.17.249:443
216.101.17.248:443
216.101.17.252:443
216.101.17.251:80
216.101.17.251:443
216.101.17.250:443
216.101.17.250:80
Você também pode obter a saída no formato JSON usando a opção -json. Esta opção salva a saída no formato JSON lines.```console
naabu -host 104.16.99.52 -json
{"ip":"104.16.99.52","port":443} {"ip":"104.16.99.52","port":80}
As portas descobertas podem ser canalizadas para outras ferramentas também. Por exemplo, você pode canalizar as portas descobertas pelo naabu para o [httpx](https://github.com/projectdiscovery/httpx) que então encontrará servidores http em execução no host.```console
echo hackerone.com | naabu -silent | httpx -silent
http://hackerone.com:8443
http://hackerone.com:443
http://hackerone.com:8080
http://hackerone.com:80
A velocidade pode ser controlada alterando o valor da flag rate que representa o número de pacotes por segundo. Aumentá-la durante o processamento de hosts pode levar a um aumento nas taxas de falsos positivos. Portanto, é recomendável mantê-la em um valor razoável.
Naabu suporta tanto IPv4 quanto IPv6, e ambos estão habilitados por padrão. Se o IPv6 for usado, a conectividade deve estar corretamente configurada, e a interface de rede deve ter um endereço IPv6 atribuído (inet6) e um gateway padrão.```console
echo hackerone.com | naabu -p 80 -silent
104.16.99.52:80 104.16.100.52:80 2606:4700::6810:6434:80 2606:4700::6810:6334:80
A opção `-ip-version 6` faz com que a ferramenta use apenas endereços IPv6 ao resolver nomes de domínio.```console
echo hackerone.com | ./naabu -p 80 -ip-version 6
__
___ ___ ___ _/ / __ __
/ _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/ v2.0.8
projectdiscovery.io
Use with caution. You are responsible for your actions
Developers assume no liability and are not responsible for any misuse or damage.
[INF] Running CONNECT scan with non root privileges
[INF] Found 1 ports on host hackerone.com (2606:4700::6810:6334)
hackerone.com:80
Para escanear todos os IPs de ambas as versões, a flag -scan-all-ips pode ser usada.```console
echo hackerone.com | ./naabu -sa -p 80 -silent
[INF] Found 1 ports on host hackerone.com (104.16.100.52) hackerone.com:80 [INF] Found 1 ports on host hackerone.com (104.16.99.52) hackerone.com:80 [INF] Found 1 ports on host hackerone.com (2606:4700::6810:6334) hackerone.com:80 [INF] Found 1 ports on host hackerone.com (2606:4700::6810:6434) hackerone.com:80
# Host Discovery
O Naabu suporta opcionalmente múltiplas opções para realizar a descoberta de hosts. A descoberta de hosts é opcional e pode ser ativada com a flag `-wn`. A flag `-sn` instrui a ferramenta a realizar apenas a descoberta de hosts.
Opções disponíveis para realizar a descoberta de hosts:
- **ARP** ping (`-arp`)
- **TCP SYN** ping (`-ps 80`)
- **TCP ACK** ping (`-pa 443`)
- **ICMP echo** ping (`-pe`)
- **ICMP timestamp** ping (`-pp`)
- **ICMP address mask** ping (`-pm`)
- **IPv6 neighbor discovery** (`-nd`)
# Ficheiro de configuração
O Naabu suporta um ficheiro de configuração localizado por predefinição em `$HOME/.config/naabu/config.yaml`, que permite definir qualquer flag no ficheiro de configuração e definir valores predefinidos para incluir em todas as análises.
# Integração com Nmap
Integrámos suporte para o nmap para descoberta de serviços ou quaisquer análises adicionais suportadas pelo nmap sobre os resultados encontrados pelo Naabu. Certifique-se de que tem `nmap` instalado para utilizar esta funcionalidade.
Para utilizar, a flag `nmap-cli` pode ser usada seguida do comando nmap, por exemplo:-```console
echo hackerone.com | naabu -nmap-cli 'nmap -sV -oX nmap-output'
__
___ ___ ___ _/ / __ __
/ _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/ v2.0.0
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
[INF] Running TCP/ICMP/SYN scan with root privileges
[INF] Found 4 ports on host hackerone.com (104.16.99.52)
hackerone.com:443
hackerone.com:80
hackerone.com:8443
hackerone.com:8080
[INF] Running nmap command: nmap -sV -p 80,8443,8080,443 104.16.99.52
Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-23 05:02 UTC
Nmap scan report for 104.16.99.52
Host is up (0.0021s latency).
PORT STATE SERVICE VERSION
80/tcp open http cloudflare
443/tcp open ssl/https cloudflare
8080/tcp open http-proxy cloudflare
8443/tcp open ssl/https-alt cloudflare
Naabu possui detecção de versão de serviço integrada usando o banco de dados de probes de serviço do nmap. Isso é executado em paralelo com a varredura de portas para máximo desempenho.```sh naabu -host scanme.sh -sV
No input content provided. Please provide the text to translate.```console
scanme.sh:22 [ssh OpenSSH/6.6.1p1]
scanme.sh:80 [http Apache httpd/2.4.7]
scanme.sh:9929 [nping-echo Nping echo]
[INF] Found 3 ports on host scanme.sh (45.33.32.156) with 3 services identified
Flags disponíveis:
A bandeira -sV requer o ficheiro de base de dados nmap-service-probes. O naabu não inclui esta base de dados em si (está licenciada sob a copyleft Nmap Public Source License, que é incompatível com a licença MIT do naabu), por isso lê o ficheiro a partir de uma instalação local do nmap, procurando automaticamente nos caminhos de instalação padrão do nmap. Para usar um ficheiro personalizado, especifique o caminho com -sV-probes.
Os serviços UDP normalmente permanecem silenciosos quando recebem um datagrama vazio, então uma varredura cega de portas UDP perde a maioria deles. Com -uP (-udp-probes) o naabu escolhe um payload específico do protocolo da base de dados nmap-service-probes para cada porta UDP a ser varrida (consulta DNS para a porta 53, pedido NTP para 123, SNMPv1 GetRequest para 161, e assim por diante), para que os serviços reais tenham algo a que responder e o naabu possa reportá-los como abertos.```sh
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
Notas:
- `-uP` é opt-in e aditivo. Quando desabilitado (o padrão), as varreduras UDP mantêm seu comportamento histórico de datagrama de comprimento zero.
- A sonda selecionada é a correspondência de maior prioridade (menor raridade) para a porta de destino; se nenhuma sonda estiver registrada para uma porta, a varredura recorre ao datagrama vazio.
- Um payload fornecido pelo usuário via `-cp` sempre vence a sonda automática para aquela porta.
- `-uP` reutiliza o mesmo banco de dados de sondas que `-sV`, então você pode combinar os dois sem pagar o custo de análise duas vezes. O arquivo de sonda é localizado automaticamente a partir de uma instalação local do nmap; use `-sV-probes` para apontar para um arquivo personalizado. Se nenhum banco de dados puder ser encontrado, `-uP` registra um aviso e é silenciosamente desabilitado.
# Exclusão de CDN/WAF
Naabu também suporta excluir IPs de CDN/WAF da varredura de portas. Se usado, apenas as portas `80` e `443` são escaneadas para esses IPs. Esta funcionalidade pode ser ativada usando a flag `exclude-cdn`.
Atualmente, os IPs de `cloudflare`, `akamai`, `incapsula` e `sucuri` são suportados para exclusões.
# Status da Varredura
Naabu expõe informações de varredura em json em uma porta local vinculada ao localhost em `http://localhost:63636/metrics` (a porta pode ser alterada via a flag `-metrics-port`)
# Usando naabu como biblioteca
O seguinte programa de exemplo escaneia a porta `80` de `scanme.sh`. Os resultados são retornados através do callback `OnResult`:```go
package main
import (
"log"
"context"
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/naabu/v2/pkg/result"
"github.com/projectdiscovery/naabu/v2/pkg/runner"
)
func main() {
options := runner.Options{
Host: goflags.StringSlice{"scanme.sh"},
ScanType: "s",
OnResult: func(hr *result.HostResult) {
log.Println(hr.Host, hr.Ports)
},
Ports: "80",
}
naabuRunner, err := runner.NewRunner(&options)
if err != nil {
log.Fatal(err)
}
defer naabuRunner.Close()
naabuRunner.RunEnumeration(context.Background())
}
OnResulté chamado uma vez após a conclusão da varredura com resultados agregados. Para processar resultados em tempo real à medida que as portas são descobertas, useOnReceiveem vez disso. A opçãoStreamcontrola apenas o carregamento assíncrono de alvos — não afeta quando os callbacks são acionados.
Naabu é feito com 🖤 pela equipe do projectdiscovery. Contribuições da comunidade tornaram o projeto o que ele é.
Veja o arquivo Thanks.md para mais detalhes.
| Flag | Descrição |
|---|
-sV | Ativar deteção de versão de serviço |
-sV-fast | Apenas sondar serviços sugeridos pela porta (mais rápido, ignora sondas de fallback) |
-sV-timeout duration | Tempo limite para sondas de versão de serviço (padrão 5s) |
-sV-workers int | Número de trabalhadores concorrentes para versão de serviço (padrão 25) |
-sV-probes string | Caminho personalizado do ficheiro nmap-service-probes (detetado automaticamente a partir da instalação local do nmap se vazio) |
-sD | Descoberta de serviço (associar número de porta ao nome do serviço, sem sondagem ativa) |