Nuclei

Nuclei is a fast, template based vulnerability scanner focusing on extensive configurability, massive extensibility and ease of use.

Usage: nuclei [flags]

Options

Target

OptionDescription
-u, -target string[]target URLs/hosts to scan
-l, -list stringpath to file containing a list of target URLs/hosts to scan (one per line)
-eh, -exclude-hosts string[]hosts to exclude from the input list (IP, CIDR, hostname)
-resume stringresume scan using resume.cfg (clustering will be disabled)
-sa, -scan-all-ipsscan all the IPs associated with a DNS record
-iv, -ip-version string[]IP version to scan of hostname (4,6) – default is 4

Target-Format

OptionDescription
-im, -input-mode stringmode of input file (list, burp, jsonl, yaml, openapi, swagger) (default "list")
-ro, -required-onlyuse only required fields in input format when generating requests
-sfv, -skip-format-validationskip format validation (like missing vars) when parsing input file

Templates

OptionDescription
-nt, -new-templatesrun only new templates added in latest nuclei-templates release
-ntv, -new-templates-version string[]run new templates added in specific version
-as, -automatic-scanautomatic web scan using Wappalyzer technology detection to tags mapping
-t, -templates string[]list of template or template directory to run (comma-separated, file)
-turl, -template-url string[]template URL or list containing template URLs to run (comma-separated, file)
-ai, -prompt stringgenerate and run template using AI prompt
-w, -workflows string[]list of workflow or workflow directory to run (comma-separated, file)
-wurl, -workflow-url string[]workflow URL or list containing workflow URLs to run (comma-separated, file)
-validatevalidate the passed templates to nuclei
-nss, -no-strict-syntaxdisable strict syntax check on templates
-td, -template-displaydisplays the templates content
-tllist all available templates
-tgllist all available tags
-signsigns the templates with the private key defined in NUCLEI_SIGNATURE_PRIVATE_KEY environment variable
-codeenable loading code protocol-based templates
-dut, -disable-unsigned-templatesdisable running unsigned templates or templates with mismatched signature
-esc, -enable-self-containedenable loading self-contained templates
-egm, -enable-global-matchersenable loading global matchers templates
-fileenable loading file templates

Filtering

OptionDescription
-a, -author string[]templates to run based on authors (comma-separated, file)
-tags string[]templates to run based on tags (comma-separated, file)
-etags, -exclude-tags string[]templates to exclude based on tags (comma-separated, file)
-itags, -include-tags string[]tags to be executed even if they are excluded either by default or configuration
-id, -template-id string[]templates to run based on template IDs (comma-separated, file, allow-wildcard)
-eid, -exclude-id string[]templates to exclude based on template IDs (comma-separated, file)
-it, -include-templates string[]path to template file or directory to be executed even if they are excluded either by default or configuration
-et, -exclude-templates string[]path to template file or directory to exclude (comma-separated, file)
-em, -exclude-matchers string[]template matchers to exclude in result
-s, -severity value[]templates to run based on severity. Possible values: info, low, medium, high, critical, unknown
-es, -exclude-severity value[]templates to exclude based on severity. Possible values: info, low, medium, high, critical, unknown
-pt, -type value[]templates to run based on protocol type. Possible values: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-ept, -exclude-type value[]templates to exclude based on protocol type. Possible values: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-tc, -template-condition string[]templates to run based on expression condition

Output

OptionDescription
-o, -output stringoutput file to write found issues/vulnerabilities
-sresp, -store-respstore all request/response passed through nuclei to output directory
-srd, -store-resp-dir stringstore all request/response passed through nuclei to custom directory (default "output")
-silentdisplay findings only
-nc, -no-colordisable output content coloring (ANSI escape codes)
-j, -jsonlwrite output in JSONL(ines) format
-irr, -include-rr, -omit-rawinclude request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only) [DEPRECATED: use -omit-raw] (default true)
-or, -omit-rawomit request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only)
-ot, -omit-templateomit encoded template in the JSON, JSONL output
-nm, -no-metadisable printing result metadata in CLI output
-ts, -timestampenables printing timestamp in CLI output
-rdb, -report-db stringnuclei reporting database (always use this to persist report data)
-ms, -matcher-statusdisplay match failure status
-me, -markdown-export stringdirectory to export results in Markdown format
-se, -sarif-export stringfile to export results in SARIF format
-je, -json-export stringfile to export results in JSON format
-jle, -jsonl-export stringfile to export results in JSONL(ine) format
-rd, -redact string[]redact given list of keys from query parameter, request header and body

