root@sparrow:~/writeups$ cat nuclei.md
// web
Nuclei
21 Jul 2026
· 5 min read
Nuclei is a template-based vulnerability scanner written in Go that drives its checks from YAML templates. Instead of hardcoding each test, you describe the request and the matcher condition in a template, which lets it fire thousands of reproducible checks against one or many targets. It is the go-to tool for verifying CVEs, exposures and misconfigurations at scale.Nuclei's power lives in the templates, not the binary: if your repository is stale you will miss the latest CVEs, which is why -update-templates is a mandatory first step. Filtering tightly with -tags, -severity or specific directories is what separates a useful sweep from hours of noise and false positives.
1. Beginner level — scanning and filtering

| Command | What it does |
|---|---|
nuclei -u https://<t> | Scan with all templates |
nuclei -l urls.txt | Scans a list of URLs |
nuclei -u https://<t> -t cves/ | CVE templates only |
nuclei -u https://<t> -tags cve,rce | Filter templates by tags |
nuclei -u https://<t> -severity critical,high | Filter by severity |
nuclei -u https://<t> -o out.txt | Save the results |
nuclei -update-templates | Update the template repository |
nuclei -u https://<t> -json -o out.json | JSON output |
nuclei -u https://<t> -t technologies/ | Technology fingerprinting |
nuclei -u https://<t> -rl 50 | Requests-per-second limit |
nuclei -u https://<t> -c 25 | Concurrency (templates in parallel) |
nuclei -u https://<t> -silent | Show findings only |
nuclei -version | Show the version |
nuclei -u https://<t> -es info | Exclude the 'info' severity |
2. Advanced level — DAST, proxy and chaining

| Command | What it does |
|---|---|
nuclei -l urls.txt -t cves/ -severity critical -c 50 | Mass sweep for critical CVEs |
nuclei -u https://<t> -t custom.yaml | Run a custom template |
nuclei -u https://<t> -proxy http://127.0.0.1:8080 | Route through Burp |
nuclei -u https://<t> -H 'Authorization: Bearer x' | Custom headers |
nuclei -u https://<t> -itags fuzz | Include tagged templates (fuzzing) |
nuclei -u https://<t> -dast | DAST mode (parameter fuzzing) |
nuclei -u https://<t> -mc 200 | Filter by status code |
nuclei -u https://<t> -rate-limit 10 -timeout 10 | Fine-tune rate and timeout |
cat hosts.txt | httpx -silent | nuclei -t cves/ | Chain httpx + nuclei |
nuclei -u https://<t> -t exposures/ -t misconfiguration/ | Multiple template directories |
nuclei -u https://<t> -eid template-id | Exclude a specific template |
nuclei -u https://<t> -td | Show which templates would run |
nuclei -u https://<t> -store-resp | Save the HTTP responses |
nuclei -u https://<t> -interactsh-server <srv> | OOB with your own Interactsh server |
3. Details people miss
- Update the templates with
-update-templatesbefore every campaign: without them current, recent CVEs go undetected. - Do not fire every template at production unfiltered; scope it down with
-severity,-tagsor directories likecves/to cut load and false positives. - The
-dastmode andfuzztemplates generate intrusive traffic: use them only within authorized scope, never in a default passive scan. - For OOB detection (SSRF, blind RCE) you need a reachable Interactsh server; on an isolated network stand up your own with
-interactsh-serveror you will miss those findings. - Tune
-rl/-rate-limitand-cto the target: too much concurrency knocks over fragile servers or trips WAFs and skews your results.
Responsible use
These commands are for systems you own or have explicit written authorisation to test (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
Nuclei es un escáner de vulnerabilidades basado en plantillas YAML escrito en Go. En lugar de codificar cada comprobación, describe la petición y la condición de detección en una plantilla, lo que le permite lanzar miles de checks reproducibles contra uno o muchos objetivos. Es la navaja suiza para verificar CVEs, exposiciones y malas configuraciones a escala.La potencia de Nuclei está en las plantillas, no en el binario: si el repositorio está desactualizado no detectarás los últimos CVEs, por eso -update-templates es un paso previo obligado. Filtrar bien con -tags, -severity o directorios concretos es lo que separa un barrido útil de horas de ruido y falsos positivos.
1. Nivel principiante — escaneo y filtrado

| Comando | Qué hace |
|---|---|
nuclei -u https://<t> | Escaneo con todas las plantillas |
nuclei -l urls.txt | Escanea una lista de URLs |
nuclei -u https://<t> -t cves/ | Solo plantillas de CVEs |
nuclei -u https://<t> -tags cve,rce | Filtra plantillas por tags |
nuclei -u https://<t> -severity critical,high | Filtra por severidad |
nuclei -u https://<t> -o out.txt | Guarda los resultados |
nuclei -update-templates | Actualiza el repositorio de plantillas |
nuclei -u https://<t> -json -o out.json | Salida en JSON |
nuclei -u https://<t> -t technologies/ | Fingerprinting de tecnologías |
nuclei -u https://<t> -rl 50 | Límite de peticiones por segundo |
nuclei -u https://<t> -c 25 | Concurrencia (plantillas en paralelo) |
nuclei -u https://<t> -silent | Solo muestra los hallazgos |
nuclei -version | Muestra la versión |
nuclei -u https://<t> -es info | Excluye severidad 'info' |
2. Nivel avanzado — DAST, proxy y encadenado

| Comando | Qué hace |
|---|---|
nuclei -l urls.txt -t cves/ -severity critical -c 50 | Barrido masivo de CVEs críticas |
nuclei -u https://<t> -t custom.yaml | Ejecuta una plantilla propia |
nuclei -u https://<t> -proxy http://127.0.0.1:8080 | Enruta por Burp |
nuclei -u https://<t> -H 'Authorization: Bearer x' | Cabeceras personalizadas |
nuclei -u https://<t> -itags fuzz | Incluye plantillas marcadas (fuzzing) |
nuclei -u https://<t> -dast | Modo DAST (fuzzing de parámetros) |
nuclei -u https://<t> -mc 200 | Filtra por código de estado |
nuclei -u https://<t> -rate-limit 10 -timeout 10 | Ajuste fino de ritmo y timeout |
cat hosts.txt | httpx -silent | nuclei -t cves/ | Encadena httpx + nuclei |
nuclei -u https://<t> -t exposures/ -t misconfiguration/ | Varios directorios de plantillas |
nuclei -u https://<t> -eid template-id | Excluye una plantilla concreta |
nuclei -u https://<t> -td | Muestra qué plantillas se ejecutarían |
nuclei -u https://<t> -store-resp | Guarda las respuestas HTTP |
nuclei -u https://<t> -interactsh-server <srv> | OOB con un servidor Interactsh propio |
3. Detalles que se pasan por alto
- Actualiza las plantillas con
-update-templatesantes de cada campaña: sin ellas al día, los CVEs recientes pasan desapercibidos. - No lances todas las plantillas contra producción sin filtrar; acota con
-severity,-tagso directorios comocves/para reducir carga y falsos positivos. - El modo
-dasty las plantillasfuzzgeneran tráfico intrusivo: úsalos solo dentro del alcance autorizado, nunca en un escaneo pasivo por defecto. - Para detección OOB (SSRF, RCE ciego) necesitas un servidor Interactsh alcanzable; si estás en una red aislada monta el tuyo con
-interactsh-servero no verás esos hallazgos. - Ajusta
-rl/-rate-limity-csegún el objetivo: demasiada concurrencia tira servidores frágiles o dispara WAFs y falsea los resultados.
Uso responsable
Estos comandos son para entornos propios o con autorización explícita por escrito (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.