
Goで書かれた高速なポートスキャナで、信頼性とシンプルさに重点を置いています。バグバウンティやペンテストにおける攻撃対象領域の発見のために、他のツールと組み合わせて使用するように設計されています。
機能 • インストール • 使い方 • 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
すぐに実行可能な binary / docker をダウンロードするか、GOでインストールしてください。
注意: naabuをインストールする前に、パケットキャプチャ用の
libpcapライブラリをインストールしてください。
Linuxにlibpcapをインストールするには: 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 は nmap の `Top 100` ポートをチェックします。以下のビルトインポートリストをサポートしています -
| フラグ | 説明 |
|-------------------|------------------------------------------|
| `-top-ports 100` | nmap のトップ **100** ポートをスキャン |
| `-top-ports 1000` | nmap のトップ **1000** ポートをスキャン |
| `-p - ` | **1-65535** の全ポートをスキャン |
スキャンから除外したい特定のポートを指定することもできます。```sh
naabu -p - -exclude-ports 80,443
hostsのリストに対してnaabuを実行するには、-listオプションを使用できます。```sh
naabu -list hosts.txt
ASNに対してnaabuを実行するには、AS入力を使用できます。指定されたASNで利用可能なIPアドレスを取得し、それらに対して列挙を実行します。```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
速度は、1秒あたりのパケット数を表す 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
# ホスト検出
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 連携
Naabu で見つかった結果に対して、サービス検出や nmap がサポートするその他の追加スキャンのために、nmap サポートを統合しています。この機能を使用するには、`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
| ツール名 | 説明 | カテゴリ |
|---|---|---|
| Awesome-Hacking-Resources | 厳選されたハッキング&ペネトレーションテストリソースのリスト | リソースリスト |```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 の下でライセンスされており、naabu の MIT ライセンスとは互換性がありません)。そのため、naabu はローカルの nmap インストールからこのファイルを読み取り、標準的な nmap インストールパスを自動的に検索します。カスタムファイルを使用するには、-sV-probes でパスを指定してください。
UDP サービスは通常、空のデータグラムを受け取っても応答しないため、ブラインド UDP ポートスキャンではほとんどのサービスを見逃します。-uP(-udp-probes)を使用すると、naabu はスキャン対象の各 UDP ポートに対して、nmap-service-probes データベースからプロトコル固有のペイロードを選択します(ポート53なら DNS クエリ、123なら NTP リクエスト、161なら SNMPv1 GetRequest など)。これにより、実際のサービスが応答できるようになり、naabu はそれらを open として報告できます。```sh
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
注意事項:
- `-uP` はオプトインであり、追加的な機能です。無効(デフォルト)の場合、UDPスキャンは従来の長さゼロのデータグラム動作を維持します。
- 選択されるプローブは、宛先ポートに対して最も優先度が高い(レアリティが最も低い)マッチです。ポートにプローブが登録されていない場合、スキャンは空のデータグラムにフォールバックします。
- `-cp` でユーザーが指定したペイロードは、そのポートの自動プローブよりも常に優先されます。
- `-uP` は `-sV` と同じプローブデータベースを再利用するため、両方を組み合わせても解析コストを二度支払う必要はありません。プローブファイルはローカルのnmapインストールから自動的に特定されます。カスタムファイルを指定するには `-sV-probes` を使用してください。データベースが見つからない場合、`-uP` は警告をログに記録し、サイレントに無効化されます。
# CDN/WAF 除外
Naabu は、ポートスキャンの対象から CDN/WAF IP を除外することもサポートしています。使用した場合、それらの IP に対してはポート `80` と `443` のみがスキャンされます。この機能は `exclude-cdn` フラグを使用して有効にできます。
現在、除外がサポートされている IP は `cloudflare`、`akamai`、`incapsula`、`sucuri` です。
# スキャンステータス
Naabu は、ローカルホストにバインドされたローカルポート上で JSON スキャン情報を公開します。デフォルトは `http://localhost:63636/metrics` です(ポートは `-metrics-port` フラグで変更可能)。
# ライブラリとしての naabu の使用
以下のサンプルプログラムは `scanme.sh` のポート `80` をスキャンします。結果は `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は、スキャン完了後に集約された結果を取得するために1回呼び出されます。ポートが検出されたときに結果をリアルタイムで処理するには、代わりに**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 | サービス検出(ポート番号をサービス名にマッチ、アクティブなプローブは行わない) |