Configurations

OptionDescription
-config stringpath to the nuclei configuration file
-tp, -profile stringtemplate profile config file to run
-tpl, -profile-listlist community template profiles
-fr, -follow-redirectsenable following redirects for HTTP templates
-fhr, -follow-host-redirectsfollow redirects on the same host
-mr, -max-redirects intmax number of redirects to follow for HTTP templates (default 10)
-dr, -disable-redirectsdisable redirects for HTTP templates
-rc, -report-config stringnuclei reporting module configuration file
-H, -header string[]custom header/cookie to include in all HTTP requests in header:value format (CLI or file)
-V, -var valuecustom vars in key=value format
-r, -resolvers stringfile containing resolver list for nuclei
-sr, -system-resolversuse system DNS resolving as error fallback
-dc, -disable-clusteringdisable clustering of requests
-passiveenable passive HTTP response processing mode
-fh2, -force-http2force HTTP/2 connection on requests
-ev, -env-varsenable environment variables to be used in template
-cc, -client-cert stringclient certificate file (PEM-encoded) used for authenticating against scanned hosts
-ck, -client-key stringclient key file (PEM-encoded) used for authenticating against scanned hosts
-ca, -client-ca stringclient certificate authority file (PEM-encoded) used for authenticating against scanned hosts
-sml, -show-match-lineshow match lines for file templates, works with extractors only
-ztlsuse ZTLS library with autofallback to standard one for TLS 1.3 [Deprecated] — autofallback to ZTLS is enabled by default
-sni stringTLS SNI hostname to use (default: input domain name)
-dka, -dialer-keep-alive valuekeep-alive duration for network requests
-lfa, -allow-local-file-accessallows file (payload) access anywhere on the system
-lna, -restrict-local-network-accessblocks connections to the local/private network
-i, -interface stringnetwork interface to use for network scan
-at, -attack-type stringtype of payload combinations to perform (batteringram, pitchfork, clusterbomb)
-sip, -source-ip stringsource IP address to use for network scan
-rsr, -response-size-read intmax response size to read in bytes
-rss, -response-size-save intmax response size to save in bytes (default 1048576)
-resetreset removes all nuclei configuration and data files (including nuclei-templates)
-tlsi, -tls-impersonateenable experimental client hello (JA3) TLS randomization
-hae, -http-api-endpoint stringexperimental HTTP API endpoint

INTERACTSH

OptionDescription
-iserver, -interactsh-server stringInteractsh server URL for self-hosted instance (default: oast.pro, oast.live, oast.site, oast.online, oast.fun, oast.me)
-itoken, -interactsh-token stringAuthentication token for self-hosted Interactsh server
-interactions-cache-size intNumber of requests to keep in the interactions cache (default 5000)
-interactions-eviction intNumber of seconds to wait before evicting requests from cache (default 60)
-interactions-poll-duration intNumber of seconds to wait before each interaction poll request (default 5)
-interactions-cooldown-period intExtra time for interaction polling before exiting (default 5)
-ni, -no-interactshDisable Interactsh server for OAST testing, exclude OAST-based templates

Fuzzing

