
Un escáner de puertos rápido escrito en go con un enfoque en la confiabilidad y la simplicidad. Diseñado para ser utilizado en combinación con otras herramientas para el descubrimiento de superficie de ataque en bug bounties y pentests.
Características • Instalación • Uso • Ejecutar naabu • Configuración • Integración con NMAP • Exclusión CDN/WAF • Discord
Naabu es una herramienta de escaneo de puertos escrita en Go que permite enumerar puertos válidos para hosts de manera rápida y confiable. Es una herramienta muy simple que realiza escaneos rápidos SYN/CONNECT/UDP en el host o lista de hosts y lista todos los puertos que devuelven una respuesta.
naabu -h
Esto mostrará la ayuda de la herramienta. Aquí están todas las opciones que soporta.```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
Descargue el binario listo para ejecutar / docker o instálelo con GO
Nota: antes de instalar naabu, asegúrese de instalar la biblioteca
libpcappara la captura de paquetes.
Para instalar libpcap en Linux: sudo apt install -y libpcap-dev, en Mac: brew install libpcap, en Windows: instale Npcap
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
# Ejecutando Naabu
Para ejecutar la herramienta en un objetivo, simplemente usa el siguiente comando.```sh
naabu -host hackerone.com
Esto ejecutará la herramienta contra hackerone.com. Hay varias opciones de configuración que puedes pasar junto con este comando. El modificador verbose -v se puede utilizar para mostrar información detallada.```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
Los puertos a escanear en el host se pueden especificar mediante el parámetro `-p` (los puertos udp deben expresarse como `u:port`). Toma puertos en formato nmap y ejecuta enumeración sobre ellos.```sh
naabu -p 80,443,21-23,u:53 -host hackerone.com
Para escaneos UDP, puede especificar un payload personalizado para enviar usando la bandera -cp o --connect-payload. Esto es particularmente útil para servicios UDP que requieren datos específicos para responder:```sh
naabu -p u:53 -host example.com -cp "DNS query payload"
Por defecto, Naabu verifica los puertos `Top 100` de nmap. Admite las siguientes listas de puertos integradas -
| Flag | Descripción |
|-------------------|--------------------------------------|
| `-top-ports 100` | Escanea los **100** puertos principales de nmap |
| `-top-ports 1000` | Escanea los **1000** puertos principales de nmap |
| `-p - ` | Escanea todos los puertos del **1 al 65535** |
También puedes especificar puertos concretos que desees excluir del escaneo.```sh
naabu -p - -exclude-ports 80,443
Para ejecutar naabu en una lista de hosts, se puede usar la opción -list.```sh
naabu -list hosts.txt
Para ejecutar naabu en un ASN, se puede usar la entrada AS. Toma las direcciones IP disponibles para el ASN dado y ejecuta la enumeración sobre ellas.```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
También puedes obtener la salida en formato json usando el modificador -json. Este modificador guarda la salida en el formato de líneas JSON.```console
naabu -host 104.16.99.52 -json
{"ip":"104.16.99.52","port":443} {"ip":"104.16.99.52","port":80}
Los puertos descubiertos también pueden enviarse a otras herramientas mediante tuberías. Por ejemplo, puedes enviar los puertos descubiertos por naabu a [httpx](https://github.com/projectdiscovery/httpx) que luego encontrará los servidores http en ejecución en el 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
La velocidad se puede controlar cambiando el valor del indicador rate que representa el número de paquetes por segundo. Aumentarlo mientras se procesan hosts puede llevar a un aumento en las tasas de falsos positivos. Por lo que se recomienda mantenerlo en una cantidad razonable.
Naabu soporta tanto IPv4 como IPv6, y ambos están habilitados por defecto. Si se usa IPv6, la conectividad debe estar configurada correctamente, y la interfaz de red debe tener asignada una dirección IPv6 (inet6) y una puerta de enlace predeterminada.```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
La opción `-ip-version 6` hace que la herramienta use solo direcciones IPv6 al resolver nombres de dominio.```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 todas las IPs de ambas versiones, se puede usar la bandera -scan-all-ips.```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
# Descubrimiento de hosts
Naabu admite opcionalmente múltiples opciones para realizar descubrimiento de hosts. El descubrimiento de hosts es opcional y se puede habilitar con la bandera `-wn`. La bandera `-sn` indica a la herramienta que solo realice descubrimiento de hosts.
Opciones disponibles para realizar descubrimiento de hosts:
- Ping **ARP** (`-arp`)
- Ping TCP **SYN** (`-ps 80`)
- Ping TCP **ACK** (`-pa 443`)
- Ping ICMP **echo** (`-pe`)
- Ping ICMP **timestamp** (`-pp`)
- Ping ICMP **máscara de dirección** (`-pm`)
- Descubrimiento de **vecinos** IPv6 (`-nd`)
# Archivo de configuración
Naabu soporta un archivo de configuración por defecto ubicado en `$HOME/.config/naabu/config.yaml`. Permite definir cualquier bandera en el archivo de configuración y establecer valores predeterminados para incluir en todos los escaneos.
# Integración con Nmap
Hemos integrado soporte de nmap para el descubrimiento de servicios o cualquier escaneo adicional compatible con nmap en los resultados encontrados por Naabu. Asegúrate de tener `nmap` instalado para usar esta función.
Para usarlo, se puede usar la bandera `nmap-cli` seguida del comando nmap, por ejemplo:-```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 tiene detección de versión de servicio integrada utilizando la base de datos de sondas de servicio de nmap. Esto se ejecuta en paralelo con el escaneo de puertos para obtener el máximo rendimiento.```sh naabu -host scanme.sh -sV
No content provided for translation.```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
Available flags:
La bandera -sV requiere el archivo de base de datos nmap-service-probes. naabu no incluye esta base de datos (está bajo la licencia copyleft Nmap Public Source License, incompatible con la licencia MIT de naabu), por lo que la lee desde una instalación local de nmap, buscando automáticamente en las rutas estándar de instalación de nmap. Para usar un archivo personalizado, especifique la ruta con -sV-probes.
Los servicios UDP generalmente permanecen en silencio cuando reciben un datagrama vacío, por lo que un escaneo ciego de puertos UDP no detecta la mayoría. Con -uP (-udp-probes) naabu selecciona una carga útil específica del protocolo de la base de datos nmap-service-probes para cada puerto UDP escaneado (consulta DNS para el puerto 53, solicitud NTP para el 123, SNMPv1 GetRequest para el 161, etc.), de modo que los servicios reales tengan algo a lo que responder y naabu pueda reportarlos como abiertos.```sh
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
Notas:
- `-uP` es opcional y aditivo. Cuando está deshabilitado (por defecto), los escaneos UDP mantienen su comportamiento histórico de datagrama de longitud cero.
- La sonda seleccionada es la de mayor prioridad (menor rareza) que coincida con el puerto de destino; si no hay ninguna sonda registrada para un puerto, el escaneo recurre al datagrama vacío.
- Una carga útil proporcionada por el usuario mediante `-cp` siempre prevalece sobre la sonda automática para ese puerto.
- `-uP` reutiliza la misma base de datos de sondas que `-sV`, por lo que se pueden combinar ambas sin pagar el costo de análisis dos veces. El archivo de sondas se localiza automáticamente desde una instalación local de nmap; use `-sV-probes` para apuntar a un archivo personalizado. Si no se puede encontrar la base de datos, `-uP` registra una advertencia y se desactiva silenciosamente.
# Exclusión de CDN/WAF
Naabu también admite la exclusión de IPs de CDN/WAF del escaneo de puertos. Si se usa, solo se escanean los puertos `80` y `443` para esas IPs. Esta característica se puede habilitar usando el flag `exclude-cdn`.
Actualmente, las IPs de `cloudflare`, `akamai`, `incapsula` y `sucuri` están soportadas para exclusiones.
# Estado del escaneo
Naabu expone información de escaneo en JSON en un puerto local vinculado a localhost en `http://localhost:63636/metrics` (el puerto se puede cambiar mediante el flag `-metrics-port`)
# Uso de naabu como biblioteca
El siguiente programa de ejemplo escanea el puerto `80` de `scanme.sh`. Los resultados se devuelven a través del 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())
}
OnResultse llama una vez que el escaneo se completa con los resultados agregados. Para procesar los resultados en tiempo real a medida que se descubren puertos, useOnReceiveen su lugar. La opciónStreamsolo controla la carga asíncrona de objetivos; no afecta al momento en que se ejecutan las devoluciones de llamada.
Naabu está hecho con 🖤 por el equipo de projectdiscovery. Las contribuciones de la comunidad han hecho que el proyecto sea lo que es.
Consulte el archivo Thanks.md para obtener más detalles.
| Flag | Description |
|---|
-sV | Habilitar la detección de versiones de servicios |
-sV-fast | Solo sondear servicios sugeridos por el puerto (más rápido, omite sondeos de reserva) |
-sV-timeout duration | Tiempo de espera para los sondeos de versiones de servicios (por defecto 5s) |
-sV-workers int | Número de trabajadores concurrentes para versiones de servicios (por defecto 25) |
-sV-probes string | Ruta personalizada al archivo nmap-service-probes (se detecta automáticamente desde la instalación local de nmap si está vacío) |
-sD | Descubrimiento de servicios (asignar número de puerto a nombre de servicio, sin sondeo activo) |