
Быстрый сканер портов, написанный на Go, с упором на надёжность и простоту. Предназначен для использования в сочетании с другими инструментами для обнаружения поверхности атаки в программах bug bounty и пентестах.
Возможности • Установка • Использование • Запуск naabu • Конфиг • Интеграция с NMAP • Исключение CDN/WAF • Discord
Naabu — это инструмент для сканирования портов, написанный на Go, который позволяет быстро и надежно перечислять открытые порты для хостов. Это очень простой инструмент, выполняющий быстрые SYN/CONNECT/UDP сканирования на хосте/списке хостов и выводящий все порты, возвращающие ответ.
naabu -h
Это отобразит справку по инструменту. Вот все переключатели, которые он поддерживает.```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
Загрузите готовый к запуску бинарный файл / docker или установите с помощью GO
Примечание: перед установкой naabu убедитесь, что установлена библиотека
libpcapдля захвата пакетов.
Чтобы установить libpcap на Linux: sudo apt install -y libpcap-dev, на Mac: brew install libpcap, на Windows: установите Npcap
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
# Запуск Naabu
Чтобы запустить инструмент на цель, просто используйте следующую команду.```sh
naabu -host hackerone.com
Это запустит инструмент против hackerone.com. Существует ряд опций конфигурации, которые вы можете передать вместе с этой командой. Подробный переключатель -v можно использовать для отображения подробной информации.```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
Порты для сканирования на хосте можно указать с помощью параметра `-p` (udp порты должны быть указаны как `u:port`). Он принимает порты в формате nmap и выполняет перечисление на них.```sh
naabu -p 80,443,21-23,u:53 -host hackerone.com
При UDP-сканировании вы можете указать пользовательскую полезную нагрузку для отправки с помощью флага -cp или --connect-payload. Это особенно полезно для UDP-сервисов, которым требуются специфические данные для ответа:```sh
naabu -p u:53 -host example.com -cp "DNS query payload"
По умолчанию Naabu проверяет `Топ-100` портов nmap. Она поддерживает следующие встроенные списки портов:
| Flag | Описание |
|-------------------|--------------------------------------|
| `-top-ports 100` | Сканировать топ **100** портов nmap |
| `-top-ports 1000` | Сканировать топ **1000** портов nmap |
| `-p - ` | Сканировать все порты от **1 до 65535** |
Вы также можете указать конкретные порты, которые хотите исключить из сканирования.```sh
naabu -p - -exclude-ports 80,443
Чтобы запустить naabu на списке хостов, можно использовать опцию -list.```sh
naabu -list hosts.txt
Для запуска naabu на ASN можно использовать входные данные AS. Он берет IP-адреса, доступные для данного ASN, и выполняет перечисление на них.```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
Вы также можете получить вывод в формате json, используя ключ -json. Этот ключ сохраняет вывод в формате JSON lines.```console
naabu -host 104.16.99.52 -json
{"ip":"104.16.99.52","port":443} {"ip":"104.16.99.52","port":80}
Обнаруженные порты можно передавать и другим инструментам. Например, вы можете передать порты, обнаруженные naabu, в [httpx](https://github.com/projectdiscovery/httpx), который затем найдет работающие HTTP-серверы на хосте.```console
echo hackerone.com | naabu -silent | httpx -silent
http://hackerone.com:8443
http://hackerone.com:443
http://hackerone.com:8080
http://hackerone.com:80
Скорость можно контролировать, изменяя значение флага rate, который представляет количество пакетов в секунду. Увеличение этого значения при обработке хостов может привести к увеличению количества ложных срабатываний. Поэтому рекомендуется оставлять его на разумном уровне.
Naabu поддерживает как IPv4, так и IPv6, и оба включены по умолчанию. При использовании IPv6 необходимо правильно настроить подключение, а сетевой интерфейс должен иметь назначенный IPv6-адрес (inet6) и шлюз по умолчанию.```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
Опция `-ip-version 6` заставляет инструмент использовать только IPv6 адреса при разрешении доменных имен.```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
Чтобы просканировать все IP-адреса обеих версий, можно использовать флаг -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
# Host Discovery
Naabu опционально поддерживает несколько опций для выполнения обнаружения хостов. Обнаружение хостов является опциональным и может быть включено с помощью флага `-wn`. Флаг `-sn` указывает инструменту выполнять только обнаружение хостов.
Доступные опции для выполнения обнаружения хостов:
- **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`)
# Файл конфигурации
Naabu по умолчанию поддерживает файл конфигурации, расположенный по пути `$HOME/.config/naabu/config.yaml`. Он позволяет вам определить любой флаг в файле конфигурации и задать значения по умолчанию для включения во все сканирования.
# Интеграция с Nmap
Мы интегрировали поддержку nmap для обнаружения сервисов или любых дополнительных сканирований, поддерживаемых nmap, на найденных результатах Naabu. Убедитесь, что у вас установлен `nmap` для использования этой функции.
Для использования можно использовать флаг `nmap-cli`, за которым следует команда nmap, например:-```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 имеет встроенное определение версий служб, использующее базу данных служебных проб nmap. Этот процесс выполняется параллельно со сканированием портов для достижения максимальной производительности.```sh naabu -host scanme.sh -sV
- `snitch` `v1.0.1` _ инструмент сбора информации через дорки_```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
Доступные флаги:
Флаг -sV требует файла базы данных nmap-service-probes. naabu не поставляет эту базу данных (она распространяется по лицензии с авторским левом Nmap Public Source License, которая несовместима с лицензией MIT, используемой naabu), поэтому она читает файл из локальной установки nmap, автоматически проверяя стандартные пути установки nmap. Чтобы использовать собственный файл, укажите путь с помощью -sV-probes.
UDP-службы обычно молчат, когда получают пустую дейтаграмму, поэтому слепое сканирование UDP-портов пропускает большинство из них. С помощью -uP (-udp-probes) naabu выбирает протокол-специфичную полезную нагрузку из базы данных nmap-service-probes для каждого сканируемого UDP-порта (DNS-запрос для порта 53, NTP-запрос для 123, SNMPv1 GetRequest для 161 и так далее), чтобы реальные службы имели на что ответить, и naabu мог сообщить о них как об открытых.```sh
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
Notes:
- `-uP` является опциональным и аддитивным. Когда отключено (по умолчанию), UDP-сканирование сохраняет своё историческое поведение с нулевым датаграммным payload'ом.
- Выбранный пробник — это совпадение с наивысшим приоритетом (наименьшей редкостью) для целевого порта; если для порта не зарегистрирован пробник, сканирование возвращается к пустой датаграмме.
- Пользовательский payload, переданный через `-cp`, всегда переопределяет автоматический пробник для этого порта.
- `-uP` использует ту же базу данных пробников, что и `-sV`, поэтому можно комбинировать их без двойной стоимости парсинга. Файл пробников автоматически находится из локальной установки nmap; используйте `-sV-probes` для указания пользовательского файла. Если база данных не найдена, `-uP` записывает предупреждение и молча отключается.
# Исключение CDN/WAF
Naabu также поддерживает исключение IP-адресов CDN/WAF из сканирования портов. При использовании для этих IP-адресов сканируются только порты `80` и `443`. Эта функция включается с помощью флага `exclude-cdn`.
В настоящее время для исключения поддерживаются IP-адреса `cloudflare`, `akamai`, `incapsula` и `sucuri`.
# Статус сканирования
Naabu предоставляет информацию о сканировании в формате json на локальном порту, привязанном к localhost по адресу `http://localhost:63636/metrics` (порт можно изменить с помощью флага `-metrics-port`)
# Использование naabu как библиотеки
Следующая примерная программа сканирует порт `80` хоста `scanme.sh`. Результаты возвращаются через обратный вызов `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вызывается один раз после завершения сканирования с агрегированными результатами. Для обработки результатов в реальном времени по мере обнаружения портов используйтеOnReceive. ОпцияStreamуправляет только асинхронной загрузкой целей — она не влияет на момент вызова колбэков.
Naabu сделан с 🖤 командой projectdiscovery. Вклад сообщества сделал проект таким, какой он есть.
Смотрите файл Thanks.md для получения дополнительной информации.
| Флаг | Описание |
|---|
-sV | Включить определение версии службы |
-sV-fast | Зондировать только службы, подсказанные портом (быстрее, пропускает запасные зонды) |
-sV-timeout duration | Таймаут для зондов определения версии службы (по умолчанию 5 секунд) |
-sV-workers int | Количество параллельных рабочих процессов определения версии службы (по умолчанию 25) |
-sV-probes string | Путь к пользовательскому файлу nmap-service-probes (автоматически определяется из локальной установки nmap, если пусто) |
-sD | Обнаружение служб (сопоставление номера порта с именем службы, без активного зондирования) |