OptionDescription
-ft, -fuzzing-type stringoverrides fuzzing type set in template (replace, prefix, postfix, infix)
-fm, -fuzzing-mode stringoverrides fuzzing mode set in template (multiple, single)
-fuzzenable loading fuzzing templates (Deprecated: use -dast instead)
-dastenable / run DAST (fuzz) nuclei templates
-dts, -dast-serverenable DAST server mode (live fuzzing)
-dtr, -dast-reportwrite DAST scan report to file
-dtst, -dast-server-token stringDAST server token (optional)
-dtsa, -dast-server-address stringDAST server address (default "localhost:9055")
-dfp, -display-fuzz-pointsdisplay fuzz points in the output for debugging
-fuzz-param-frequency intfrequency of uninteresting parameters for fuzzing before skipping (default 10)
-fa, -fuzz-aggression stringfuzzing aggression level controls payload count for fuzz (low, medium, high) (default "low")
-cs, -fuzz-scope string[]in-scope URL regex to be followed by fuzzer
-cos, -fuzz-out-scope string[]out-of-scope URL regex to be excluded by fuzzer

Uncover

OptionDescription
-uc, -uncoverenable uncover engine
-uq, -uncover-query string[]uncover search query
-ue, -uncover-engine string[]uncover search engine (shodan, censys, fofa, shodan-idb, quake, hunter, zoomeye, netlas, criminalip, publicwww, hunterhow, google, odin, binaryedge, onyphe, driftnet) (default shodan)
-uf, -uncover-field stringuncover fields to return (ip, port, host) (default "ip:port")
-ul, -uncover-limit intuncover results to return (default 100)
-ur, -uncover-ratelimit intoverride ratelimit of engines with unknown ratelimit (default 60 req/min) (default 60)

Ratelimit

OptionDescription
-rl, -rate-limit intmaximum number of requests to send per second (default 150)
-rld, -rate-limit-duration valuemaximum number of requests to send per second duration window (default 1s)
-rlm, -rate-limit-minute intmaximum number of requests to send per minute (DEPRECATED)
-bs, -bulk-size intmaximum number of hosts to be analyzed in parallel per template (default 25)
-c, -concurrency intmaximum number of templates to be executed in parallel (default 25)
-hbs, -headless-bulk-size intmaximum number of headless hosts to be analyzed in parallel per template (default 10)
-headc, -headless-concurrency intmaximum number of headless templates to be executed in parallel (default 10)
-jsc, -js-concurrency intmaximum number of JavaScript runtimes to be executed in parallel (default 120)
-pc, -payload-concurrency intmax payload concurrency for each template (default 25)
-prc, -probe-concurrency intHTTP probe concurrency with httpx (default 50)

Optimizations

OptionDescription
-timeout inttime to wait in seconds before timeout (default 10)
-retries intnumber of times to retry a failed request (default 1)
-ldp, -leave-default-portsleave default HTTP/HTTPS ports (e.g. host:80, host:443)
-mhe, -max-host-error intmax errors for a host before skipping from scan (default 30)
-te, -track-error string[]adds given error to max-host-error watchlist (standard, file)
-nmhe, -no-mhedisable skipping host from scan based on errors
-projectuse a project folder to avoid sending same request multiple times
-project-path stringset a specific project path (default "/tmp")
-spm, -stop-at-first-matchstop processing HTTP requests after the first match (may break template/workflow logic)
-streamstream mode - start elaborating without sorting the input
-ss, -scan-strategy valuestrategy to use while scanning (auto/host-spray/template-spray) (default auto)
-irt, -input-read-timeout valuetimeout on input read (default 3m0s)
-nh, -no-httpxdisable httpx probing for non-url input
-no-stdindisable stdin processing

Headless

OptionDescription
-headlessenable templates that require headless browser support (root user on Linux will disable sandbox)
-page-timeout intseconds to wait for each page in headless mode (default 20)
-sb, -show-browsershow the browser on the screen when running templates with headless mode
-ho, -headless-options string[]start headless chrome with additional options
-sc, -system-chromeuse locally installed Chrome browser instead of nuclei installed
-lha, -list-headless-actionlist available headless actions

Debug

OptionDescription
-debugshow all requests and responses
-dreq, -debug-reqshow all sent requests
-dresp, -debug-respshow all received responses
-p, -proxy string[]list of http/socks5 proxy to use (comma separated or file input)
-pi, -proxy-internalproxy all internal requests
-ldf, -list-dsl-functionlist all supported DSL function signatures
-tlog, -trace-log stringfile to write sent requests trace log
-elog, -error-log stringfile to write sent requests error log
-versionshow nuclei version
-hm, -hang-monitorenable nuclei hang monitoring
-v, -verboseshow verbose output
-profile-mem stringgenerate memory (heap) profile & trace files
-vvdisplay templates loaded for scan
-svd, -show-var-dumpshow variables dump for debugging
-vdl, -var-dump-limit intlimit the number of characters displayed in var dump (default 255)
-ep, -enable-pprofenable pprof debugging server
-tv, -templates-versionshows the version of the installed nuclei-templates
-hc, -health-checkrun diagnostic check up

Update

OptionDescription
-up, -updateupdate nuclei engine to the latest released version
-ut, -update-templatesupdate nuclei-templates to latest released version
-ud, -update-template-dir stringcustom directory to install / update nuclei-templates
-duc, -disable-update-checkdisable automatic nuclei/templates update check

Statistics

OptionDescription
-statsdisplay statistics about the running scan
-sj, -stats-jsondisplay statistics in JSONL(ines) format
-si, -stats-interval intnumber of seconds to wait between showing a statistics update (default 5)
-mp, -metrics-port intport to expose nuclei metrics on (default 9092)
-hps, -http-statsenable http status capturing (experimental)

Cloud

OptionDescription
-authconfigure ProjectDiscovery Cloud (pdcp) API key (default true)
-tid, -team-id stringupload scan results to given team id (optional) (default "none")
-cup, -cloud-uploadupload scan results to pdcp dashboard [DEPRECATED use -dashboard]
-sid, -scan-id stringupload scan results to existing scan id (optional)
-sname, -scan-name stringscan name to set (optional)
-pd, -dashboardupload / view nuclei results in ProjectDiscovery Cloud (pdcp) UI dashboard
-pdu, -dashboard-upload stringupload / view nuclei results file (jsonl) in ProjectDiscovery Cloud (pdcp) UI dashboard

Authentification

OptionDescription
-sf, -secret-file string[]path to config file containing secrets for nuclei authenticated scan
-ps, -prefetch-secretsprefetch secrets from the secrets file

Examples

Run nuclei on single host:

$ nuclei -target example.com

Run nuclei with specific template directories:

$ nuclei -target example.com -t http/cves/ -t ssl

Run nuclei against a list of hosts:

$ nuclei -list hosts.txt

Run nuclei with a JSON output:

$ nuclei -target example.com -json-export output.json

Run nuclei with sorted Markdown outputs (with environment variables):

$ MARKDOWN_EXPORT_SORT_MODE=template nuclei -target example.com -markdown-export nuclei_report/

Additional documentation is available at: https://docs.nuclei.sh/getting-started/running

Nuclei Templates

Nuclei templates define the structure and logic for performing security checks and scans. They are YAML-based files that describe how Nuclei interacts with targets, specifying requests, matching rules, and workflow controls. A large collection of templates can be found here.

Template Structure

A typical Nuclei template consists of the following key sections:

  • id: Unique identifier for the template.
  • info: Metadata about the template such as name, author, severity, and tags.
  • requests: Defines one or more HTTP (or other protocol) requests to perform.
  • matchers: Conditions to identify successful detections.
  • extractors: Optional fields to extract specific data from responses.
  • variables: Custom variables for dynamic behavior.
  • workflow: (optional) Defines multi-step interactions or dependent requests.

Example:

id: nginx-status
 
info:
  name: Nginx Status Page
  author: dhiyaneshDK
  severity: info
  metadata:
    max-request: 2
  tags: misconfig,nginx,status
 
http:
  - method: GET
    path:
      - "{{BaseURL}}/nginx_status"
      - "{{BaseURL}}/nginx-status"
 
    matchers-condition: and
    matchers:
      - type: word
        words:
          - 'Active connections:'
 
      - type: status
        status:
          - 200
# digest: 4b0a00483046022100dcf1bf9040c63ef1587fcbde9f47b98e53284fbfedb819a0f1e89ec12f2e7cce0221008cd908eb9e96d5faa7f1b0056fd22a3c929a9af5b520776640021a22c7c530e8:922c64590222798bb761d5b6d8e72950