Showing preview only (4,631K chars total). Download the full file or copy to clipboard to get everything.
Repository: projectdiscovery/nuclei
Branch: dev
Commit: 0ae6d9040ce0
Files: 1011
Total size: 4.2 MB
Directory structure:
gitextract_eat1zd1s/
├── .github/
│ ├── DISCUSSION_TEMPLATE.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ ├── config.yml
│ │ └── reference-templates/
│ │ ├── README.md
│ │ └── feature-request-reference.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── auto_assign.yml
│ ├── dependabot.yml
│ ├── release.yml
│ └── workflows/
│ ├── auto-merge.yaml
│ ├── compat-checks.yaml
│ ├── flamegraph.yaml
│ ├── generate-docs.yaml
│ ├── generate-pgo.yaml
│ ├── govulncheck.yaml
│ ├── memogen.yaml
│ ├── perf-regression.yaml
│ ├── release.yaml
│ ├── stale.yaml
│ ├── tests.yaml
│ └── typos.yaml
├── .goreleaser.yml
├── .run/
│ ├── DSLFunctionsIT.run.xml
│ ├── IntegrationTests.run.xml
│ ├── RegressionTests.run.xml
│ └── UnitTests.run.xml
├── CLAUDE.md
├── CONTRIBUTING.md
├── DEBUG.md
├── DESIGN.md
├── Dockerfile
├── Dockerfile.goreleaser
├── LICENSE.md
├── Makefile
├── README.md
├── README_CN.md
├── README_ES.md
├── README_ID.md
├── README_JP.md
├── README_KR.md
├── README_PT-BR.md
├── README_TR.md
├── SYNTAX-REFERENCE.md
├── THANKS.md
├── _typos.toml
├── cmd/
│ ├── docgen/
│ │ └── docgen.go
│ ├── functional-test/
│ │ ├── main.go
│ │ ├── run.sh
│ │ ├── targets-1000.txt
│ │ ├── targets-150.txt
│ │ ├── targets-250.txt
│ │ ├── targets.txt
│ │ └── testcases.txt
│ ├── generate-checksum/
│ │ └── main.go
│ ├── integration-test/
│ │ ├── code.go
│ │ ├── custom-dir.go
│ │ ├── dns.go
│ │ ├── dsl.go
│ │ ├── exporters.go
│ │ ├── file.go
│ │ ├── flow.go
│ │ ├── fuzz.go
│ │ ├── generic.go
│ │ ├── headless.go
│ │ ├── http.go
│ │ ├── integration-test.go
│ │ ├── interactsh.go
│ │ ├── javascript.go
│ │ ├── library.go
│ │ ├── loader.go
│ │ ├── matcher-status.go
│ │ ├── multi.go
│ │ ├── network.go
│ │ ├── offline-http.go
│ │ ├── profile-loader.go
│ │ ├── ssl.go
│ │ ├── template-dir.go
│ │ ├── template-path.go
│ │ ├── templates-dir-env.go
│ │ ├── websocket.go
│ │ ├── whois.go
│ │ └── workflow.go
│ ├── memogen/
│ │ ├── function.tpl
│ │ └── memogen.go
│ ├── nuclei/
│ │ ├── issue-tracker-config.yaml
│ │ ├── main.go
│ │ ├── main_benchmark_test.go
│ │ └── testdata/
│ │ └── benchmark/
│ │ └── multiproto/
│ │ ├── basic-template-multiproto-mixed.yaml
│ │ ├── basic-template-multiproto-raw.yaml
│ │ └── basic-template-multiproto.yaml
│ ├── scan-charts/
│ │ └── main.go
│ ├── tmc/
│ │ ├── main.go
│ │ └── types.go
│ └── tools/
│ ├── fuzzplayground/
│ │ └── main.go
│ └── signer/
│ └── main.go
├── examples/
│ ├── advanced/
│ │ └── advanced.go
│ ├── simple/
│ │ └── simple.go
│ └── with_speed_control/
│ └── main.go
├── gh_retry.sh
├── go.mod
├── go.sum
├── helm/
│ ├── Chart.yaml
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── hpa.yaml
│ │ ├── interactsh-deployment.yaml
│ │ ├── interactsh-ingress.yaml
│ │ ├── interactsh-service.yaml
│ │ ├── nuclei-configmap.yaml
│ │ ├── nuclei-cron.yaml
│ │ └── serviceaccount.yaml
│ └── values.yaml
├── integration_tests/
│ ├── debug.sh
│ ├── dsl/
│ │ ├── hide-version-warning.yaml
│ │ └── show-version-warning.yaml
│ ├── flow/
│ │ ├── conditional-flow-negative.yaml
│ │ ├── conditional-flow.yaml
│ │ ├── dns-ns-probe.yaml
│ │ ├── flow-hide-matcher.yaml
│ │ ├── iterate-one-value-flow.yaml
│ │ └── iterate-values-flow.yaml
│ ├── fuzz/
│ │ ├── fuzz-body-generic-sqli.yaml
│ │ ├── fuzz-body-json-sqli.yaml
│ │ ├── fuzz-body-multipart-form-sqli.yaml
│ │ ├── fuzz-body-params-sqli.yaml
│ │ ├── fuzz-body-xml-sqli.yaml
│ │ ├── fuzz-body.yaml
│ │ ├── fuzz-cookie-error-sqli.yaml
│ │ ├── fuzz-headless.yaml
│ │ ├── fuzz-host-header-injection.yaml
│ │ ├── fuzz-mode.yaml
│ │ ├── fuzz-multi-mode.yaml
│ │ ├── fuzz-path-sqli.yaml
│ │ ├── fuzz-query-num-replace.yaml
│ │ ├── fuzz-query.yaml
│ │ ├── fuzz-type.yaml
│ │ └── testData/
│ │ └── ginandjuice.proxify.yaml
│ ├── generic/
│ │ └── auth/
│ │ └── certificate/
│ │ ├── assets/
│ │ │ ├── client.crt
│ │ │ ├── client.key
│ │ │ └── server.crt
│ │ └── http-get.yaml
│ ├── library/
│ │ ├── test.json
│ │ └── test.yaml
│ ├── loader/
│ │ ├── basic.yaml
│ │ ├── condition-matched.yaml
│ │ ├── excluded-template.yaml
│ │ ├── get-headers.yaml
│ │ ├── get.yaml
│ │ ├── template-list.yaml
│ │ └── workflow-list.yaml
│ ├── profile-loader/
│ │ └── basic.yml
│ ├── protocols/
│ │ ├── code/
│ │ │ ├── pre-condition.yaml
│ │ │ ├── ps1-snippet.yaml
│ │ │ ├── pwsh-echo.yaml
│ │ │ ├── py-env-var.yaml
│ │ │ ├── py-file.yaml
│ │ │ ├── py-interactsh.yaml
│ │ │ ├── py-nosig.yaml
│ │ │ ├── py-snippet.yaml
│ │ │ ├── py-virtual.yaml
│ │ │ ├── pyfile.py
│ │ │ ├── sh-virtual.yaml
│ │ │ └── unsigned.yaml
│ │ ├── dns/
│ │ │ ├── a.yaml
│ │ │ ├── aaaa.yaml
│ │ │ ├── caa.yaml
│ │ │ ├── cname-fingerprint.yaml
│ │ │ ├── cname.yaml
│ │ │ ├── dsl-matcher-variable.yaml
│ │ │ ├── ns.yaml
│ │ │ ├── payload.yaml
│ │ │ ├── ptr.yaml
│ │ │ ├── srv.yaml
│ │ │ ├── tlsa.yaml
│ │ │ ├── txt.yaml
│ │ │ └── variables.yaml
│ │ ├── file/
│ │ │ ├── data/
│ │ │ │ ├── test1.txt
│ │ │ │ ├── test2.txt
│ │ │ │ └── test3.txt
│ │ │ ├── extract.yaml
│ │ │ ├── matcher-with-and.yaml
│ │ │ ├── matcher-with-nested-and.yaml
│ │ │ └── matcher-with-or.yaml
│ │ ├── headless/
│ │ │ ├── file-upload-negative.yaml
│ │ │ ├── file-upload.yaml
│ │ │ ├── headless-basic.yaml
│ │ │ ├── headless-dsl.yaml
│ │ │ ├── headless-extract-values.yaml
│ │ │ ├── headless-header-action.yaml
│ │ │ ├── headless-header-status-test.yaml
│ │ │ ├── headless-local.yaml
│ │ │ ├── headless-payloads.yaml
│ │ │ ├── headless-self-contained.yaml
│ │ │ ├── headless-waitevent.yaml
│ │ │ └── variables.yaml
│ │ ├── http/
│ │ │ ├── annotation-timeout.yaml
│ │ │ ├── cl-body-with-header.yaml
│ │ │ ├── cl-body-without-header.yaml
│ │ │ ├── cli-with-constants.yaml
│ │ │ ├── constants-with-threads.yaml
│ │ │ ├── custom-attack-type.yaml
│ │ │ ├── default-matcher-condition.yaml
│ │ │ ├── disable-path-automerge.yaml
│ │ │ ├── disable-redirects.yaml
│ │ │ ├── dsl-functions.yaml
│ │ │ ├── dsl-matcher-variable.yaml
│ │ │ ├── get-all-ips.yaml
│ │ │ ├── get-case-insensitive.yaml
│ │ │ ├── get-headers.yaml
│ │ │ ├── get-host-redirects.yaml
│ │ │ ├── get-override-sni.yaml
│ │ │ ├── get-query-string.yaml
│ │ │ ├── get-redirects-chain-headers.yaml
│ │ │ ├── get-redirects.yaml
│ │ │ ├── get-sni-unsafe.yaml
│ │ │ ├── get-sni.yaml
│ │ │ ├── get-without-scheme.yaml
│ │ │ ├── get.yaml
│ │ │ ├── http-matcher-extractor-dy-extractor.yaml
│ │ │ ├── http-paths.yaml
│ │ │ ├── http-preprocessor.yaml
│ │ │ ├── interactsh-requests-mc-and.yaml
│ │ │ ├── interactsh-stop-at-first-match.yaml
│ │ │ ├── interactsh-with-payloads.yaml
│ │ │ ├── interactsh.yaml
│ │ │ ├── matcher-status-and-cluster.yaml
│ │ │ ├── matcher-status-and.yaml
│ │ │ ├── matcher-status.yaml
│ │ │ ├── multi-http-var-sharing.yaml
│ │ │ ├── multi-request.yaml
│ │ │ ├── post-body.yaml
│ │ │ ├── post-json-body.yaml
│ │ │ ├── post-multipart-body.yaml
│ │ │ ├── race-condition-with-delay.yaml
│ │ │ ├── race-multiple.yaml
│ │ │ ├── race-simple.yaml
│ │ │ ├── race-with-variables.yaml
│ │ │ ├── raw-cookie-reuse.yaml
│ │ │ ├── raw-dynamic-extractor.yaml
│ │ │ ├── raw-get-query.yaml
│ │ │ ├── raw-get.yaml
│ │ │ ├── raw-path-single-slash.yaml
│ │ │ ├── raw-path-trailing-slash.yaml
│ │ │ ├── raw-payload.yaml
│ │ │ ├── raw-post-body.yaml
│ │ │ ├── raw-unsafe-path-single-slash.yaml
│ │ │ ├── raw-unsafe-path.yaml
│ │ │ ├── raw-unsafe-request.yaml
│ │ │ ├── raw-unsafe-with-params.yaml
│ │ │ ├── raw-with-params.yaml
│ │ │ ├── redirect-match-url.yaml
│ │ │ ├── request-condition-new.yaml
│ │ │ ├── request-condition.yaml
│ │ │ ├── response-data-literal-reuse.yaml
│ │ │ ├── self-contained-file-input.yaml
│ │ │ ├── self-contained-with-params.yaml
│ │ │ ├── self-contained-with-path.yaml
│ │ │ ├── self-contained.yaml
│ │ │ ├── stop-at-first-match-with-extractors.yaml
│ │ │ ├── stop-at-first-match.yaml
│ │ │ ├── variable-dsl-function.yaml
│ │ │ ├── variables-threads-previous.yaml
│ │ │ └── variables.yaml
│ │ ├── javascript/
│ │ │ ├── multi-ports.yaml
│ │ │ ├── mysql-connect.yaml
│ │ │ ├── net-https.yaml
│ │ │ ├── net-multi-step.yaml
│ │ │ ├── no-port-args.yaml
│ │ │ ├── postgres-pass-brute.yaml
│ │ │ ├── redis-pass-brute.yaml
│ │ │ ├── rsync-test.yaml
│ │ │ ├── ssh-server-fingerprint.yaml
│ │ │ ├── telnet-auth-test.yaml
│ │ │ └── vnc-pass-brute.yaml
│ │ ├── keys/
│ │ │ ├── README.md
│ │ │ ├── ci-private-key.pem
│ │ │ └── ci.crt
│ │ ├── multi/
│ │ │ ├── dynamic-values.yaml
│ │ │ ├── evaluate-variables.yaml
│ │ │ └── exported-response-vars.yaml
│ │ ├── network/
│ │ │ ├── basic.yaml
│ │ │ ├── hex.yaml
│ │ │ ├── multi-step.yaml
│ │ │ ├── net-https-timeout.yaml
│ │ │ ├── net-https.yaml
│ │ │ ├── network-port.yaml
│ │ │ ├── same-address.yaml
│ │ │ ├── self-contained.yaml
│ │ │ └── variables.yaml
│ │ ├── offlinehttp/
│ │ │ ├── data/
│ │ │ │ └── req-resp-with-http-keywords.txt
│ │ │ ├── offline-allowed-paths.yaml
│ │ │ ├── offline-raw.yaml
│ │ │ └── rfc-req-resp.yaml
│ │ ├── ssl/
│ │ │ ├── basic-ztls.yaml
│ │ │ ├── basic.yaml
│ │ │ ├── custom-cipher.yaml
│ │ │ ├── custom-version.yaml
│ │ │ ├── multi-req.yaml
│ │ │ └── ssl-with-vars.yaml
│ │ ├── websocket/
│ │ │ ├── basic.yaml
│ │ │ ├── cswsh.yaml
│ │ │ ├── no-cswsh.yaml
│ │ │ └── path.yaml
│ │ └── whois/
│ │ └── basic.yaml
│ ├── run.sh
│ ├── subdomains.txt
│ ├── test-issue-tracker-config1.yaml
│ ├── test-issue-tracker-config2.yaml
│ └── workflow/
│ ├── basic.yaml
│ ├── code-template-1.yaml
│ ├── code-template-2.yaml
│ ├── code-value-share-workflow.yaml
│ ├── complex-conditions.yaml
│ ├── condition-matched.yaml
│ ├── condition-unmatched.yaml
│ ├── dns-value-share-template-1.yaml
│ ├── dns-value-share-template-2.yaml
│ ├── dns-value-share-template-3.yaml
│ ├── dns-value-share-workflow.yaml
│ ├── headless-1.yaml
│ ├── http-1.yaml
│ ├── http-2.yaml
│ ├── http-3.yaml
│ ├── http-value-share-template-1.yaml
│ ├── http-value-share-template-2.yaml
│ ├── http-value-share-workflow.yaml
│ ├── match-1.yaml
│ ├── match-2.yaml
│ ├── match-3.yaml
│ ├── matcher-name.yaml
│ ├── multimatch-value-share-template.yaml
│ ├── multimatch-value-share-workflow.yaml
│ ├── multiprotocol-value-share-template.yaml
│ ├── multiprotocol-value-share-workflow.yaml
│ ├── nomatch-1.yaml
│ └── shared-cookie.yaml
├── internal/
│ ├── colorizer/
│ │ └── colorizer.go
│ ├── httpapi/
│ │ └── apiendpoint.go
│ ├── pdcp/
│ │ ├── utils.go
│ │ └── writer.go
│ ├── runner/
│ │ ├── banner.go
│ │ ├── healthcheck.go
│ │ ├── inputs.go
│ │ ├── lazy.go
│ │ ├── options.go
│ │ ├── options_test.go
│ │ ├── proxy.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ └── templates.go
│ └── server/
│ ├── dedupe.go
│ ├── nuclei_sdk.go
│ ├── requests_worker.go
│ ├── scope/
│ │ ├── extensions.go
│ │ ├── scope.go
│ │ └── scope_test.go
│ ├── server.go
│ └── templates/
│ └── index.html
├── lib/
│ ├── README.md
│ ├── config.go
│ ├── example_test.go
│ ├── helper.go
│ ├── multi.go
│ ├── sdk.go
│ ├── sdk_private.go
│ ├── sdk_test.go
│ └── tests/
│ └── sdk_test.go
├── nuclei-jsonschema.json
├── pkg/
│ ├── authprovider/
│ │ ├── authx/
│ │ │ ├── basic_auth.go
│ │ │ ├── bearer_auth.go
│ │ │ ├── cookies_auth.go
│ │ │ ├── dynamic.go
│ │ │ ├── dynamic_test.go
│ │ │ ├── file.go
│ │ │ ├── file_test.go
│ │ │ ├── headers_auth.go
│ │ │ ├── query_auth.go
│ │ │ ├── strategy.go
│ │ │ └── testData/
│ │ │ └── example-auth.yaml
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── interface.go
│ │ └── multi.go
│ ├── catalog/
│ │ ├── aws/
│ │ │ ├── catalog.go
│ │ │ └── catalog_test.go
│ │ ├── catalog.go
│ │ ├── config/
│ │ │ ├── constants.go
│ │ │ ├── ignorefile.go
│ │ │ ├── nucleiconfig.go
│ │ │ ├── template.go
│ │ │ └── template_test.go
│ │ ├── disk/
│ │ │ ├── catalog.go
│ │ │ ├── errors.go
│ │ │ ├── find.go
│ │ │ ├── known-files.go
│ │ │ └── path.go
│ │ ├── index/
│ │ │ ├── filter.go
│ │ │ ├── filter_test.go
│ │ │ ├── index.go
│ │ │ ├── index_test.go
│ │ │ └── metadata.go
│ │ └── loader/
│ │ ├── ai_loader.go
│ │ ├── filter/
│ │ │ └── path_filter.go
│ │ ├── loader.go
│ │ ├── loader_bench_test.go
│ │ ├── loader_test.go
│ │ └── remote_loader.go
│ ├── core/
│ │ ├── engine.go
│ │ ├── engine_test.go
│ │ ├── execute_options.go
│ │ ├── executors.go
│ │ ├── executors_test.go
│ │ ├── workflow_execute.go
│ │ ├── workflow_execute_test.go
│ │ └── workpool.go
│ ├── external/
│ │ └── customtemplates/
│ │ ├── azure_blob.go
│ │ ├── github.go
│ │ ├── github_test.go
│ │ ├── gitlab.go
│ │ ├── s3.go
│ │ └── templates_provider.go
│ ├── fuzz/
│ │ ├── analyzers/
│ │ │ ├── analyzers.go
│ │ │ └── time/
│ │ │ ├── analyzer.go
│ │ │ ├── time_delay.go
│ │ │ └── time_delay_test.go
│ │ ├── component/
│ │ │ ├── body.go
│ │ │ ├── body_test.go
│ │ │ ├── component.go
│ │ │ ├── cookie.go
│ │ │ ├── cookie_test.go
│ │ │ ├── headers.go
│ │ │ ├── headers_test.go
│ │ │ ├── path.go
│ │ │ ├── path_test.go
│ │ │ ├── query.go
│ │ │ ├── query_test.go
│ │ │ ├── value.go
│ │ │ └── value_test.go
│ │ ├── dataformat/
│ │ │ ├── dataformat.go
│ │ │ ├── dataformat_test.go
│ │ │ ├── form.go
│ │ │ ├── json.go
│ │ │ ├── kv.go
│ │ │ ├── multipart.go
│ │ │ ├── multipart_test.go
│ │ │ ├── raw.go
│ │ │ └── xml.go
│ │ ├── doc.go
│ │ ├── execute.go
│ │ ├── execute_race_test.go
│ │ ├── frequency/
│ │ │ └── tracker.go
│ │ ├── fuzz.go
│ │ ├── fuzz_test.go
│ │ ├── parts.go
│ │ ├── parts_frequency_test.go
│ │ ├── parts_test.go
│ │ ├── stats/
│ │ │ ├── db.go
│ │ │ ├── db_test.go
│ │ │ ├── simple.go
│ │ │ └── stats.go
│ │ └── type.go
│ ├── input/
│ │ ├── README.md
│ │ ├── formats/
│ │ │ ├── README.md
│ │ │ ├── burp/
│ │ │ │ ├── burp.go
│ │ │ │ └── burp_test.go
│ │ │ ├── formats.go
│ │ │ ├── json/
│ │ │ │ ├── json.go
│ │ │ │ └── json_test.go
│ │ │ ├── openapi/
│ │ │ │ ├── downloader.go
│ │ │ │ ├── downloader_test.go
│ │ │ │ ├── examples.go
│ │ │ │ ├── generator.go
│ │ │ │ ├── openapi.go
│ │ │ │ └── openapi_test.go
│ │ │ ├── swagger/
│ │ │ │ ├── downloader.go
│ │ │ │ ├── downloader_test.go
│ │ │ │ ├── swagger.go
│ │ │ │ └── swagger_test.go
│ │ │ ├── testdata/
│ │ │ │ ├── burp.xml
│ │ │ │ ├── ginandjuice.proxify.json
│ │ │ │ ├── ginandjuice.proxify.yaml
│ │ │ │ ├── openapi.yaml
│ │ │ │ ├── postman.json
│ │ │ │ ├── swagger.yaml
│ │ │ │ └── ytt/
│ │ │ │ ├── ginandjuice.ytt.yaml
│ │ │ │ ├── ytt-profile.yaml
│ │ │ │ └── ytt-vars.yaml
│ │ │ └── yaml/
│ │ │ ├── multidoc.go
│ │ │ ├── multidoc_test.go
│ │ │ └── ytt.go
│ │ ├── provider/
│ │ │ ├── chunked.go
│ │ │ ├── http/
│ │ │ │ └── multiformat.go
│ │ │ ├── interface.go
│ │ │ ├── list/
│ │ │ │ ├── hmap.go
│ │ │ │ ├── hmap_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── AS134029.txt
│ │ │ │ │ └── AS14421.txt
│ │ │ │ └── utils.go
│ │ │ └── simple.go
│ │ ├── transform.go
│ │ ├── transform_test.go
│ │ └── types/
│ │ ├── http.go
│ │ ├── http_test.go
│ │ └── probe.go
│ ├── installer/
│ │ ├── doc.go
│ │ ├── template.go
│ │ ├── template_test.go
│ │ ├── util.go
│ │ ├── versioncheck.go
│ │ ├── versioncheck_test.go
│ │ └── zipslip_unix_test.go
│ ├── js/
│ │ ├── CONTRIBUTE.md
│ │ ├── DESIGN.md
│ │ ├── THANKS.md
│ │ ├── compiler/
│ │ │ ├── compiler.go
│ │ │ ├── compiler_test.go
│ │ │ ├── init.go
│ │ │ ├── non-pool.go
│ │ │ └── pool.go
│ │ ├── devtools/
│ │ │ ├── README.md
│ │ │ ├── bindgen/
│ │ │ │ ├── INSTALL.md
│ │ │ │ ├── README.md
│ │ │ │ ├── cmd/
│ │ │ │ │ └── bindgen/
│ │ │ │ │ └── main.go
│ │ │ │ ├── generator.go
│ │ │ │ ├── output.go
│ │ │ │ └── templates/
│ │ │ │ ├── go_class.tmpl
│ │ │ │ ├── js_class.tmpl
│ │ │ │ └── markdown_class.tmpl
│ │ │ ├── scrapefuncs/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ └── tsgen/
│ │ │ ├── README.md
│ │ │ ├── astutil.go
│ │ │ ├── cmd/
│ │ │ │ └── tsgen/
│ │ │ │ ├── main.go
│ │ │ │ └── tsmodule.go.tmpl
│ │ │ ├── parser.go
│ │ │ ├── scrape.go
│ │ │ └── types.go
│ │ ├── generated/
│ │ │ ├── README.md
│ │ │ ├── go/
│ │ │ │ ├── libbytes/
│ │ │ │ │ └── bytes.go
│ │ │ │ ├── libfs/
│ │ │ │ │ └── fs.go
│ │ │ │ ├── libgoconsole/
│ │ │ │ │ └── goconsole.go
│ │ │ │ ├── libikev2/
│ │ │ │ │ └── ikev2.go
│ │ │ │ ├── libkerberos/
│ │ │ │ │ └── kerberos.go
│ │ │ │ ├── libldap/
│ │ │ │ │ └── ldap.go
│ │ │ │ ├── libmssql/
│ │ │ │ │ └── mssql.go
│ │ │ │ ├── libmysql/
│ │ │ │ │ └── mysql.go
│ │ │ │ ├── libnet/
│ │ │ │ │ └── net.go
│ │ │ │ ├── liboracle/
│ │ │ │ │ └── oracle.go
│ │ │ │ ├── libpop3/
│ │ │ │ │ └── pop3.go
│ │ │ │ ├── libpostgres/
│ │ │ │ │ └── postgres.go
│ │ │ │ ├── librdp/
│ │ │ │ │ └── rdp.go
│ │ │ │ ├── libredis/
│ │ │ │ │ └── redis.go
│ │ │ │ ├── librsync/
│ │ │ │ │ └── rsync.go
│ │ │ │ ├── libsmb/
│ │ │ │ │ └── smb.go
│ │ │ │ ├── libsmtp/
│ │ │ │ │ └── smtp.go
│ │ │ │ ├── libssh/
│ │ │ │ │ └── ssh.go
│ │ │ │ ├── libstructs/
│ │ │ │ │ └── structs.go
│ │ │ │ ├── libtelnet/
│ │ │ │ │ └── telnet.go
│ │ │ │ └── libvnc/
│ │ │ │ └── vnc.go
│ │ │ └── ts/
│ │ │ ├── bytes.ts
│ │ │ ├── fs.ts
│ │ │ ├── goconsole.ts
│ │ │ ├── ikev2.ts
│ │ │ ├── index.ts
│ │ │ ├── kerberos.ts
│ │ │ ├── ldap.ts
│ │ │ ├── mssql.ts
│ │ │ ├── mysql.ts
│ │ │ ├── net.ts
│ │ │ ├── oracle.ts
│ │ │ ├── pop3.ts
│ │ │ ├── postgres.ts
│ │ │ ├── rdp.ts
│ │ │ ├── redis.ts
│ │ │ ├── rsync.ts
│ │ │ ├── smb.ts
│ │ │ ├── smtp.ts
│ │ │ ├── ssh.ts
│ │ │ ├── structs.ts
│ │ │ ├── telnet.ts
│ │ │ └── vnc.ts
│ │ ├── global/
│ │ │ ├── exports.js
│ │ │ ├── helpers.go
│ │ │ ├── js/
│ │ │ │ ├── active_directory.js
│ │ │ │ └── dump.js
│ │ │ ├── scripts.go
│ │ │ └── scripts_test.go
│ │ ├── gojs/
│ │ │ ├── gojs.go
│ │ │ └── set.go
│ │ ├── libs/
│ │ │ ├── LICENSE.md
│ │ │ ├── bytes/
│ │ │ │ └── buffer.go
│ │ │ ├── fs/
│ │ │ │ └── fs.go
│ │ │ ├── goconsole/
│ │ │ │ └── log.go
│ │ │ ├── ikev2/
│ │ │ │ └── ikev2.go
│ │ │ ├── kerberos/
│ │ │ │ ├── kerberosx.go
│ │ │ │ └── sendtokdc.go
│ │ │ ├── ldap/
│ │ │ │ ├── adenum.go
│ │ │ │ ├── ldap.go
│ │ │ │ └── utils.go
│ │ │ ├── mssql/
│ │ │ │ ├── memo.mssql.go
│ │ │ │ └── mssql.go
│ │ │ ├── mysql/
│ │ │ │ ├── memo.mysql.go
│ │ │ │ ├── memo.mysql_private.go
│ │ │ │ ├── mysql.go
│ │ │ │ └── mysql_private.go
│ │ │ ├── net/
│ │ │ │ └── net.go
│ │ │ ├── oracle/
│ │ │ │ ├── memo.oracle.go
│ │ │ │ ├── oracle.go
│ │ │ │ └── oracledialer.go
│ │ │ ├── pop3/
│ │ │ │ ├── memo.pop3.go
│ │ │ │ └── pop3.go
│ │ │ ├── postgres/
│ │ │ │ ├── memo.postgres.go
│ │ │ │ └── postgres.go
│ │ │ ├── rdp/
│ │ │ │ ├── memo.rdp.go
│ │ │ │ └── rdp.go
│ │ │ ├── redis/
│ │ │ │ ├── memo.redis.go
│ │ │ │ └── redis.go
│ │ │ ├── rsync/
│ │ │ │ ├── memo.rsync.go
│ │ │ │ └── rsync.go
│ │ │ ├── smb/
│ │ │ │ ├── memo.smb.go
│ │ │ │ ├── memo.smb_private.go
│ │ │ │ ├── memo.smbghost.go
│ │ │ │ ├── smb.go
│ │ │ │ ├── smb_private.go
│ │ │ │ └── smbghost.go
│ │ │ ├── smtp/
│ │ │ │ ├── msg.go
│ │ │ │ └── smtp.go
│ │ │ ├── ssh/
│ │ │ │ ├── memo.ssh.go
│ │ │ │ └── ssh.go
│ │ │ ├── structs/
│ │ │ │ ├── smbexploit.js
│ │ │ │ └── structs.go
│ │ │ ├── telnet/
│ │ │ │ ├── memo.telnet.go
│ │ │ │ └── telnet.go
│ │ │ └── vnc/
│ │ │ ├── memo.vnc.go
│ │ │ └── vnc.go
│ │ └── utils/
│ │ ├── nucleijs.go
│ │ ├── pgwrap/
│ │ │ └── pgwrap.go
│ │ └── util.go
│ ├── keys/
│ │ ├── key.go
│ │ └── nuclei.crt
│ ├── loader/
│ │ ├── parser/
│ │ │ └── parser.go
│ │ └── workflow/
│ │ └── workflow_loader.go
│ ├── model/
│ │ ├── model.go
│ │ ├── model_test.go
│ │ ├── types/
│ │ │ ├── severity/
│ │ │ │ ├── severities.go
│ │ │ │ ├── severity.go
│ │ │ │ └── severity_test.go
│ │ │ ├── stringslice/
│ │ │ │ ├── stringslice.go
│ │ │ │ └── stringslice_raw.go
│ │ │ └── userAgent/
│ │ │ └── user_agent.go
│ │ └── workflow_loader.go
│ ├── operators/
│ │ ├── cache/
│ │ │ ├── cache.go
│ │ │ └── cache_test.go
│ │ ├── common/
│ │ │ └── dsl/
│ │ │ ├── dsl.go
│ │ │ └── dsl_test.go
│ │ ├── extractors/
│ │ │ ├── compile.go
│ │ │ ├── doc.go
│ │ │ ├── extract.go
│ │ │ ├── extract_test.go
│ │ │ ├── extractor_types.go
│ │ │ ├── extractors.go
│ │ │ └── util.go
│ │ ├── matchers/
│ │ │ ├── compile.go
│ │ │ ├── doc.go
│ │ │ ├── match.go
│ │ │ ├── match_test.go
│ │ │ ├── matchers.go
│ │ │ ├── matchers_types.go
│ │ │ ├── validate.go
│ │ │ └── validate_test.go
│ │ ├── operators.go
│ │ └── operators_test.go
│ ├── output/
│ │ ├── doc.go
│ │ ├── file_output_writer.go
│ │ ├── format_json.go
│ │ ├── format_screen.go
│ │ ├── multi_writer.go
│ │ ├── output.go
│ │ ├── output_stats.go
│ │ ├── output_test.go
│ │ ├── standard_writer.go
│ │ └── stats/
│ │ ├── stats.go
│ │ ├── stats_test.go
│ │ └── waf/
│ │ ├── regexes.json
│ │ ├── waf.go
│ │ └── waf_test.go
│ ├── progress/
│ │ ├── doc.go
│ │ └── progress.go
│ ├── projectfile/
│ │ ├── httputil.go
│ │ └── project.go
│ ├── protocols/
│ │ ├── code/
│ │ │ ├── code.go
│ │ │ ├── code_test.go
│ │ │ └── helpers.go
│ │ ├── common/
│ │ │ ├── automaticscan/
│ │ │ │ ├── automaticscan.go
│ │ │ │ ├── automaticscan_test.go
│ │ │ │ ├── doc.go
│ │ │ │ └── util.go
│ │ │ ├── contextargs/
│ │ │ │ ├── contextargs.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── metainput.go
│ │ │ │ └── variables.go
│ │ │ ├── expressions/
│ │ │ │ ├── expressions.go
│ │ │ │ ├── expressions_test.go
│ │ │ │ ├── variables.go
│ │ │ │ └── variables_test.go
│ │ │ ├── generators/
│ │ │ │ ├── attack_types.go
│ │ │ │ ├── attack_types_test.go
│ │ │ │ ├── env.go
│ │ │ │ ├── env_test.go
│ │ │ │ ├── generators.go
│ │ │ │ ├── generators_test.go
│ │ │ │ ├── load.go
│ │ │ │ ├── load_test.go
│ │ │ │ ├── maps.go
│ │ │ │ ├── maps_bench_test.go
│ │ │ │ ├── maps_test.go
│ │ │ │ ├── options.go
│ │ │ │ ├── options_bench_test.go
│ │ │ │ ├── options_test.go
│ │ │ │ ├── slice.go
│ │ │ │ └── validate.go
│ │ │ ├── globalmatchers/
│ │ │ │ └── globalmatchers.go
│ │ │ ├── helpers/
│ │ │ │ ├── deserialization/
│ │ │ │ │ ├── deserialization.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── java.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ ├── Deserialize.java
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── ValueObject.java
│ │ │ │ ├── eventcreator/
│ │ │ │ │ └── eventcreator.go
│ │ │ │ ├── responsehighlighter/
│ │ │ │ │ ├── hexdump.go
│ │ │ │ │ ├── response_highlighter.go
│ │ │ │ │ └── response_highlighter_test.go
│ │ │ │ └── writer/
│ │ │ │ └── writer.go
│ │ │ ├── hosterrorscache/
│ │ │ │ ├── hosterrorscache.go
│ │ │ │ └── hosterrorscache_test.go
│ │ │ ├── interactsh/
│ │ │ │ ├── const.go
│ │ │ │ ├── interactsh.go
│ │ │ │ └── options.go
│ │ │ ├── marker/
│ │ │ │ └── marker.go
│ │ │ ├── protocolinit/
│ │ │ │ └── init.go
│ │ │ ├── protocolstate/
│ │ │ │ ├── context.go
│ │ │ │ ├── dialers.go
│ │ │ │ ├── file.go
│ │ │ │ ├── headless.go
│ │ │ │ ├── js.go
│ │ │ │ ├── memguardian.go
│ │ │ │ ├── memguardian_test.go
│ │ │ │ ├── memoizer.go
│ │ │ │ └── state.go
│ │ │ ├── randomip/
│ │ │ │ ├── randomip.go
│ │ │ │ └── randomip_test.go
│ │ │ ├── replacer/
│ │ │ │ ├── replacer.go
│ │ │ │ └── replacer_test.go
│ │ │ ├── uncover/
│ │ │ │ └── uncover.go
│ │ │ ├── utils/
│ │ │ │ ├── excludematchers/
│ │ │ │ │ ├── excludematchers.go
│ │ │ │ │ └── excludematchers_test.go
│ │ │ │ └── vardump/
│ │ │ │ ├── dump.go
│ │ │ │ ├── dump_test.go
│ │ │ │ └── vars.go
│ │ │ └── variables/
│ │ │ ├── doc.go
│ │ │ ├── variables.go
│ │ │ ├── variables_bench_test.go
│ │ │ └── variables_test.go
│ │ ├── dns/
│ │ │ ├── cluster.go
│ │ │ ├── dns.go
│ │ │ ├── dns_test.go
│ │ │ ├── dns_types.go
│ │ │ ├── dnsclientpool/
│ │ │ │ └── clientpool.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── file/
│ │ │ ├── file.go
│ │ │ ├── find.go
│ │ │ ├── find_test.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── headless/
│ │ │ ├── engine/
│ │ │ │ ├── action.go
│ │ │ │ ├── action_types.go
│ │ │ │ ├── engine.go
│ │ │ │ ├── hijack.go
│ │ │ │ ├── http_client.go
│ │ │ │ ├── instance.go
│ │ │ │ ├── page.go
│ │ │ │ ├── page_actions.go
│ │ │ │ ├── page_actions_test.go
│ │ │ │ ├── rules.go
│ │ │ │ └── util.go
│ │ │ ├── headless.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ └── request.go
│ │ ├── http/
│ │ │ ├── build_request.go
│ │ │ ├── build_request_test.go
│ │ │ ├── cluster.go
│ │ │ ├── cluster_test.go
│ │ │ ├── http.go
│ │ │ ├── http_method_types.go
│ │ │ ├── http_test.go
│ │ │ ├── httpclientpool/
│ │ │ │ ├── clientpool.go
│ │ │ │ ├── errors.go
│ │ │ │ └── options.go
│ │ │ ├── httputils/
│ │ │ │ ├── misc.go
│ │ │ │ └── spm.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── race/
│ │ │ │ └── syncedreadcloser.go
│ │ │ ├── raw/
│ │ │ │ ├── doc.go
│ │ │ │ ├── raw.go
│ │ │ │ └── raw_test.go
│ │ │ ├── request.go
│ │ │ ├── request_annotations.go
│ │ │ ├── request_annotations_test.go
│ │ │ ├── request_condition.go
│ │ │ ├── request_fuzz.go
│ │ │ ├── request_generator.go
│ │ │ ├── request_generator_test.go
│ │ │ ├── request_test.go
│ │ │ ├── signature.go
│ │ │ ├── signer/
│ │ │ │ ├── aws-sign.go
│ │ │ │ └── signer.go
│ │ │ ├── signerpool/
│ │ │ │ └── signerpool.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ └── validate.go
│ │ ├── javascript/
│ │ │ ├── js.go
│ │ │ ├── js_test.go
│ │ │ └── testcases/
│ │ │ ├── ms-sql-detect.yaml
│ │ │ ├── oracle-auth-test.yaml
│ │ │ ├── redis-pass-brute.yaml
│ │ │ └── ssh-server-fingerprint.yaml
│ │ ├── network/
│ │ │ ├── network.go
│ │ │ ├── network_input_types.go
│ │ │ ├── network_test.go
│ │ │ ├── networkclientpool/
│ │ │ │ └── clientpool.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── offlinehttp/
│ │ │ ├── find.go
│ │ │ ├── find_test.go
│ │ │ ├── offlinehttp.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── read_response.go
│ │ │ ├── read_response_test.go
│ │ │ └── request.go
│ │ ├── protocols.go
│ │ ├── ssl/
│ │ │ ├── ssl.go
│ │ │ └── ssl_test.go
│ │ ├── utils/
│ │ │ ├── fields.go
│ │ │ ├── fields_test.go
│ │ │ ├── http/
│ │ │ │ ├── requtils.go
│ │ │ │ └── requtils_test.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ ├── variables.go
│ │ │ └── variables_test.go
│ │ ├── websocket/
│ │ │ └── websocket.go
│ │ └── whois/
│ │ ├── rdapclientpool/
│ │ │ └── clientpool.go
│ │ └── whois.go
│ ├── reporting/
│ │ ├── client.go
│ │ ├── dedupe/
│ │ │ ├── dedupe.go
│ │ │ └── dedupe_test.go
│ │ ├── exporters/
│ │ │ ├── es/
│ │ │ │ └── elasticsearch.go
│ │ │ ├── jsonexporter/
│ │ │ │ └── jsonexporter.go
│ │ │ ├── jsonl/
│ │ │ │ └── jsonl.go
│ │ │ ├── markdown/
│ │ │ │ ├── markdown.go
│ │ │ │ └── util/
│ │ │ │ ├── markdown_formatter.go
│ │ │ │ ├── markdown_utils.go
│ │ │ │ └── markdown_utils_test.go
│ │ │ ├── mongo/
│ │ │ │ └── mongo.go
│ │ │ ├── pdf/
│ │ │ │ ├── pdf.go
│ │ │ │ └── pdf_test.go
│ │ │ ├── sarif/
│ │ │ │ └── sarif.go
│ │ │ └── splunk/
│ │ │ └── splunkhec.go
│ │ ├── format/
│ │ │ ├── format.go
│ │ │ ├── format_utils.go
│ │ │ └── format_utils_test.go
│ │ ├── options.go
│ │ ├── reporting.go
│ │ └── trackers/
│ │ ├── filters/
│ │ │ └── filters.go
│ │ ├── gitea/
│ │ │ └── gitea.go
│ │ ├── github/
│ │ │ └── github.go
│ │ ├── gitlab/
│ │ │ └── gitlab.go
│ │ ├── jira/
│ │ │ ├── jira.go
│ │ │ └── jira_test.go
│ │ └── linear/
│ │ ├── jsonutil/
│ │ │ └── jsonutil.go
│ │ └── linear.go
│ ├── scan/
│ │ ├── charts/
│ │ │ ├── charts.go
│ │ │ └── echarts.go
│ │ ├── events/
│ │ │ ├── scan_noop.go
│ │ │ ├── stats_build.go
│ │ │ └── utils.go
│ │ └── scan_context.go
│ ├── templates/
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── cluster.go
│ │ ├── cluster_test.go
│ │ ├── compile.go
│ │ ├── compile_bench_test.go
│ │ ├── compile_test.go
│ │ ├── doc.go
│ │ ├── extensions/
│ │ │ └── extensions.go
│ │ ├── log.go
│ │ ├── log_test.go
│ │ ├── parser.go
│ │ ├── parser_config.go
│ │ ├── parser_error.go
│ │ ├── parser_stats.go
│ │ ├── parser_test.go
│ │ ├── parser_validate.go
│ │ ├── preprocessors.go
│ │ ├── signer/
│ │ │ ├── default.go
│ │ │ ├── handler.go
│ │ │ ├── handler_test.go
│ │ │ ├── tmpl_signer.go
│ │ │ └── tmpl_signer_test.go
│ │ ├── stats.go
│ │ ├── tag_filter.go
│ │ ├── tag_filter_test.go
│ │ ├── template_sign.go
│ │ ├── templates.go
│ │ ├── templates_doc.go
│ │ ├── templates_doc_examples.go
│ │ ├── templates_test.go
│ │ ├── templates_utils.go
│ │ ├── tests/
│ │ │ ├── global-matcher.yaml
│ │ │ ├── json-template.json
│ │ │ ├── match-1.yaml
│ │ │ ├── multiproto.json
│ │ │ ├── multiproto.yaml
│ │ │ ├── no-author.yaml
│ │ │ ├── no-req.yaml
│ │ │ ├── workflow-global-matchers.yaml
│ │ │ ├── workflow-invalid.yaml
│ │ │ └── workflow.yaml
│ │ ├── types/
│ │ │ ├── cluster_mappings.go
│ │ │ └── types.go
│ │ ├── validator_singleton.go
│ │ └── workflows.go
│ ├── testutils/
│ │ ├── fuzzplayground/
│ │ │ ├── db.go
│ │ │ ├── server.go
│ │ │ └── sqli_test.go
│ │ ├── integration.go
│ │ ├── testheadless/
│ │ │ ├── headless_local.go
│ │ │ └── headless_runtime.go
│ │ └── testutils.go
│ ├── tmplexec/
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── exec.go
│ │ ├── flow/
│ │ │ ├── README.md
│ │ │ ├── builtin/
│ │ │ │ └── dedupe.go
│ │ │ ├── doc.go
│ │ │ ├── flow_executor.go
│ │ │ ├── flow_executor_test.go
│ │ │ ├── flow_internal.go
│ │ │ ├── testcases/
│ │ │ │ ├── condition-flow-extractors.yaml
│ │ │ │ ├── condition-flow-no-operators.yaml
│ │ │ │ ├── condition-flow.yaml
│ │ │ │ ├── nuclei-flow-dns-id.yaml
│ │ │ │ ├── nuclei-flow-dns-prefix.yaml
│ │ │ │ └── nuclei-flow-dns.yaml
│ │ │ ├── util.go
│ │ │ ├── util_test.go
│ │ │ └── vm.go
│ │ ├── generic/
│ │ │ └── exec.go
│ │ ├── interface.go
│ │ ├── multiproto/
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── multi.go
│ │ │ ├── multi_test.go
│ │ │ └── testcases/
│ │ │ ├── multiprotodynamic.yaml
│ │ │ └── multiprotowithprefix.yaml
│ │ └── utils/
│ │ └── utils.go
│ ├── types/
│ │ ├── interfaces.go
│ │ ├── nucleierr/
│ │ │ └── kinds.go
│ │ ├── resume.go
│ │ ├── scanstrategy/
│ │ │ └── scan_strategy.go
│ │ └── types.go
│ ├── utils/
│ │ ├── capture_writer.go
│ │ ├── expand/
│ │ │ └── expand.go
│ │ ├── http_probe.go
│ │ ├── http_probe_test.go
│ │ ├── index.go
│ │ ├── insertion_ordered_map.go
│ │ ├── insertion_ordered_map_test.go
│ │ ├── json/
│ │ │ ├── doc.go
│ │ │ ├── json.go
│ │ │ ├── json_fallback.go
│ │ │ ├── jsoncodec.go
│ │ │ └── message.go
│ │ ├── monitor/
│ │ │ ├── monitor.go
│ │ │ └── monitor_test.go
│ │ ├── stats/
│ │ │ ├── doc.go
│ │ │ └── stats.go
│ │ ├── telnetmini/
│ │ │ ├── doc.go
│ │ │ ├── ntlm.go
│ │ │ ├── smb.go
│ │ │ └── telnet.go
│ │ ├── template_path.go
│ │ ├── utils.go
│ │ ├── utils_test.go
│ │ └── yaml/
│ │ ├── preprocess.go
│ │ └── yaml_decode_wrapper.go
│ └── workflows/
│ ├── doc.go
│ ├── workflows.go
│ └── workflows_test.go
└── static/
└── regression-cycle.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/DISCUSSION_TEMPLATE.md
================================================
# Nuclei Discussion Guidelines
## Before Creating a Discussion
1. **Search existing discussions and issues** to avoid duplicates
2. **Check the documentation** and README first
3. **Browse the FAQ** and common questions
## Bug Reports in Discussions
When reporting a bug in [Q&A Discussions](https://github.com/projectdiscovery/nuclei/discussions/categories/q-a), please include:
### Required Information:
- **Clear title** with `[BUG]` prefix (e.g., "[BUG] Nuclei crashes when...")
- **Current behavior** - What's happening now?
- **Expected behavior** - What should happen instead?
- **Steps to reproduce** - Commands or actions that trigger the issue
- **Environment details**:
- OS and version
- Nuclei version (`nuclei -version`)
- Go version (if installed via `go install`)
- **Log output** - Run with `-verbose` or `-debug` for detailed logs
- **Redact sensitive information** - Remove target URLs, credentials, etc.
### After Discussion:
- Maintainers will review and validate the bug report
- Valid bugs will be converted to issues with proper labels and tracking
- Questions and misconfigurations will be resolved in the discussion
## Feature Requests in Discussions
When requesting a feature in [Ideas Discussions](https://github.com/projectdiscovery/nuclei/discussions/categories/ideas), please include:
### Required Information:
- **Clear title** with `[FEATURE]` prefix (e.g., "[FEATURE] Add support for...")
- **Feature description** - What do you want to be added?
- **Use case** - Why is this feature needed? What problem does it solve?
- **Implementation ideas** - If you have suggestions on how it could work
- **Alternatives considered** - What other solutions have you thought about?
### After Discussion:
- Community and maintainers will discuss the feasibility
- Popular and viable features will be converted to issues
- Similar features may be grouped together
- Rejected features will be explained in the discussion
## Getting Help
For general questions, troubleshooting, and "how-to" topics:
- Use [Q&A Discussions](https://github.com/projectdiscovery/nuclei/discussions/categories/q-a)
- Join the [Discord server](https://discord.gg/projectdiscovery) #nuclei channel
- Check existing discussions for similar questions
## Discussion to Issue Conversion Process
Only maintainers can convert discussions to issues. The process:
1. **Validation** - Maintainers review the discussion for completeness and validity
2. **Classification** - Determine if it's a bug, feature, enhancement, etc.
3. **Issue creation** - Create a properly formatted issue with appropriate labels
4. **Linking** - Link the issue back to the original discussion
5. **Resolution** - Mark the discussion as resolved or close it
This process ensures:
- High-quality issues that are actionable
- Proper triage and labeling
- Reduced noise in the issue tracker
- Community involvement in the validation process
## Why This Process?
- **Better organization** - Issues contain only validated, actionable items
- **Community input** - Discussions allow for community feedback before escalation
- **Quality control** - Maintainers ensure proper formatting and information
- **Reduced maintenance** - Fewer invalid or duplicate issues to manage
- **Clear separation** - Questions vs. actual bugs/features are clearly distinguished
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug Report
description: Create a report to help us to improve the Nuclei.
title: "[BUG] ..."
labels: ["Type: Bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
For support requests, FAQs or "How to" questions, please use the [GitHub Discussions](https://github.com/projectdiscovery/nuclei/discussions) section instead or join our [Discord server](https://discord.gg/projectdiscovery) to discuss the idea on the **#nuclei** channel.
:warning: **Issues missing important information may be closed without further investigation.**
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues.
required: true
- type: textarea
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: Steps To Reproduce
description: |
Steps to reproduce the behavior, for example, commands to run Nuclei.
💡 Prefer copying text output over using screenshots for easier troubleshooting.
📝 For a more detailed output that could help in troubleshooting, you may want to run Nuclei with the **`-verbose`** or **`-debug`** flags. This will provide additional insights into what's happening under the hood.<br>
📊 For performance or memory investigations, use **`-profile-mem`**, which generates `*.cpu`, `*.mem`, and `*.trace` files. Since GitHub doesn't support these formats directly, compress them (e.g., .zip or .tar.gz) and attach the archive under the "Anything else" section below.
:warning: **Please redact any literal target hosts/URLs or other sensitive information.**
placeholder: |
1. Run `nuclei -t ...`
validations:
required: true
- type: textarea
attributes:
label: Relevant log output
description: |
Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
💡 Prefer copying text output over using screenshots for easier troubleshooting.
📝 For a more detailed output that could help in troubleshooting, you may want to run Nuclei with the **`-verbose`** or **`-debug`** flags. This will provide additional insights into what's happening under the hood.<br>
📊 For performance or memory investigations, use **`-profile-mem`**, which generates `*.cpu`, `*.mem`, and `*.trace` files. Since GitHub doesn't support these formats directly, compress them (e.g., .zip or .tar.gz) and attach the archive under the "Anything else" section below.
:warning: **Please redact any literal target hosts/URLs or other sensitive information.**
render: shell
- type: textarea
attributes:
label: Environment
description: |
Examples:
- **OS**: Ubuntu 24.04
- **Nuclei** (`nuclei -version`): v3.6.0
- **Go** (`go version`): go1.24.0 _(only if you've installed it via the `go install` command)_
value: |
- OS:
- Nuclei:
- Go:
render: markdown
validations:
required: true
- type: textarea
attributes:
label: Anything else?
description: |
Links? References? Templates? CPU, memory, and trace profiles? Anything that will give us more context about the issue you are encountering!
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: 💡 Request a Feature (Start with Discussion)
url: https://github.com/orgs/projectdiscovery/discussions/new?category=ideas
about: Share your feature idea in discussions first. This helps validate and refine the request before creating an issue.
- name: ❓ Ask Questions / Get Help
url: https://github.com/orgs/projectdiscovery/discussions
about: Get help and ask questions about using Nuclei. Many questions don't require issues.
- name: 🔍 Browse Existing Issues
url: https://github.com/projectdiscovery/nuclei/issues
about: Check existing issues to see if your problem has already been reported or is being worked on.
- name: 💬 Connect with PD Team (Discord)
url: https://discord.gg/projectdiscovery
about: Join our Discord for real-time discussions and community support on the #nuclei channel.
================================================
FILE: .github/ISSUE_TEMPLATE/reference-templates/README.md
================================================
# Issue Template References
## Overview
This folder contains the preserved issue templates that are **not** directly accessible to users. These templates serve as references for maintainers when converting discussions to issues.
## New Workflow
### For Users:
1. **All reports start in Discussions** - Users cannot create issues directly
2. Bug reports go to [Q&A Discussions](https://github.com/projectdiscovery/nuclei/discussions/categories/q-a)
3. Feature requests go to [Ideas Discussions](https://github.com/projectdiscovery/nuclei/discussions/categories/ideas)
4. This helps filter out duplicate questions, invalid reports, and ensures proper triage
### For Maintainers:
1. **Review discussions** in both Q&A and Ideas categories
2. **Validate the reports** - ensure they're actual bugs/valid feature requests
3. **Use reference templates** when converting discussions to issues:
- Copy content from `bug-report-reference.yml` or `feature-request-reference.yml`
- Create a new issue manually with the appropriate template structure
- Link back to the original discussion
- Close the discussion or mark it as resolved
## Benefits
- **Better triage**: Avoid cluttering issues with questions and invalid reports
- **Community involvement**: Discussions allow for community input before creating issues
- **Quality control**: Maintainers can ensure issues follow proper format and contain necessary information
- **Reduced noise**: Only validated, actionable items become issues
## Reference Templates
- `bug-report-reference.yml` - Use when converting bug reports from discussions to issues
- `feature-request-reference.yml` - Use when converting feature requests from discussions to issues
## Converting a Discussion to Issue
1. Identify a valid discussion that needs to become an issue
2. Go to the main repository's Issues tab
3. Click "New Issue"
4. Manually create the issue using the reference template structure
5. Include all relevant information from the discussion
6. Add a comment linking back to the original discussion
7. Apply appropriate labels
8. Close or mark the discussion as resolved with a link to the created issue
================================================
FILE: .github/ISSUE_TEMPLATE/reference-templates/feature-request-reference.yml
================================================
name: Feature Request
description: Request feature to implement in the Nuclei.
title: "[FEATURE] ..."
labels: ["Type: Enhancement"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this feature request!
Please make sure to provide a detailed description with all the relevant information that might be required to start working on this feature. In case you are not sure about your request or whether the particular feature is already supported or not, please [start a discussion](https://github.com/projectdiscovery/nuclei/discussions/categories/ideas) instead.
Join our [Discord server](https://discord.gg/projectdiscovery) to discuss the idea on the **#nuclei** channel.
- type: textarea
attributes:
label: Describe your feature request
description: A clear and concise description of feature to implement.
validations:
required: true
- type: textarea
attributes:
label: Describe the use case of the feature
description: A clear and concise description of the feature request's motivation and the use-cases in which it could be useful.
validations:
required: true
- type: textarea
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context about the feature request here.
validations:
required: false
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Proposed changes
<!-- Describe the overall picture of your modifications to help maintainers understand the pull request. PRs are required to be associated to their related issue tickets or feature request. -->
### Proof
<!-- How has this been tested? Please describe the tests that you ran to verify your changes. -->
## Checklist
<!-- Put an "x" in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code. -->
- [ ] Pull request is created against the [dev](https://github.com/projectdiscovery/nuclei/tree/dev) branch
- [ ] All checks passed (lint, unit/integration/regression tests etc.) with my changes
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] I have added necessary documentation (if appropriate)
================================================
FILE: .github/auto_assign.yml
================================================
addReviewers: true
reviewers:
- dogancanbakir
- dwisiswant0
- mzack9999
numberOfReviewers: 1
skipKeywords:
- '@dependabot'
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
target-branch: "dev"
commit-message:
prefix: "chore"
include: "scope"
allow:
- dependency-name: "github.com/projectdiscovery/*"
groups:
modules:
patterns: ["github.com/projectdiscovery/*"]
security:
applies-to: "security-updates"
patterns: ["*"]
exclude-patterns: ["github.com/projectdiscovery/*"]
labels:
- "Type: Maintenance"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
target-branch: "dev"
commit-message:
prefix: "chore"
include: "scope"
groups:
workflows:
patterns: ["*"]
exclude-patterns: ["projectdiscovery/actions/*"]
labels:
- "Type: Maintenance"
# # Maintain dependencies for docker
# - package-ecosystem: "docker"
# directory: "/"
# schedule:
# interval: "weekly"
# target-branch: "dev"
# commit-message:
# prefix: "chore"
# include: "scope"
# labels:
# - "Type: Maintenance"
================================================
FILE: .github/release.yml
================================================
changelog:
exclude:
authors:
- dependabot
categories:
- title: 🎉 New Features
labels:
- "Type: Enhancement"
- title: 🐞 Bug Fixes
labels:
- "Type: Bug"
- title: 🔨 Maintenance
labels:
- "Type: Maintenance"
- title: Other Changes
labels:
- "*"
================================================
FILE: .github/workflows/auto-merge.yaml
================================================
name: 🔀 Auto merge PR
on:
# pull_request:
# types: [opened, synchronize, reopened, ready_for_review]
# pull_request_review:
# types: [submitted]
workflow_run:
workflows: ["♾️ Compatibility Checks"]
types: [completed]
permissions:
contents: write
pull-requests: write
jobs:
auto-merge-dependabot:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: projectdiscovery/actions/pr/approve@v1
- uses: projectdiscovery/actions/pr/merge@v1
with:
auto: "true"
================================================
FILE: .github/workflows/compat-checks.yaml
================================================
name: ♾️ Compatibility Checks
on:
pull_request:
types: [opened, synchronize]
branches:
- dev
jobs:
compat-checks:
if: ${{ github.actor == 'dependabot[bot]' }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go/compat-checks@v1
with:
go-version: "stable"
release-test: true
================================================
FILE: .github/workflows/flamegraph.yaml
================================================
name: 📊 Flamegraph
on:
workflow_call: {}
jobs:
flamegraph:
name: "Flamegraph"
env:
GITHUB_TOKEN: "${{ github.token }}"
PROFILE_MEM: "/tmp/nuclei-profile"
TARGET_URL: "http://honey.scanme.sh/-/?foo=bar"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- run: make build
- name: "Setup environment (push)"
if: ${{ github.event_name == 'push' }}
run: |
echo "PROFILE_MEM=${PROFILE_MEM}-${GITHUB_REF_NAME}-${GITHUB_SHA}" >> $GITHUB_ENV
echo "FLAMEGRAPH_NAME=nuclei-${GITHUB_REF_NAME} (${GITHUB_SHA})" >> $GITHUB_ENV
- name: "Setup environment (pull_request)"
if: ${{ github.event_name == 'pull_request' }}
run: |
echo "PROFILE_MEM=${PROFILE_MEM}-pr-${{ github.event.number }}" >> $GITHUB_ENV
echo "FLAMEGRAPH_NAME=nuclei (PR #${{ github.event.number }})" >> $GITHUB_ENV
- run: ./bin/nuclei -update-templates
- run: |
./bin/nuclei -silent -target="${TARGET_URL}" \
-disable-update-check \
-no-mhe -no-httpx \
-code -dast -file -headless \
-enable-self-contained -enable-global-matchers \
-rate-limit=0 \
-concurrency=250 \
-headless-concurrency=100 \
-payload-concurrency=250 \
-bulk-size=250 \
-headless-bulk-size=100 \
-profile-mem="${PROFILE_MEM}"
- uses: projectdiscovery/actions/flamegraph@v1
id: flamegraph-cpu
with:
profile: "${{ env.PROFILE_MEM }}.cpu"
name: "${{ env.FLAMEGRAPH_NAME }} CPU profiles"
continue-on-error: true
- uses: projectdiscovery/actions/flamegraph@v1
id: flamegraph-mem
with:
profile: "${{ env.PROFILE_MEM }}.mem"
name: "${{ env.FLAMEGRAPH_NAME }} memory profiles"
continue-on-error: true
- if: ${{ steps.flamegraph-mem.outputs.message == '' }}
run: |
echo "::notice::CPU flamegraph: ${{ steps.flamegraph-cpu.outputs.url }}"
echo "::notice::Memory (heap) flamegraph: ${{ steps.flamegraph-mem.outputs.url }}"
================================================
FILE: .github/workflows/generate-docs.yaml
================================================
name: ⏰ Generate Docs
on:
push:
branches:
- dev
workflow_dispatch: {}
jobs:
publish-docs:
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/setup/git@v1
- run: make syntax-docs
- run: git status -s | wc -l | xargs -I {} echo CHANGES={} >> $GITHUB_OUTPUT
id: status
- uses: projectdiscovery/actions/commit@v1
if: steps.status.outputs.CHANGES > 0
with:
files: |
SYNTAX-REFERENCE.md
nuclei-jsonschema.json
message: 'docs: update syntax & JSON schema 🤖'
- run: git push origin $GITHUB_REF
================================================
FILE: .github/workflows/generate-pgo.yaml
================================================
name: 👤 Generate PGO
on:
workflow_dispatch: {}
workflow_call: {}
jobs:
pgo:
runs-on: ubuntu-latest
if: github.repository == 'projectdiscovery/nuclei'
permissions:
contents: write
env:
GITHUB_TOKEN: "${{ github.token }}"
PGO_FILE: "cmd/nuclei/default.pgo"
TARGET: "https://honey.scanme.sh"
TARGET_COUNT: "100"
TARGET_LIST: "/tmp/targets.txt"
PROFILE_MEM: "/tmp/nuclei-profile"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- run: |
for i in {1..${{ env.TARGET_COUNT }}}; do
echo "${{ env.TARGET }}/-/?_=${i}" >> "${{ env.TARGET_LIST }}";
done
- run: make build
- run: ./bin/nuclei -update-templates
- run: |
./bin/nuclei -silent -list="${TARGET_LIST}" \
-disable-update-check \
-no-mhe -no-httpx \
-code -dast -file -headless \
-enable-self-contained -enable-global-matchers \
-rate-limit=0 \
-concurrency=250 \
-headless-concurrency=100 \
-payload-concurrency=250 \
-bulk-size=250 \
-headless-bulk-size=100 \
-profile-mem="${PROFILE_MEM}" \
env:
DISABLE_STDOUT: "1"
- run: mv "${PROFILE_MEM}.cpu" "${PGO_FILE}"
- uses: actions/upload-artifact@v7
with:
name: "pgo"
path: "${{ env.PGO_FILE }}"
overwrite: true
================================================
FILE: .github/workflows/govulncheck.yaml
================================================
name: 🐛 govulncheck
on:
schedule:
- cron: '0 0 * * 0' # Weekly
workflow_dispatch: {}
jobs:
govulncheck:
runs-on: ubuntu-latest
if: github.repository == 'projectdiscovery/nuclei'
permissions:
actions: read
contents: read
security-events: write
env:
OUTPUT: "/tmp/results.sarif"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- run: go install golang.org/x/vuln/cmd/govulncheck@latest
- run: |
govulncheck -scan package -format sarif ./... | \
jq '(.runs[].tool.driver.rules[]?.properties.tags)? |= unique' > $OUTPUT
- uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: "${{ env.OUTPUT }}"
category: "govulncheck"
================================================
FILE: .github/workflows/memogen.yaml
================================================
name: 💾 Memoize Functions
on:
push:
branches:
- dev
paths:
- 'pkg/js/libs/**'
- 'cmd/memogen/**'
workflow_dispatch: {}
jobs:
memogen:
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/setup/git@v1
- run: make memogen
- run: git status -s | wc -l | xargs -I {} echo CHANGES={} >> $GITHUB_OUTPUT
id: status
- uses: projectdiscovery/actions/commit@v1
if: steps.status.outputs.CHANGES > 0
with:
files: |
pkg/js/libs/
message: 'chore(js): update memoized functions 🤖'
- run: git push origin $GITHUB_REF
if: steps.status.outputs.CHANGES > 0
================================================
FILE: .github/workflows/perf-regression.yaml
================================================
name: 🔨 Performance Regression
on:
workflow_call: {}
workflow_dispatch: {}
jobs:
perf-regression:
runs-on: ubuntu-latest
if: github.repository == 'projectdiscovery/nuclei'
env:
BENCH_OUT: "/tmp/bench.out"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- run: make build-test
- run: ./bin/nuclei.test -test.run - -test.bench=. -test.benchmem ./cmd/nuclei/ | tee $BENCH_OUT
env:
DISABLE_STDOUT: "1"
- uses: actions/cache/restore@v5
with:
path: ./cache
key: ${{ runner.os }}-benchmark
- uses: benchmark-action/github-action-benchmark@v1
with:
name: 'RunEnumeration Benchmark'
tool: 'go'
output-file-path: ${{ env.BENCH_OUT }}
external-data-json-path: ./cache/benchmark-data.json
fail-on-alert: false
github-token: ${{ secrets.GITHUB_TOKEN }}
comment-on-alert: true
summary-always: true
- uses: actions/cache/save@v5
if: github.event_name == 'push'
with:
path: ./cache
key: ${{ runner.os }}-benchmark
================================================
FILE: .github/workflows/release.yaml
================================================
name: 🎉 Release
on:
push:
tags:
- '*'
workflow_dispatch: {}
jobs:
pgo:
name: "Generate PGO"
uses: ./.github/workflows/generate-pgo.yaml
release:
name: "Release"
needs: ["pgo"]
runs-on: ubuntu-latest-16-cores
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/download-artifact@v8
with:
name: "pgo"
path: "cmd/nuclei/"
- uses: projectdiscovery/actions/setup/go@v1
with:
go-version: "stable"
- uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- uses: projectdiscovery/actions/goreleaser@v1
with:
release: true
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
SLACK_WEBHOOK: "${{ secrets.RELEASE_SLACK_WEBHOOK }}"
DISCORD_WEBHOOK_ID: "${{ secrets.DISCORD_WEBHOOK_ID }}"
DISCORD_WEBHOOK_TOKEN: "${{ secrets.DISCORD_WEBHOOK_TOKEN }}"
================================================
FILE: .github/workflows/stale.yaml
================================================
name: 💤 Stale
on:
schedule:
- cron: '0 0 * * 0' # Weekly
jobs:
stale:
runs-on: ubuntu-latest
permissions:
actions: write
contents: write # only for delete-branch option
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
with:
days-before-stale: 90
days-before-close: 7
stale-issue-label: "Status: Stale"
stale-pr-label: "Status: Stale"
stale-issue-message: >
This issue has been automatically marked as stale because it has not
had recent activity. It will be closed in 7 days if no further
activity occurs. Thank you for your contributions!
stale-pr-message: >
This pull request has been automatically marked as stale due to
inactivity. It will be closed in 7 days if no further activity
occurs. Please update if you wish to keep it open.
close-issue-message: >
This issue has been automatically closed due to inactivity. If you
think this is a mistake or would like to continue the discussion,
please comment or feel free to reopen it.
close-pr-message: >
This pull request has been automatically closed due to inactivity.
If you think this is a mistake or would like to continue working on
it, please comment or feel free to reopen it.
close-issue-label: "Status: Abandoned"
close-pr-label: "Status: Abandoned"
exempt-issue-labels: "Type: Enhancement"
================================================
FILE: .github/workflows/tests.yaml
================================================
name: 🔨 Tests
on:
push:
branches: ["dev"]
paths:
- '**.go'
- '**.mod'
pull_request:
paths:
- '**.go'
- '**.mod'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
name: "Lint"
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/golangci-lint/v2@v1
tests:
name: "Tests"
needs: ["lint"]
env:
GITHUB_TOKEN: "${{ github.token }}"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
runs-on: "${{ matrix.os }}"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- uses: projectdiscovery/actions/free-disk-space@v1
with:
llvm: 'false'
php: 'false'
mongodb: 'false'
mysql: 'false'
misc-packages: 'false'
docker-images: 'false'
tools-cache: 'false'
- run: make vet
- run: make build
- run: make test
env:
PDCP_API_KEY: "${{ secrets.PDCP_API_KEY }}"
- run: go run -race . -l ../functional-test/targets.txt -id tech-detect,tls-version
if: ${{ matrix.os != 'windows-latest' }} # known issue: https://github.com/golang/go/issues/46099
working-directory: cmd/nuclei/
sdk:
name: "Run example SDK"
needs: ["tests"]
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: "${{ github.token }}"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- name: "Simple"
run: go run .
working-directory: examples/simple/
# - run: go run . # Temporarily disabled very flaky in github actions
# working-directory: examples/advanced/
# TODO: FIX with ExecutionID (ref: https://github.com/projectdiscovery/nuclei/pull/6296)
# - name: "with Speed Control"
# run: go run .
# working-directory: examples/with_speed_control/
integration:
name: "Integration tests"
needs: ["tests"]
env:
GITHUB_TOKEN: "${{ github.token }}"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- uses: projectdiscovery/actions/setup/python@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- run: bash run.sh "${{ matrix.os }}"
env:
PDCP_API_KEY: "${{ secrets.PDCP_API_KEY }}"
timeout-minutes: 50
working-directory: integration_tests/
functional:
name: "Functional tests"
needs: ["tests"]
env:
GITHUB_TOKEN: "${{ github.token }}"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/nuclei@v1
- uses: projectdiscovery/actions/setup/python@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- run: bash run.sh
working-directory: cmd/functional-test/
validate:
name: "Template validate"
needs: ["tests"]
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: "${{ github.token }}"
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
- uses: projectdiscovery/actions/cache/go-rod-browser@v1
- run: make template-validate
codeql:
name: "CodeQL analysis"
needs: ["tests"]
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- uses: actions/checkout@v6
- uses: github/codeql-action/init@v4
with:
languages: 'go'
- uses: github/codeql-action/autobuild@v4
- uses: github/codeql-action/analyze@v4
release:
name: "Release test"
needs: ["tests"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: projectdiscovery/actions/setup/go@v1
with:
go-version: "stable"
- uses: projectdiscovery/actions/goreleaser@v1
flamegraph:
name: "Flamegraph"
needs: ["tests"]
uses: ./.github/workflows/flamegraph.yaml
perf-regression:
name: "Performance regression"
needs: ["tests"]
uses: ./.github/workflows/perf-regression.yaml
================================================
FILE: .github/workflows/typos.yaml
================================================
name: 🔤 Typos
on:
push:
branches: ["dev"]
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
typos:
name: "Spell Check"
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: crate-ci/typos@v1.28.4
================================================
FILE: .goreleaser.yml
================================================
version: 2
before:
hooks:
- go mod download
- go mod verify
builds:
- main: cmd/nuclei/main.go
binary: nuclei
id: nuclei-cli
env:
- CGO_ENABLED=0
- GOEXPERIMENT=greenteagc
goos: [windows, linux, darwin]
goarch: [amd64, '386', arm, arm64]
ignore:
- goos: darwin
goarch: '386'
- goos: windows
goarch: arm
- goos: windows
goarch: arm64
flags:
- -trimpath
- -pgo=auto
ldflags:
- -s
- -w
#- main: cmd/tmc/main.go
# binary: tmc
# id: annotate
#
# env:
# - CGO_ENABLED=0
#
# goos: [linux]
# goarch: [amd64]
archives:
- formats: [zip]
id: nuclei
ids: [nuclei-cli]
name_template: '{{ .ProjectName }}_{{ .Version }}_{{ if eq .Os "darwin" }}macOS{{ else }}{{ .Os }}{{ end }}_{{ .Arch }}'
checksum:
algorithm: sha256
dockers:
- image_templates:
- "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:latest-amd64"
dockerfile: Dockerfile.goreleaser
use: buildx
build_flag_templates:
- "--pull"
- "--platform=linux/amd64"
- "--label=org.opencontainers.image.created={{ .Date }}"
- "--label=org.opencontainers.image.ref.name={{ .Tag }}"
- "--label=org.opencontainers.image.revision={{ .FullCommit }}"
- "--label=org.opencontainers.image.version={{ .Version }}"
goarch: amd64
- image_templates:
- "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}-arm64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}-arm64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}-arm64"
- "projectdiscovery/{{ .ProjectName }}:latest-arm64"
dockerfile: Dockerfile.goreleaser
use: buildx
build_flag_templates:
- "--pull"
- "--platform=linux/arm64"
- "--label=org.opencontainers.image.created={{ .Date }}"
- "--label=org.opencontainers.image.ref.name={{ .Tag }}"
- "--label=org.opencontainers.image.revision={{ .FullCommit }}"
- "--label=org.opencontainers.image.version={{ .Version }}"
goarch: arm64
# # NOTE(dwisiswant0): chromium doesn't support 32-bit on alpine
# - image_templates:
# - "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}-386"
# - "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}-386"
# - "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}-386"
# - "projectdiscovery/{{ .ProjectName }}:latest-386"
# dockerfile: Dockerfile.goreleaser
# use: buildx
# build_flag_templates:
# - "--pull"
# - "--platform=linux/386"
# - "--label=org.opencontainers.image.created={{ .Date }}"
# - "--label=org.opencontainers.image.ref.name={{ .Tag }}"
# - "--label=org.opencontainers.image.revision={{ .FullCommit }}"
# - "--label=org.opencontainers.image.version={{ .Version }}"
# goarch: "386"
docker_manifests:
- name_template: "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}"
image_templates:
- "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:{{ .Tag }}-arm64"
- name_template: "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}"
image_templates:
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}.{{ .Minor }}-arm64"
- name_template: "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}"
image_templates:
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}-amd64"
- "projectdiscovery/{{ .ProjectName }}:v{{ .Major }}-arm64"
- name_template: "projectdiscovery/{{ .ProjectName }}:latest"
image_templates:
- "projectdiscovery/{{ .ProjectName }}:latest-amd64"
- "projectdiscovery/{{ .ProjectName }}:latest-arm64"
announce:
slack:
enabled: true
channel: '#release'
username: GoReleaser
message_template: 'New Release: {{ .ProjectName }} {{.Tag}} is published! Check it out at {{ .ReleaseURL }}'
discord:
enabled: true
message_template: '**New Release: {{ .ProjectName }} {{.Tag}}** is published! Check it out at {{ .ReleaseURL }}'
================================================
FILE: .run/DSLFunctionsIT.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="DSLFunctionsIT" type="GoApplicationRunConfiguration" factoryName="Go Application">
<module name="nuclei" />
<working_directory value="$PROJECT_DIR$/integration_tests" />
<envs>
<env name="DEBUG" value="true" />
<env name="TESTS" value="http/dsl-functions.yaml" />
</envs>
<kind value="PACKAGE" />
<package value="github.com/projectdiscovery/nuclei/v3/cmd/integration-test" />
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$/cmd/integration-test/integration-test.go" />
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/IntegrationTests.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="IntegrationTests" type="ShConfigurationType">
<option name="SCRIPT_TEXT" value="" />
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/integration_tests/run.sh" />
<option name="SCRIPT_OPTIONS" value="" />
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$/integration_tests/" />
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
<option name="INTERPRETER_PATH" value="/bin/zsh" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="EXECUTE_IN_TERMINAL" value="true" />
<option name="EXECUTE_SCRIPT_FILE" value="true" />
<envs>
<env name="DEBUG" value="true" />
</envs>
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/RegressionTests.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="RegressionTests" type="ShConfigurationType">
<option name="SCRIPT_TEXT" value="" />
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/cmd/functional-test/run.sh" />
<option name="SCRIPT_OPTIONS" value="" />
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$/cmd/functional-test/" />
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
<option name="INTERPRETER_PATH" value="/bin/zsh" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="EXECUTE_IN_TERMINAL" value="true" />
<option name="EXECUTE_SCRIPT_FILE" value="true" />
<envs>
<env name="DEBUG" value="true" />
</envs>
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/UnitTests.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="UnitTests" type="GoTestRunConfiguration" factoryName="Go Test">
<module name="nuclei" />
<working_directory value="$PROJECT_DIR$/v2" />
<go_parameters value="-i" />
<kind value="DIRECTORY" />
<directory value="$PROJECT_DIR$/" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<method v="2" />
</configuration>
</component>
================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
Nuclei is a modern, high-performance vulnerability scanner built in Go that leverages YAML-based templates for customizable vulnerability detection. It supports multiple protocols (HTTP, DNS, TCP, SSL, WebSocket, WHOIS, JavaScript, Code) and is designed for zero false positives through real-world condition simulation.
## Development Commands
### Building and Testing
- `make build` - Build the main nuclei binary to ./bin/nuclei
- `make test` - Run unit tests with race detection
- `make integration` - Run integration tests (builds and runs test suite)
- `make functional` - Run functional tests
- `make vet` - Run go vet for code analysis
- `make tidy` - Clean up go modules
### Validation and Linting
- `make template-validate` - Validate nuclei templates using the built binary
- `go fmt ./...` - Format Go code
- `go vet ./...` - Static analysis
### Development Tools
- `make devtools-all` - Build all development tools (bindgen, tsgen, scrapefuncs)
- `make jsupdate-all` - Update JavaScript bindings and TypeScript definitions
- `make docs` - Generate documentation
- `make memogen` - Generate memoization code for JavaScript libraries
### Testing Specific Components
- Run single test: `go test -v ./pkg/path/to/package -run TestName`
- Integration tests are in `integration_tests/` and can be run via `make integration`
## Architecture Overview
### Core Components
- **cmd/nuclei** - Main CLI entry point with flag parsing and configuration
- **internal/runner** - Core runner that orchestrates the entire scanning process
- **pkg/core** - Execution engine with work pools and template clustering
- **pkg/templates** - Template parsing, compilation, and management
- **pkg/protocols** - Protocol implementations (HTTP, DNS, Network, etc.)
- **pkg/operators** - Matching and extraction logic (matchers/extractors)
- **pkg/catalog** - Template discovery and loading from disk/remote sources
### Protocol Architecture
Each protocol (HTTP, DNS, Network, etc.) implements:
- Request interface with Compile(), ExecuteWithResults(), Match(), Extract() methods
- Operators embedding for matching/extraction functionality
- Protocol-specific request building and execution logic
### Template System
- Templates are YAML files defining vulnerability detection logic
- Compiled into executable requests with operators (matchers/extractors)
- Support for workflows (multistep template execution)
- Template clustering optimizes identical requests across multiple templates
### Key Execution Flow
1. Template loading and compilation via pkg/catalog/loader
2. Input provider setup for targets
3. Engine creation with work pools for concurrency
4. Template execution with result collection via operators
5. Output writing and reporting integration
### JavaScript Integration
- Custom JavaScript runtime for code protocol templates
- Auto-generated bindings in pkg/js/generated/
- Library implementations in pkg/js/libs/
- Development tools for binding generation in pkg/js/devtools/
## Template Development
- Templates located in separate nuclei-templates repository
- YAML format with info, requests, and operators sections
- Support for multiple protocol types in single template
- Built-in DSL functions for dynamic content generation
- Template validation available via `make template-validate`
## Key Directories
- **lib/** - SDK for embedding nuclei as a library
- **examples/** - Usage examples for different scenarios
- **integration_tests/** - Integration test suite with protocol-specific tests
- **pkg/fuzz/** - Fuzzing engine and DAST capabilities
- **pkg/input/** - Input processing for various formats (Burp, OpenAPI, etc.)
- **pkg/reporting/** - Result export and issue tracking integrations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to ProjectDiscovery/Nuclei
We appreciate your interest in contributing to the projectdiscovery/nuclei! This document provides some basic guidelines for contributors.
## Getting Started
- Always base your work from the `dev` branch, which is the development branch with the latest code.
- Before creating a Pull Request (PR), make sure there is a corresponding issue for your contribution. If there isn't one already, please create one.
- Include the problem description in the issue.
## Pull Requests
When creating a PR, please follow these guidelines:
- Link your PR to the corresponding issue.
- Provide context in the PR description to help reviewers understand the changes. The more information you provide, the faster the review process will be.
- Include an example of running the tool with the changed code, if applicable. Provide 'before' and 'after' examples if possible.
- Include steps for functional testing or replication.
- If you're adding a new feature, make sure to include unit tests.
## Code Style
Please adhere to the existing coding style for consistency.
## Development
To ensure your changes work as expected and strictly adhere to the project's standards, please run the following commands before submitting a PR:
- **Run tests**:
```sh
make test
```
- **Run linters/vet**:
```sh
make vet
```
- **Build the project**:
```sh
make build
```
## Questions
If you have any questions or need further guidance, please feel free to ask in the issue or PR, or [reach out to the maintainers](https://discord.gg/projectdiscovery).
Thank you for your contribution!
================================================
FILE: DEBUG.md
================================================
## Debugging Nuclei
While Adding new features or fixing bugs or writing new templates to properly understand the behavior of that component, it is essential to understand what debugging options are available in nuclei. This guide lists all the debugging options available in nuclei.
### Template related debugging
- `-debug` flag
When this flag is provided, nuclei will print all requests that are being sent by nuclei to the target as well as the response received from the target.
- `-debug-req` flag
When this flag is provided, nuclei will print all requests that are being sent by nuclei to the target.
- `-debug-resp` flag
When this flag is provided, nuclei will print all responses that are being received by nuclei from the target.
- `-ldf` flag
When this flag is provided, nuclei will print the list of all helper functions available in this release of nuclei and exit.
- `-svd` flag
When this flag is provided, nuclei will print all `variables` pre- and post-execution of a request for a template. This is useful to understand what variables are available for a template and what values they have.
- `-elog = errors.txt` flag
When this flag is provided, nuclei will log all errors to the file specified. This is helpful when running large scans.
### Environment Variable Switches
Nuclei was built with some environment variables in mind to help with debugging. These environment variables can be set to enable debugging of a particular component/functionality for nuclei.
| Environment Variable | Description |
| -------------------------------- | -------------------------------------------------------- |
| `DEBUG=true` | Enables Printing Stack Traces for all errors |
| `SHOW_DSL_ERRORS=true` | Enables Printing DSL Errors (that are hidden by default) |
| `HIDE_TEMPLATE_SIG_WARNING=true` | Hides Template Signature Verification Warnings |
| `NUCLEI_LOG_ALL=true` | Log All Events that were skipped in verbose mode |
| `NUCLEI_CONFIG_DIR` | Sets custom configuration directory path |
| `NUCLEI_TEMPLATES_DIR` | Sets custom nuclei templates directory path |
================================================
FILE: DESIGN.md
================================================
# Nuclei Architecture Document
A brief overview of Nuclei Engine architecture. This document will be kept updated as the engine progresses.
## pkg/templates
### Template
Template is the basic unit of input to the engine which describes the requests to be made, matching to be done, data to extract, etc.
The template structure is described here. Template level attributes are defined here as well as convenience methods to validate, parse and compile templates creating executers.
Any attributes etc. required for the template, engine or requests to function are also set here.
Workflows are also compiled, their templates are loaded and compiled as well. Any validations etc. on the paths provided are also done here.
`Parse` function is the main entry point which returns a template for a `filePath` and `executorOptions`. It compiles all the requests for the templates, all the workflows, as well as any self-contained request etc. It also caches the templates in an in-memory cache.
### Preprocessors
Preprocessors are also applied here which can do things at template level. They get data of the template which they can alter at will on runtime. This is used in the engine to do random string generation.
Custom processor can be used if they satisfy the following interface.
```go
type Preprocessor interface {
Process(data []byte) []byte
}
```
## pkg/model
Model package implements Information structure for Nuclei Templates. `Info` contains all major metadata information for the template. `Classification` structure can also be used to provide additional context to vulnerability data.
It also specifies a `WorkflowLoader` interface that is used during workflow loading in template compilation stage.
```go
type WorkflowLoader interface {
GetTemplatePathsByTags(tags []string) []string
GetTemplatePaths(templatesList []string, noValidate bool) []string
}
```
## pkg/protocols
Protocols package implements all the request protocols supported by Nuclei. This includes http, dns, network, headless and file requests as of now.
### Request
It exposes a `Request` interface that is implemented by all the request protocols supported.
```go
// Request is an interface implemented any protocol based request generator.
type Request interface {
Compile(options *ExecuterOptions) error
Requests() int
GetID() string
Match(data map[string]interface{}, matcher *matchers.Matcher) (bool, []string)
Extract(data map[string]interface{}, matcher *extractors.Extractor) map[string]struct{}
ExecuteWithResults(input string, dynamicValues, previous output.InternalEvent, callback OutputEventCallback) error
MakeResultEventItem(wrapped *output.InternalWrappedEvent) *output.ResultEvent
MakeResultEvent(wrapped *output.InternalWrappedEvent) []*output.ResultEvent
GetCompiledOperators() []*operators.Operators
}
```
Many of these methods are similar across protocols while some are very protocol specific.
A brief overview of the methods is provided below -
- **Compile** - Compiles the request with provided options.
- **Requests** - Returns total requests made.
- **GetID** - Returns any ID for the request
- **Match** - Used to perform matching for patterns using matchers
- **Extract** - Used to perform extraction for patterns using extractors
- **ExecuteWithResults** - Request execution function for input.
- **MakeResultEventItem** - Creates a single result event for the intermediate `InternalWrappedEvent` output structure.
- **MakeResultEvent** - Returns a slice of results based on an `InternalWrappedEvent` internal output event.
- **GetCompiledOperators** - Returns the compiled operators for the request.
`MakeDefaultResultEvent` function can be used as a default for `MakeResultEvent` function when no protocol-specific features need to be implemented for result generation.
For reference protocol requests implementations, one can look at the below packages -
1. [pkg/protocols/http](./pkg/protocols/http)
2. [pkg/protocols/dns](./pkg/protocols/dns)
3. [pkg/protocols/network](./pkg/protocols/network)
### Executer
All these different requests interfaces are converted to an Executer which is also an interface defined in `pkg/protocols` which is used during final execution of the template.
```go
// Executer is an interface implemented any protocol based request executer.
type Executer interface {
Compile() error
Requests() int
Execute(input string) (bool, error)
ExecuteWithResults(input string, callback OutputEventCallback) error
}
```
The `ExecuteWithResults` function accepts a callback, which gets provided with results during execution in form of `*output.InternalWrappedEvent` structure.
The default executer is provided in `pkg/protocols/common/executer` . It takes a list of Requests and relevant `ExecuterOptions` and implements the Executer interface required for template execution. The executer during Template compilation process is created from this package and used as-is.
A different executer is the Clustered Requests executer which implements the Nuclei Request clustering functionality in `pkg/templates` We have a single HTTP request in cases where multiple templates can be clustered and multiple operator lists to match/extract. The first HTTP request is executed while all the template matcher/extractor are evaluated separately.
For Workflow execution, a separate RunWorkflow function is used which executes the workflow independently of the template execution.
With this basic premise set, we can now start exploring the current runner implementation which will also walk us through the architecture of nuclei.
## internal/runner
### Template loading
The first process after all CLI specific initialisation is the loading of template/workflow paths that the user wants to run. This is done by the packages described below.
#### pkg/catalog
This package is used to get paths using mixed syntax. It takes a template directory and performs resolving for template paths both from provided template and current user directory.
The syntax is very versatile and can include filenames, glob patterns, directories, absolute paths, and relative-paths.
Next step is the initialisation of the reporting modules which is handled in `pkg/reporting`.
#### pkg/reporting
Reporting module contains exporters and trackers as well as a module for deduplication and a module for result formatting.
Exporters and Trackers are interfaces defined in pkg/reporting.
```go
// Tracker is an interface implemented by an issue tracker
type Tracker interface {
CreateIssue(event *output.ResultEvent) error
}
// Exporter is an interface implemented by an issue exporter
type Exporter interface {
Close() error
Export(event *output.ResultEvent) error
}
```
Exporters include `Elasticsearch`, `markdown`, `sarif` . Trackers include `GitHub`, `GitLab` and `Jira`.
Each exporter and trackers implement their own configuration in YAML format and are very modular in nature, so adding new ones is easy.
After reading all the inputs from various sources and initialisation other miscellaneous options, the next bit is the output writing which is done using `pkg/output` module.
#### pkg/output
Output package implements the output writing functionality for Nuclei.
Output Writer implements the Writer interface which is called each time a result is found for nuclei.
```go
// Writer is an interface which writes output to somewhere for nuclei events.
type Writer interface {
Close()
Colorizer() aurora.Aurora
Write(*ResultEvent) error
Request(templateID, url, requestType string, err error)
}
```
ResultEvent structure is passed to the Nuclei Output Writer which contains the entire detail of a found result. Various intermediary types like `InternalWrappedEvent` and `InternalEvent` are used throughout nuclei protocols and matchers to describe results in various stages of execution.
Interactsh is also initialised if it is not explicitly disabled.
#### pkg/protocols/common/interactsh
Interactsh module is used to provide automatic Out-of-Band vulnerability identification in Nuclei.
It uses two LRU caches, one for storing interactions for request URLs and one for storing requests for interaction URL. These both caches are used to correlated requests received to the Interactsh OOB server and Nuclei Instance. [Interactsh Client](https://github.com/projectdiscovery/interactsh/pkg/client) package does most of the heavy lifting of this module.
Polling for interactions and server registration only starts when a template uses the interactsh module and is executed by nuclei. After that no registration is required for the entire run.
### RunEnumeration
Next we arrive in the `RunEnumeration` function of the runner.
`HostErrorsCache` is initialised which is used throughout the run of Nuclei enumeration to keep track of errors per host and skip further requests if the errors are greater than the provided threshold. The functionality for the error tracking cache is defined in [hosterrorscache.go](https://github.com/projectdiscovery/nuclei/blob/main/pkg/protocols/common/hosterrorscache/hosterrorscache.go) and is pretty simplistic in nature.
Next the `WorkflowLoader` is initialised which used to load workflows. It exists in `pkg/parsers/workflow_loader.go`
The loader is initialised moving forward which is responsible for Using Catalog, Passed Tags, Filters, Paths, etc. to return compiled `Templates` and `Workflows`.
#### pkg/catalog/loader
First the input passed by the user as paths is normalised to absolute paths which is done by the `pkg/catalog` module. Next the path filter module is used to remove the excluded template/workflows paths.
`pkg/parsers` module's `LoadTemplate`,`LoadWorkflow` functions are used to check if the templates pass the validation + are not excluded via tags/severity/etc. filters. If all checks are passed, then the template/workflow is parsed and returned in a compiled form by the `pkg/templates`'s `Parse` function.
`Parse` function performs compilation of all the requests in a template + creates Executers from them returning a runnable Template/Workflow structure.
Clustering module comes in next whose job is to cluster identical HTTP GET requests together (as a lot of the templates perform the same get requests many times, it's a good way to save many requests on large scans with lots of templates).
### pkg/operators
Operators package implements all the matching and extracting logic of Nuclei.
```go
// Operators contain the operators that can be applied on protocols
type Operators struct {
Matchers []*matchers.Matcher
Extractors []*extractors.Extractor
MatchersCondition string
}
```
A protocol only needs to embed the `operators.Operators` type shown above, and it can utilise all the matching/extracting functionality of nuclei.
```go
// MatchFunc performs matching operation for a matcher on model and returns true or false.
type MatchFunc func(data map[string]interface{}, matcher *matchers.Matcher) (bool, []string)
// ExtractFunc performs extracting operation for an extractor on model and returns true or false.
type ExtractFunc func(data map[string]interface{}, matcher *extractors.Extractor) map[string]struct{}
// Execute executes the operators on data and returns a result structure
func (operators *Operators) Execute(data map[string]interface{}, match MatchFunc, extract ExtractFunc, isDebug bool) (*Result, bool)
```
The core of this process is the Execute function which takes an input dictionary as well as a Match and Extract function and return a `Result` structure which is used later during nuclei execution to check for results.
```go
// Result is a result structure created from operators running on data.
type Result struct {
Matched bool
Extracted bool
Matches map[string][]string
Extracts map[string][]string
OutputExtracts []string
DynamicValues map[string]interface{}
PayloadValues map[string]interface{}
}
```
The internal logics for matching and extracting for things like words, regexes, jq, paths, etc. is specified in `pkg/operators/matchers`, `pkg/operators/extractors`. Those packages should be investigated for further look into the topic.
### Template Execution
`pkg/core` provides the engine mechanism which runs the templates/workflows on inputs. It exposes an `Execute` function which does the task of execution while also doing template clustering. The clustering can also be disabled optionally by the user.
An example of using the core engine is provided below.
```go
engine := core.New(r.options)
engine.SetExecuterOptions(executerOpts)
results := engine.ExecuteWithOpts(finalTemplates, r.hmapInputProvider, true)
```
### Adding a New Protocol
Protocols form the core of Nuclei Engine. All the request types like `http`, `dns`, etc. are implemented in form of protocol requests.
A protocol must implement the `Protocol` and `Request` interfaces described above in `pkg/protocols`. We'll take the example of an existing protocol implementation - websocket for this short reference around Nuclei internals.
The code for the websocket protocol is contained in `pkg/protocols/others/websocket`.
Below a high level skeleton of the websocket implementation is provided with all the important parts present.
```go
package websocket
// Request is a request for the Websocket protocol
type Request struct {
// Operators for the current request go here.
operators.Operators `yaml:",inline,omitempty"`
CompiledOperators *operators.Operators `yaml:"-"`
// description: |
// Address contains address for the request
Address string `yaml:"address,omitempty" jsonschema:"title=address for the websocket request,description=Address contains address for the request"`
// declarations here
}
// Compile compiles the request generators preparing any requests possible.
func (r *Request) Compile(options *protocols.ExecuterOptions) error {
r.options = options
// request compilation here as well as client creation
if len(r.Matchers) > 0 || len(r.Extractors) > 0 {
compiled := &r.Operators
if err := compiled.Compile(); err != nil {
return errors.Wrap(err, "could not compile operators")
}
r.CompiledOperators = compiled
}
return nil
}
// Requests returns the total number of requests the rule will perform
func (r *Request) Requests() int {
if r.generator != nil {
return r.generator.NewIterator().Total()
}
return 1
}
// GetID returns the ID for the request if any.
func (r *Request) GetID() string {
return ""
}
// ExecuteWithResults executes the protocol requests and returns results instead of writing them.
func (r *Request) ExecuteWithResults(input string, dynamicValues, previous output.InternalEvent, callback protocols.OutputEventCallback) error {
// payloads init here
if err := r.executeRequestWithPayloads(input, hostname, value, previous, callback); err != nil {
return err
}
return nil
}
// ExecuteWithResults executes the protocol requests and returns results instead of writing them.
func (r *Request) executeRequestWithPayloads(input, hostname string, dynamicValues, previous output.InternalEvent, callback protocols.OutputEventCallback) error {
header := http.Header{}
// make the actual request here after setting all options
event := eventcreator.CreateEventWithAdditionalOptions(r, data, r.options.Options.Debug || r.options.Options.DebugResponse, func(internalWrappedEvent *output.InternalWrappedEvent) {
internalWrappedEvent.OperatorsResult.PayloadValues = payloadValues
})
if r.options.Options.Debug || r.options.Options.DebugResponse {
responseOutput := responseBuilder.String()
gologger.Debug().Msgf("[%s] Dumped Websocket response for %s", r.options.TemplateID, input)
gologger.Print().Msgf("%s", responsehighlighter.Highlight(event.OperatorsResult, responseOutput, r.options.Options.NoColor))
}
callback(event)
return nil
}
func (r *Request) MakeResultEventItem(wrapped *output.InternalWrappedEvent) *output.ResultEvent {
data := &output.ResultEvent{
TemplateID: types.ToString(r.options.TemplateID),
TemplatePath: types.ToString(r.options.TemplatePath),
// ... setting more values for result event
}
return data
}
// Match performs matching operation for a matcher on model and returns:
// true and a list of matched snippets if the matcher type is supports it
// otherwise false and an empty string slice
func (r *Request) Match(data map[string]interface{}, matcher *matchers.Matcher) (bool, []string) {
return protocols.MakeDefaultMatchFunc(data, matcher)
}
// Extract performs extracting operation for an extractor on model and returns true or false.
func (r *Request) Extract(data map[string]interface{}, matcher *extractors.Extractor) map[string]struct{} {
return protocols.MakeDefaultExtractFunc(data, matcher)
}
// MakeResultEvent creates a result event from internal wrapped event
func (r *Request) MakeResultEvent(wrapped *output.InternalWrappedEvent) []*output.ResultEvent {
return protocols.MakeDefaultResultEvent(r, wrapped)
}
// GetCompiledOperators returns a list of the compiled operators
func (r *Request) GetCompiledOperators() []*operators.Operators {
return []*operators.Operators{r.CompiledOperators}
}
// Type returns the type of the protocol request
func (r *Request) Type() templateTypes.ProtocolType {
return templateTypes.WebsocketProtocol
}
```
Almost all of these protocols have boilerplate functions for which default implementations have been provided in the `providers` package. Examples are the implementation of `Match`, `Extract`, `MakeResultEvent`, `GetCompiledOperators`, etc. which are almost same throughout Nuclei protocols code. It is enough to copy-paste them unless customization is required.
`eventcreator` package offers `CreateEventWithAdditionalOptions` function which can be used to create result events after doing request execution.
Step by step description of how to add a new protocol to Nuclei -
1. Add the protocol implementation in `pkg/protocols` directory. If it's a small protocol with fewer options, considering adding it to the `pkg/protocols/others` directory. Add the enum for the new protocol to `pkg/templates/types/types.go`.
2. Add the protocol request structure to the `Template` structure fields. This is done in `pkg/templates/templates.go` with the corresponding import line.
```go
import (
...
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/others/websocket"
)
// Template is a YAML input file which defines all the requests and
// other metadata for a template.
type Template struct {
...
// description: |
// Websocket contains the Websocket request to make in the template.
RequestsWebsocket []*websocket.Request `yaml:"websocket,omitempty" json:"websocket,omitempty" jsonschema:"title=websocket requests to make,description=Websocket requests to make for the template"`
...
}
```
Also add the protocol case to the `Type` function as well as the `TemplateTypes` array in the same `templates.go` file.
```go
// TemplateTypes is a list of accepted template types
var TemplateTypes = []string{
...
"websocket",
}
// Type returns the type of the template
func (t *Template) Type() templateTypes.ProtocolType {
...
case len(t.RequestsWebsocket) > 0:
return templateTypes.WebsocketProtocol
default:
return ""
}
}
```
3. Add the protocol request to the `Requests` function and `compileProtocolRequests` function in the `compile.go` file in same directory.
```go
// Requests return the total request count for the template
func (template *Template) Requests() int {
return len(template.RequestsDNS) +
...
len(template.RequestsSSL) +
len(template.RequestsWebsocket)
}
// compileProtocolRequests compiles all the protocol requests for the template
func (template *Template) compileProtocolRequests(options protocols.ExecuterOptions) error {
...
case len(template.RequestsWebsocket) > 0:
requests = template.convertRequestToProtocolsRequest(template.RequestsWebsocket)
}
template.Executer = executer.NewExecuter(requests, &options)
return nil
}
```
That's it, you've added a new protocol to Nuclei. The next good step would be to write integration tests which are described in `integration-tests` and `cmd/integration-tests` directories.
## Profiling and Tracing
To analyze Nuclei's performance and resource usage, you can generate CPU & memory profiles and trace files using the `-profile-mem` flag:
```bash
nuclei -t nuclei-templates/ -u https://example.com -profile-mem=nuclei-$(git describe --tags)
```
This command creates three files:
* `nuclei.cpu`: CPU profile
* `nuclei.mem`: Memory (heap) profile
* `nuclei.trace`: Execution trace
### Analyzing the CPU/Memory Profiles
* View the profile in the terminal:
```bash
go tool pprof nuclei.{cpu,mem}
```
* Display overall CPU time for processing $$N$$ targets:
```
go tool pprof -top nuclei.cpu | grep "Total samples"
```
* Display top memory consumers:
```bash
go tool pprof -top nuclei.mem | grep "$(go list -m)" | head -10
```
* Visualize the profile in a web browser:
```bash
go tool pprof -http=:$(shuf -i 1000-99999 -n 1) nuclei.{cpu,mem}
```
### Analyzing the Trace File
To examine the execution trace:
```bash
go tool trace nuclei.trace
```
These tools help identify performance bottlenecks and memory leaks, allowing for targeted optimizations of Nuclei's codebase.
## Project Structure
- [pkg/reporting](./pkg/reporting) - Reporting modules for nuclei.
- [pkg/reporting/exporters/sarif](./pkg/reporting/exporters/sarif) - Sarif Result Exporter
- [pkg/reporting/exporters/markdown](./pkg/reporting/exporters/markdown) - Markdown Result Exporter
- [pkg/reporting/exporters/es](./pkg/reporting/exporters/es) - Elasticsearch Result Exporter
- [pkg/reporting/dedupe](./pkg/reporting/dedupe) - Dedupe module for Results
- [pkg/reporting/trackers/gitlab](./pkg/reporting/trackers/gitlab) - GitLab Issue Tracker Exporter
- [pkg/reporting/trackers/jira](./pkg/reporting/trackers/jira) - Jira Issue Tracker Exporter
- [pkg/reporting/trackers/github](./pkg/reporting/trackers/github) - GitHub Issue Tracker Exporter
- [pkg/reporting/format](./pkg/reporting/format) - Result Formatting Functions
- [pkg/parsers](./pkg/parsers) - Implements template as well as workflow loader for initial template discovery, validation and - loading.
- [pkg/types](./pkg/types) - Contains CLI options as well as misc helper functions.
- [pkg/progress](./pkg/progress) - Progress tracking
- [pkg/operators](./pkg/operators) - Operators for Nuclei
- [pkg/operators/common/dsl](./pkg/operators/common/dsl) - DSL functions for Nuclei YAML Syntax
- [pkg/operators/matchers](./pkg/operators/matchers) - Matchers implementation
- [pkg/operators/extractors](./pkg/operators/extractors) - Extractors implementation
- [pkg/catalog](./pkg/catalog) - Template loading from disk helpers
- [pkg/catalog/config](./pkg/catalog/config) - Internal configuration management
- [pkg/catalog/loader](./pkg/catalog/loader) - Implements loading and validation of templates and workflows.
- [pkg/catalog/loader/filter](./pkg/catalog/loader/filter) - Filter filters templates based on tags and paths
- [pkg/output](./pkg/output) - Output module for nuclei
- [pkg/workflows](./pkg/workflows) - Workflow execution logic + declarations
- [pkg/utils](./pkg/utils) - Utility functions
- [pkg/model](./pkg/model) - Template Info + misc
- [pkg/templates](./pkg/templates) - Templates core starting point
- [pkg/templates/cache](./pkg/templates/cache) - Templates cache
- [pkg/protocols](./pkg/protocols) - Protocol Specification
- [pkg/protocols/file](./pkg/protocols/file) - File protocol
- [pkg/protocols/network](./pkg/protocols/network) - Network protocol
- [pkg/protocols/common/expressions](./pkg/protocols/common/expressions) - Expression evaluation + Templating Support
- [pkg/protocols/common/interactsh](./pkg/protocols/common/interactsh) - Interactsh integration
- [pkg/protocols/common/generators](./pkg/protocols/common/generators) - Payload support for Requests (Sniper, etc.)
- [pkg/protocols/common/executer](./pkg/protocols/common/executer) - Default Template Executer
- [pkg/protocols/common/replacer](./pkg/protocols/common/replacer) - Template replacement helpers
- [pkg/protocols/common/helpers/eventcreator](./pkg/protocols/common/helpers/eventcreator) - Result event creator
- [pkg/protocols/common/helpers/responsehighlighter](./pkg/protocols/common/helpers/responsehighlighter) - Debug response highlighter
- [pkg/protocols/common/helpers/deserialization](./pkg/protocols/common/helpers/deserialization) - Deserialization helper functions
- [pkg/protocols/common/hosterrorscache](./pkg/protocols/common/hosterrorscache) - Host errors cache for tracking erroring hosts
- [pkg/protocols/offlinehttp](./pkg/protocols/offlinehttp) - Offline http protocol
- [pkg/protocols/http](./pkg/protocols/http) - HTTP protocol
- [pkg/protocols/http/race](./pkg/protocols/http/race) - HTTP Race Module
- [pkg/protocols/http/raw](./pkg/protocols/http/raw) - HTTP Raw Request Support
- [pkg/protocols/headless](./pkg/protocols/headless) - Headless Module
- [pkg/protocols/headless/engine](./pkg/protocols/headless/engine) - Internal Headless implementation
- [pkg/protocols/dns](./pkg/protocols/dns) - DNS protocol
- [pkg/projectfile](./pkg/projectfile) - Project File Implementation
### Notes
1. The matching as well as interim output functionality is a bit complex, we should simplify it a bit as well.
================================================
FILE: Dockerfile
================================================
# Build
FROM golang:1.24-alpine AS builder
RUN apk add build-base
WORKDIR /app
COPY . /app
RUN make verify
RUN make build
# Release
FROM alpine:latest
RUN apk add --no-cache bind-tools chromium ca-certificates
COPY --from=builder /app/bin/nuclei /usr/local/bin/
ENTRYPOINT ["nuclei"]
================================================
FILE: Dockerfile.goreleaser
================================================
FROM alpine:latest
LABEL org.opencontainers.image.authors="ProjectDiscovery"
LABEL org.opencontainers.image.description="Nuclei is a fast, customizable vulnerability scanner powered by the global security community and built on a simple YAML-based DSL, enabling collaboration to tackle trending vulnerabilities on the internet. It helps you find vulnerabilities in your applications, APIs, networks, DNS, and cloud configurations."
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.title="nuclei"
LABEL org.opencontainers.image.url="https://github.com/projectdiscovery/nuclei"
RUN apk add --no-cache bind-tools chromium ca-certificates
COPY nuclei /usr/local/bin/
ENTRYPOINT ["nuclei"]
================================================
FILE: LICENSE.md
================================================
MIT License
Copyright (c) 2025 ProjectDiscovery, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: Makefile
================================================
# Go parameters
GOCMD := go
GOBUILD := $(GOCMD) build
GOBUILD_OUTPUT :=
GOBUILD_PACKAGES :=
GOBUILD_ADDITIONAL_ARGS :=
GOMOD := $(GOCMD) mod
GOTEST := $(GOCMD) test
GOFLAGS := -v
# This should be disabled if the binary uses pprof
LDFLAGS := -s -w
ifneq ($(shell go env GOOS),darwin)
LDFLAGS += -extldflags "-static"
endif
.PHONY: all build build-stats clean devtools-all devtools-bindgen devtools-scrapefuncs
.PHONY: devtools-tsgen docs docgen dsl-docs functional fuzzplayground go-build lint lint-strict syntax-docs
.PHONY: integration jsupdate-all jsupdate-bindgen jsupdate-tsgen memogen scan-charts test test-with-lint
.PHONY: tidy ts verify download vet template-validate
all: build
clean:
rm -f '${GOBUILD_OUTPUT}' 2>/dev/null
go-build: clean
go-build:
CGO_ENABLED=0 $(GOBUILD) -trimpath $(GOFLAGS) -ldflags '${LDFLAGS}' $(GOBUILD_ADDITIONAL_ARGS) \
-o '${GOBUILD_OUTPUT}' $(GOBUILD_PACKAGES)
build: GOFLAGS = -v -pgo=auto
build: GOBUILD_OUTPUT = ./bin/nuclei
build: GOBUILD_PACKAGES = cmd/nuclei/main.go
build: go-build
build-test: GOFLAGS = -v -pgo=auto
build-test: GOBUILD_OUTPUT = ./bin/nuclei.test
build-test: GOBUILD_PACKAGES = ./cmd/nuclei/
build-test: clean
build-test:
CGO_ENABLED=0 $(GOCMD) test -c -trimpath $(GOFLAGS) -ldflags '${LDFLAGS}' $(GOBUILD_ADDITIONAL_ARGS) \
-o '${GOBUILD_OUTPUT}' ${GOBUILD_PACKAGES}
build-stats: GOBUILD_OUTPUT = ./bin/nuclei-stats
build-stats: GOBUILD_PACKAGES = cmd/nuclei/main.go
build-stats: GOBUILD_ADDITIONAL_ARGS = -tags=stats
build-stats: go-build
scan-charts: GOBUILD_OUTPUT = ./bin/scan-charts
scan-charts: GOBUILD_PACKAGES = cmd/scan-charts/main.go
scan-charts: go-build
template-signer: GOBUILD_OUTPUT = ./bin/template-signer
template-signer: GOBUILD_PACKAGES = cmd/tools/signer/main.go
template-signer: go-build
docgen: GOBUILD_OUTPUT = ./bin/docgen
docgen: GOBUILD_PACKAGES = cmd/docgen/docgen.go
docgen: bin = dstdocgen
docgen:
@if ! which $(bin) >/dev/null; then \
echo "Command $(bin) not found! Installing..."; \
go install -v github.com/projectdiscovery/yamldoc-go/cmd/docgen/$(bin)@latest; \
fi
# TODO: FIX THIS PANIC
$(GOCMD) generate pkg/templates/templates.go
$(GOBUILD) -o "${GOBUILD_OUTPUT}" $(GOBUILD_PACKAGES)
docs: docgen
docs:
./bin/docgen docs.md nuclei-jsonschema.json
syntax-docs: docgen
syntax-docs:
./bin/docgen SYNTAX-REFERENCE.md nuclei-jsonschema.json
test: GOFLAGS = -race -v -timeout 30m -count 1
test:
$(GOTEST) $(GOFLAGS) ./...
integration:
cd integration_tests; bash run.sh
functional:
cd cmd/functional-test; bash run.sh
tidy:
$(GOMOD) tidy
download:
$(GOMOD) download
verify: download
$(GOMOD) verify
vet: verify
$(GOCMD) vet ./...
devtools-bindgen: GOBUILD_OUTPUT = ./bin/bindgen
devtools-bindgen: GOBUILD_PACKAGES = pkg/js/devtools/bindgen/cmd/bindgen/main.go
devtools-bindgen: go-build
devtools-tsgen: GOBUILD_OUTPUT = ./bin/tsgen
devtools-tsgen: GOBUILD_PACKAGES = pkg/js/devtools/tsgen/cmd/tsgen/main.go
devtools-tsgen: go-build
devtools-scrapefuncs: GOBUILD_OUTPUT = ./bin/scrapefuncs
devtools-scrapefuncs: GOBUILD_PACKAGES = pkg/js/devtools/scrapefuncs/main.go
devtools-scrapefuncs: go-build
devtools-all: devtools-bindgen devtools-tsgen devtools-scrapefuncs
jsupdate-bindgen: GOBUILD_OUTPUT = ./bin/bindgen
jsupdate-bindgen: GOBUILD_PACKAGES = pkg/js/devtools/bindgen/cmd/bindgen/main.go
jsupdate-bindgen: go-build
jsupdate-bindgen:
./$(GOBUILD_OUTPUT) -dir pkg/js/libs -out pkg/js/generated
jsupdate-tsgen: GOBUILD_OUTPUT = ./bin/tsgen
jsupdate-tsgen: GOBUILD_PACKAGES = pkg/js/devtools/tsgen/cmd/tsgen/main.go
jsupdate-tsgen: go-build
jsupdate-tsgen:
./$(GOBUILD_OUTPUT) -dir pkg/js/libs -out pkg/js/generated/ts
jsupdate-all: jsupdate-bindgen jsupdate-tsgen
ts: jsupdate-tsgen
fuzzplayground: GOBUILD_OUTPUT = ./bin/fuzzplayground
fuzzplayground: GOBUILD_PACKAGES = cmd/tools/fuzzplayground/main.go
fuzzplayground: LDFLAGS = -s -w
fuzzplayground: go-build
memogen: GOBUILD_OUTPUT = ./bin/memogen
memogen: GOBUILD_PACKAGES = cmd/memogen/memogen.go
memogen: go-build
memogen:
./$(GOBUILD_OUTPUT) -src pkg/js/libs -tpl cmd/memogen/function.tpl
dsl-docs: GOBUILD_OUTPUT = ./bin/scrapefuncs
dsl-docs: GOBUILD_PACKAGES = pkg/js/devtools/scrapefuncs/main.go
dsl-docs:
./$(GOBUILD_OUTPUT) -out dsl.md
template-validate: build
template-validate:
./bin/nuclei -ut
./bin/nuclei -validate \
-et http/technologies \
-t dns \
-t ssl \
-t network \
-t http/exposures \
-ept code
./bin/nuclei -validate \
-w workflows \
-et http/technologies \
-ept code
================================================
FILE: README.md
================================================

<div align="center">
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README.md">`English`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_CN.md">`中文`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_KR.md">`Korean`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ID.md">`Indonesia`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ES.md">`Spanish`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_JP.md">`日本語`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_PT-BR.md">`Portuguese`</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_TR.md">`Türkçe`</a>
</div>
<p align="center">
<a href="https://docs.projectdiscovery.io/tools/nuclei/overview?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme"><img src="https://img.shields.io/badge/Documentation-%23000000.svg?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1ib29rLW9wZW4iPjxwYXRoIGQ9Ik0xMiA3djE0Ii8+PHBhdGggZD0iTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiIvPjwvc3ZnPg==&logoColor=white"></a>
<a href="https://github.com/projectdiscovery/nuclei-templates"><img src="https://img.shields.io/badge/Templates Library-%23000000.svg?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXNoaWVsZCI+PHBhdGggZD0iTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6Ii8+PC9zdmc+&logoColor=white"></a>
<a href="https://discord.gg/projectdiscovery?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme"><img src="https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge&logo=discord&logoColor=white"></a>
<hr>
</p>
<br>
**Nuclei is a modern, high-performance vulnerability scanner that leverages simple YAML-based templates. It empowers you to design custom vulnerability detection scenarios that mimic real-world conditions, leading to zero false positives.**
- Simple YAML format for creating and customizing vulnerability templates.
- Contributed by thousands of security professionals to tackle trending vulnerabilities.
- Reduce false positives by simulating real-world steps to verify a vulnerability.
- Ultra-fast parallel scan processing and request clustering.
- Integrate into CI/CD pipelines for vulnerability detection and regression testing.
- Supports multiple protocols like TCP, DNS, HTTP, SSL, WHOIS, JavaScript, Code and more.
- Integrate with Jira, Splunk, GitHub, Elastic, GitLab.
<br>
<br>
## Table of Contents
- [**`Get Started`**](#get-started)
- [_`1. Nuclei CLI`_](#1-nuclei-cli)
- [_`2. Pro and Enterprise Editions`_](#2-pro-and-enterprise-editions)
- [**`Documentation`**](#documentation)
- [_`Command Line Flags`_](#command-line-flags)
- [_`Single target scan`_](#single-target-scan)
- [_`Scanning multiple targets`_](#scanning-multiple-targets)
- [_`Network scan`_](#network-scan)
- [_`Scanning with your custom template`_](#scanning-with-your-custom-template)
- [_`Connect Nuclei to ProjectDiscovery_`_](#connect-nuclei-to-projectdiscovery)
- [**`Nuclei Templates, Community and Rewards`**](#nuclei-templates-community-and-rewards-) 💎
- [**`Our Mission`**](#our-mission)
- [**`Contributors`**](#contributors-heart) ❤
- [**`License`**](#license)
<br>
<br>
## Get Started
### **1. Nuclei CLI**
_Install Nuclei on your machine. Get started by following the installation guide [**`here`**](https://docs.projectdiscovery.io/tools/nuclei/install?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme). Additionally, We provide [**`a free cloud tier`**](https://cloud.projectdiscovery.io/sign-up) and comes with a generous monthly free limits:_
- Store and visualize your vulnerability findings
- Write and manage your nuclei templates
- Access latest nuclei templates
- Discover and store your targets
> [!Important]
> |**This project is in active development**. Expect breaking changes with releases. Review the release changelog before updating.|
> |:--------------------------------|
> | This project is primarily built to be used as a standalone CLI tool. **Running nuclei as a service may pose security risks.** It's recommended to use with caution and additional security measures. |
<br>
### **2. Pro and Enterprise Editions**
_For security teams and enterprises, we provide a cloud-hosted service built on top of Nuclei OSS, fine-tuned to help you continuously run vulnerability scans at scale with your team and existing workflows:_
- 50x faster scans
- Large scale scanning with high accuracy
- Integrations with cloud services (AWS, GCP, Azure, Cloudflare, Fastly, Terraform, Kubernetes)
- Jira, Slack, Linear, APIs and Webhooks
- Executive and compliance reporting
- Plus: Real-time scanning, SAML SSO, SOC 2 compliant platform (with EU and US hosting options), shared team workspaces, and more
- We're constantly [**`adding new features`**](https://feedback.projectdiscovery.io/changelog)!
- **Ideal for:** Pentesters, security teams, and enterprises
[**`Sign up to Pro`**](https://projectdiscovery.io/pricing?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme) or [**`Talk to our team`**](https://projectdiscovery.io/request-demo?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme) if you have large organization and complex requirements.
<br>
<br>
## Documentation
Browse the full Nuclei [**`documentation here`**](https://docs.projectdiscovery.io/tools/nuclei/running). If you’re new to Nuclei, check out our [**`foundational YouTube series`**](https://www.youtube.com/playlist?list=PLZRbR9aMzTTpItEdeNSulo8bYsvil80Rl).
<div align="center">
<a href="https://www.youtube.com/watch?v=b5qMyQvL1ZA&list=PLZRbR9aMzTTpItEdeNSulo8bYsvil80Rl&utm_source=github&utm_medium=web&utm_campaign=nuclei_readme" target="_blank"><img src="/static/nuclei-getting-started.png" width="350px"></a> <a href="https://www.youtube.com/watch?v=nFXygQdtjyw&utm_source=github&utm_medium=web&utm_campaign=nuclei_readme" target="_blank"><img src="/static/nuclei-write-your-first-template.png" width="350px"></a>
</div>
<br>
### Installation
`nuclei` requires **go >= 1.24.2** to install successfully. Run the following command to get the repo:
```sh
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```
To learn more about installing nuclei, see `https://docs.projectdiscovery.io/tools/nuclei/install`.
### Command Line Flags
To display all the flags for the tool:
```sh
nuclei -h
```
<details>
<summary>Expand full help flags</summary>
```yaml
Nuclei is a fast, template based vulnerability scanner focusing
on extensive configurability, massive extensibility and ease of use.
Usage:
./nuclei [flags]
Flags:
TARGET:
-u, -target string[] target URLs/hosts to scan
-l, -list string path to file containing a list of target URLs/hosts to scan (one per line)
-eh, -exclude-hosts string[] hosts to exclude to scan from the input list (ip, cidr, hostname)
-resume string resume scan from and save to specified file (clustering will be disabled)
-sa, -scan-all-ips scan all the IP's associated with dns record
-iv, -ip-version string[] IP version to scan of hostname (4,6) - (default 4)
TARGET-FORMAT:
-im, -input-mode string mode of input file (list, burp, jsonl, yaml, openapi, swagger) (default "list")
-ro, -required-only use only required fields in input format when generating requests
-sfv, -skip-format-validation skip format validation (like missing vars) when parsing input file
TEMPLATES:
-nt, -new-templates run only new templates added in latest nuclei-templates release
-ntv, -new-templates-version string[] run new templates added in specific version
-as, -automatic-scan automatic 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 string generate 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)
-validate validate the passed templates to nuclei
-nss, -no-strict-syntax disable strict syntax check on templates
-td, -template-display displays the templates content
-tl list all templates matching current filters
-tgl list all available tags
-sign signs the templates with the private key defined in NUCLEI_SIGNATURE_PRIVATE_KEY env variable
-code enable loading code protocol-based templates
-dut, -disable-unsigned-templates disable running unsigned templates or templates with mismatched signature
-esc, -enable-self-contained enable loading self-contained templates
-egm, -enable-global-matchers enable loading global matchers templates
-file enable loading file templates
FILTERING:
-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:
-o, -output string output file to write found issues/vulnerabilities
-sresp, -store-resp store all request/response passed through nuclei to output directory
-srd, -store-resp-dir string store all request/response passed through nuclei to custom directory (default "output")
-silent display findings only
-nc, -no-color disable output content coloring (ANSI escape codes)
-j, -jsonl write output in JSONL(ines) format
-irr, -include-rr -omit-raw include request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only) [DEPRECATED use -omit-raw] (default true)
-or, -omit-raw omit request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only)
-ot, -omit-template omit encoded template in the JSON, JSONL output
-nm, -no-meta disable printing result metadata in cli output
-ts, -timestamp enables printing timestamp in cli output
-rdb, -report-db string nuclei reporting database (always use this to persist report data)
-ms, -matcher-status display match failure status
-me, -markdown-export string directory to export results in markdown format
-se, -sarif-export string file to export results in SARIF format
-je, -json-export string file to export results in JSON format
-jle, -jsonl-export string file to export results in JSONL(ine) format
-rd, -redact string[] redact given list of keys from query parameter, request header and body
CONFIGURATIONS:
-config string path to the nuclei configuration file
-tp, -profile string template profile config file to run
-tpl, -profile-list list community template profiles
-fr, -follow-redirects enable following redirects for http templates
-fhr, -follow-host-redirects follow redirects on the same host
-mr, -max-redirects int max number of redirects to follow for http templates (default 10)
-dr, -disable-redirects disable redirects for http templates
-rc, -report-config string nuclei reporting module configuration file
-H, -header string[] custom header/cookie to include in all http request in header:value format (cli, file)
-V, -var value custom vars in key=value format
-r, -resolvers string file containing resolver list for nuclei
-sr, -system-resolvers use system DNS resolving as error fallback
-dc, -disable-clustering disable clustering of requests
-passive enable passive HTTP response processing mode
-fh2, -force-http2 force http2 connection on requests
-ev, -env-vars enable environment variables to be used in template
-cc, -client-cert string client certificate file (PEM-encoded) used for authenticating against scanned hosts
-ck, -client-key string client key file (PEM-encoded) used for authenticating against scanned hosts
-ca, -client-ca string client certificate authority file (PEM-encoded) used for authenticating against scanned hosts
-sml, -show-match-line show match lines for file templates, works with extractors only
-ztls use ztls library with autofallback to standard one for tls13 [Deprecated] autofallback to ztls is enabled by default
-sni string tls sni hostname to use (default: input domain name)
-dka, -dialer-keep-alive value keep-alive duration for network requests.
-lfa, -allow-local-file-access allows file (payload) access anywhere on the system
-lna, -restrict-local-network-access blocks connections to the local / private network
-i, -interface string network interface to use for network scan
-at, -attack-type string type of payload combinations to perform (batteringram,pitchfork,clusterbomb)
-sip, -source-ip string source ip address to use for network scan
-rsr, -response-size-read int max response size to read in bytes
-rss, -response-size-save int max response size to read in bytes (default 1048576)
-reset reset removes all nuclei configuration and data files (including nuclei-templates)
-tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization
-hae, -http-api-endpoint string experimental http api endpoint
INTERACTSH:
-iserver, -interactsh-server string interactsh server url for self-hosted instance (default: oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me)
-itoken, -interactsh-token string authentication token for self-hosted interactsh server
-interactions-cache-size int number of requests to keep in the interactions cache (default 5000)
-interactions-eviction int number of seconds to wait before evicting requests from cache (default 60)
-interactions-poll-duration int number of seconds to wait before each interaction poll request (default 5)
-interactions-cooldown-period int extra time for interaction polling before exiting (default 5)
-ni, -no-interactsh disable interactsh server for OAST testing, exclude OAST based templates
FUZZING:
-ft, -fuzzing-type string overrides fuzzing type set in template (replace, prefix, postfix, infix)
-fm, -fuzzing-mode string overrides fuzzing mode set in template (multiple, single)
-fuzz enable loading fuzzing templates (Deprecated: use -dast instead)
-dast enable / run dast (fuzz) nuclei templates
-dts, -dast-server enable dast server mode (live fuzzing)
-dtr, -dast-report write dast scan report to file
-dtst, -dast-server-token string dast server token (optional)
-dtsa, -dast-server-address string dast server address (default "localhost:9055")
-dfp, -display-fuzz-points display fuzz points in the output for debugging
-fuzz-param-frequency int frequency of uninteresting parameters for fuzzing before skipping (default 10)
-fa, -fuzz-aggression string fuzzing 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:
-uc, -uncover enable 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) (default shodan)
-uf, -uncover-field string uncover fields to return (ip,port,host) (default "ip:port")
-ul, -uncover-limit int uncover results to return (default 100)
-ur, -uncover-ratelimit int override ratelimit of engines with unknown ratelimit (default 60 req/min) (default 60)
RATE-LIMIT:
-rl, -rate-limit int maximum number of requests to send per second (default 150)
-rld, -rate-limit-duration value maximum number of requests to send per second (default 1s)
-rlm, -rate-limit-minute int maximum number of requests to send per minute (DEPRECATED)
-bs, -bulk-size int maximum number of hosts to be analyzed in parallel per template (default 25)
-c, -concurrency int maximum number of templates to be executed in parallel (default 25)
-hbs, -headless-bulk-size int maximum number of headless hosts to be analyzed in parallel per template (default 10)
-headc, -headless-concurrency int maximum number of headless templates to be executed in parallel (default 10)
-jsc, -js-concurrency int maximum number of javascript runtimes to be executed in parallel (default 120)
-pc, -payload-concurrency int max payload concurrency for each template (default 25)
-prc, -probe-concurrency int http probe concurrency with httpx (default 50)
-tlc, -template-loading-concurrency int maximum number of concurrent template loading operations (default 50)
OPTIMIZATIONS:
-timeout int time to wait in seconds before timeout (default 10)
-retries int number of times to retry a failed request (default 1)
-ldp, -leave-default-ports leave default HTTP/HTTPS ports (eg. host:80,host:443)
-mhe, -max-host-error int max 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-mhe disable skipping host from scan based on errors
-project use a project folder to avoid sending same request multiple times
-project-path string set a specific project path (default "/tmp")
-spm, -stop-at-first-match stop processing HTTP requests after the first match (may break template/workflow logic)
-stream stream mode - start elaborating without sorting the input
-ss, -scan-strategy value strategy to use while scanning(auto/host-spray/template-spray) (default auto)
-irt, -input-read-timeout value timeout on input read (default 3m0s)
-nh, -no-httpx disable httpx probing for non-url input
-no-stdin disable stdin processing
HEADLESS:
-headless enable templates that require headless browser support (root user on Linux will disable sandbox)
-page-timeout int seconds to wait for each page in headless mode (default 20)
-sb, -show-browser show the browser on the screen when running templates with headless mode
-ho, -headless-options string[] start headless chrome with additional options
-sc, -system-chrome use local installed Chrome browser instead of nuclei installed
-cdpe, -cdp-endpoint string use remote browser via Chrome DevTools Protocol (CDP) endpoint
-lha, -list-headless-action list available headless actions
DEBUG:
-debug show all requests and responses
-dreq, -debug-req show all sent requests
-dresp, -debug-resp show all received responses
-p, -proxy string[] list of http/socks5 proxy to use (comma separated or file input)
-pi, -proxy-internal proxy all internal requests
-ldf, -list-dsl-function list all supported DSL function signatures
-tlog, -trace-log string file to write sent requests trace log
-elog, -error-log string file to write sent requests error log
-version show nuclei version
-hm, -hang-monitor enable nuclei hang monitoring
-v, -verbose show verbose output
-profile-mem string generate memory (heap) profile & trace files
-vv display templates loaded for scan
-svd, -show-var-dump show variables dump for debugging
-vdl, -var-dump-limit int limit the number of characters displayed in var dump (default 255)
-ep, -enable-pprof enable pprof debugging server
-tv, -templates-version shows the version of the installed nuclei-templates
-hc, -health-check run diagnostic check up
UPDATE:
-up, -update update nuclei engine to the latest released version
-ut, -update-templates update nuclei-templates to latest released version
-ud, -update-template-dir string custom directory to install / update nuclei-templates
-duc, -disable-update-check disable automatic nuclei/templates update check
STATISTICS:
-stats display statistics about the running scan
-sj, -stats-json display statistics in JSONL(ines) format
-si, -stats-interval int number of seconds to wait between showing a statistics update (default 5)
-mp, -metrics-port int port to expose nuclei metrics on (default 9092)
-hps, -http-stats enable http status capturing (experimental)
CLOUD:
-auth configure projectdiscovery cloud (pdcp) api key (default true)
-tid, -team-id string upload scan results to given team id (optional) (default "none")
-cup, -cloud-upload upload scan results to pdcp dashboard [DEPRECATED use -dashboard]
-sid, -scan-id string upload scan results to existing scan id (optional)
-sname, -scan-name string scan name to set (optional)
-pd, -dashboard upload / view nuclei results in projectdiscovery cloud (pdcp) UI dashboard
-pdu, -dashboard-upload string upload / view nuclei results file (jsonl) in projectdiscovery cloud (pdcp) UI dashboard
AUTHENTICATION:
-sf, -secret-file string[] path to config file containing secrets for nuclei authenticated scan
-ps, -prefetch-secrets prefetch secrets from the secrets file
# NOTE: Headers in secrets files preserve exact casing (useful for case-sensitive APIs)
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.projectdiscovery.io/getting-started/running
```
Additional documentation is available at: [**`docs.projectdiscovery.io/getting-started/running`**](https://docs.projectdiscovery.io/getting-started/running?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme)
</details>
### Single target scan
To perform a quick scan on web-application:
```sh
nuclei -target https://example.com
```
### Scanning multiple targets
Nuclei can handle bulk scanning by providing a list of targets. You can use a file containing multiple URLs.
```sh
nuclei -list urls.txt
```
### Network scan
This will scan the entire subnet for network-related issues, such as open ports or misconfigured services.
```sh
nuclei -target 192.168.1.0/24
```
### Scanning with your custom template
To write and use your own template, create a `.yaml` file with specific rules, then use it as follows.
```sh
nuclei -u https://example.com -t /path/to/your-template.yaml
```
### Connect Nuclei to ProjectDiscovery
You can run the scans on your machine and upload the results to the cloud platform for further analysis and remediation.
```sh
nuclei -target https://example.com -dashboard
```
> [!NOTE]
> This feature is absolutely free and does not require any subscription. For a detailed guide, refer to the [**`documentation`**](https://docs.projectdiscovery.io/cloud/scanning/nuclei-scan?utm_source=github&utm_medium=web&utm_campaign=nuclei_readme).
<br>
<br>
## Nuclei Templates, Community and Rewards 💎
[**Nuclei templates**](https://github.com/projectdiscovery/nuclei-templates) are based on the concepts of YAML based template files that define how the requests will be sent and processed. This allows easy extensibility capabilities to nuclei. The templates are written in YAML which specifies a simple human-readable format to quickly define the execution process.
**Try it online with our free AI powered Nuclei Templates Editor by** [**`clicking here`**](https://cloud.projectdiscovery.io/templates).
Nuclei Templates offer a streamlined way to identify and communicate vulnerabilities, combining essential details like severity ratings and detection methods. This open-source, community-developed tool accelerates threat response and is widely recognized in the cybersecurity world. Nuclei templates are actively contributed by thousands of security researchers globally. We run two programs for our contributors: [**`Pioneers`**](https://projectdiscovery.io/pioneers) and [**`💎 bounties`**](https://github.com/projectdiscovery/nuclei-templates/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22%F0%9F%92%8E%20Bounty%22).
<p align="left">
<a href="/static/nuclei-templates-teamcity.png" target="_blank"><img src="/static/nuclei-templates-teamcity.png" width="1200px" alt="Nuclei template example for detecting TeamCity misconfiguration" /></a>
</p>
#### Examples
Visit [**our documentation**](https://docs.projectdiscovery.io/templates/introduction) for use cases and ideas.
| Use case | Nuclei template |
| :----------------------------------- | :------------------------------------------------- |
| Detect known CVEs | **[CVE-2021-44228 (Log4Shell)](https://cloud.projectdiscovery.io/public/CVE-2021-45046)** |
| Identify Out-of-Band vulnerabilities | **[Blind SQL Injection via OOB](https://cloud.projectdiscovery.io/public/CVE-2024-22120)** |
| SQL Injection detection | **[Generic SQL Injection](https://cloud.projectdiscovery.io/public/CVE-2022-34265)** |
| Cross-Site Scripting (XSS) | **[Reflected XSS Detection](https://cloud.projectdiscovery.io/public/CVE-2023-4173)** |
| Default or weak passwords | **[Default Credentials Check](https://cloud.projectdiscovery.io/public/airflow-default-login)** |
| Secret files or data exposure | **[Sensitive File Disclosure](https://cloud.projectdiscovery.io/public/airflow-configuration-exposure)** |
| Identify open redirects | **[Open Redirect Detection](https://cloud.projectdiscovery.io/public/open-redirect)** |
| Detect subdomain takeovers | **[Subdomain Takeover Templates](https://cloud.projectdiscovery.io/public/azure-takeover-detection)** |
| Security misconfigurations | **[Unprotected Jenkins Console](https://cloud.projectdiscovery.io/public/unauthenticated-jenkins)** |
| Weak SSL/TLS configurations | **[SSL Certificate Expiry](https://cloud.projectdiscovery.io/public/expired-ssl)** |
| Misconfigured cloud services | **[Open S3 Bucket Detection](https://cloud.projectdiscovery.io/public/s3-public-read-acp)** |
| Remote code execution vulnerabilities| **[RCE Detection Templates](https://cloud.projectdiscovery.io/public/CVE-2024-29824)** |
| Directory traversal attacks | **[Path Traversal Detection](https://cloud.projectdiscovery.io/public/oracle-fatwire-lfi)** |
| File inclusion vulnerabilities | **[Local/Remote File Inclusion](https://cloud.projectdiscovery.io/public/CVE-2023-6977)** |
<br>
<br>
## Our Mission
Traditional vulnerability scanners were built decades ago. They are closed-source, incredibly slow, and vendor-driven. Today's attackers are mass exploiting newly released CVEs across the internet within days, unlike the years it used to take. This shift requires a completely different approach to tackling trending exploits on the internet.
We built Nuclei to solve this challenge. We made the entire scanning engine framework open and customizable—allowing the global security community to collaborate and tackle the trending attack vectors and vulnerabilities on the internet. Nuclei is now used and contributed by Fortune 500 enterprises, government agencies, universities.
You can participate by contributing to our code, [**`templates library`**](https://github.com/projectdiscovery/nuclei-templates), or [**`joining our team`**](https://projectdiscovery.io/).
<br>
<br>
## Contributors :heart:
Thanks to all the amazing [**`community contributors for sending PRs`**](https://github.com/projectdiscovery/nuclei/graphs/contributors) and keeping this project updated. :heart:
<p align="left">
<a href="https://github.com/Ice3man543"><img src="https://avatars.githubusercontent.com/u/22318055?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/apps/dependabot"><img src="https://avatars.githubusercontent.com/in/29110?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ehsandeep"><img src="https://avatars.githubusercontent.com/u/8293321?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Mzack9999"><img src="https://avatars.githubusercontent.com/u/13421144?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/forgedhallpass"><img src="https://avatars.githubusercontent.com/u/13679401?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/tarunKoyalwar"><img src="https://avatars.githubusercontent.com/u/45962551?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/manuelbua"><img src="https://avatars.githubusercontent.com/u/819314?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/actions-user"><img src="https://avatars.githubusercontent.com/u/65916846?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/dogancanbakir"><img src="https://avatars.githubusercontent.com/u/65292895?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/parrasajad"><img src="https://avatars.githubusercontent.com/u/16835787?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/vzamanillo"><img src="https://avatars.githubusercontent.com/u/10209695?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ShubhamRasal"><img src="https://avatars.githubusercontent.com/u/45902122?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/RamanaReddy0M"><img src="https://avatars.githubusercontent.com/u/90540245?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/LuitelSamikshya"><img src="https://avatars.githubusercontent.com/u/85764322?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/kchason"><img src="https://avatars.githubusercontent.com/u/1111099?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/pmareke"><img src="https://avatars.githubusercontent.com/u/3502075?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/dwisiswant0"><img src="https://avatars.githubusercontent.com/u/25837540?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/xm1k3"><img src="https://avatars.githubusercontent.com/u/73166077?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/5amu"><img src="https://avatars.githubusercontent.com/u/39925709?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ehrishirajsharma"><img src="https://avatars.githubusercontent.com/u/35542790?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/zerodivisi0n"><img src="https://avatars.githubusercontent.com/u/687694?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/geeknik"><img src="https://avatars.githubusercontent.com/u/466878?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/TerminalFi"><img src="https://avatars.githubusercontent.com/u/32599364?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/KaulSe"><img src="https://avatars.githubusercontent.com/u/45340011?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/sullo"><img src="https://avatars.githubusercontent.com/u/1474884?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/wdahlenburg"><img src="https://avatars.githubusercontent.com/u/4451504?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ghost"><img src="https://avatars.githubusercontent.com/u/10137?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Nishan8583"><img src="https://avatars.githubusercontent.com/u/20457968?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jdk2588"><img src="https://avatars.githubusercontent.com/u/985054?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/nothinux"><img src="https://avatars.githubusercontent.com/u/17433202?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/CodFrm"><img src="https://avatars.githubusercontent.com/u/22783163?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/CasperGN"><img src="https://avatars.githubusercontent.com/u/5549643?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ankh2054"><img src="https://avatars.githubusercontent.com/u/6784287?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/revblock"><img src="https://avatars.githubusercontent.com/u/72813848?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/cn-kali-team"><img src="https://avatars.githubusercontent.com/u/30642514?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/EndPositive"><img src="https://avatars.githubusercontent.com/u/25148195?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jimen0"><img src="https://avatars.githubusercontent.com/u/6826244?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/xstevens"><img src="https://avatars.githubusercontent.com/u/69216?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mjkim610"><img src="https://avatars.githubusercontent.com/u/17107206?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/organiccrap"><img src="https://avatars.githubusercontent.com/u/376317?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/lu4nx"><img src="https://avatars.githubusercontent.com/u/3006875?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/souvikhazra1"><img src="https://avatars.githubusercontent.com/u/13842393?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/tovask"><img src="https://avatars.githubusercontent.com/u/22732484?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Marmelatze"><img src="https://avatars.githubusercontent.com/u/199681?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/doug-threatmate"><img src="https://avatars.githubusercontent.com/u/127235272?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/yabeow"><img src="https://avatars.githubusercontent.com/u/21117771?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/olearycrew"><img src="https://avatars.githubusercontent.com/u/6044920?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/gano3s"><img src="https://avatars.githubusercontent.com/u/2551605?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/alizmhdi"><img src="https://avatars.githubusercontent.com/u/79321261?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/hackerpain"><img src="https://avatars.githubusercontent.com/u/61242234?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/lc"><img src="https://avatars.githubusercontent.com/u/19563282?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/savushkin-yauheni"><img src="https://avatars.githubusercontent.com/u/5173352?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/74616e696d"><img src="https://avatars.githubusercontent.com/u/97121933?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/edoardottt"><img src="https://avatars.githubusercontent.com/u/35783570?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/zt2"><img src="https://avatars.githubusercontent.com/u/7644862?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/moonD4rk"><img src="https://avatars.githubusercontent.com/u/24284231?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/wk8"><img src="https://avatars.githubusercontent.com/u/2536231?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mikerott"><img src="https://avatars.githubusercontent.com/u/857712?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/toufik-airane"><img src="https://avatars.githubusercontent.com/u/5610269?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/hktalent"><img src="https://avatars.githubusercontent.com/u/18223385?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jturner"><img src="https://avatars.githubusercontent.com/u/1825202?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/gaby"><img src="https://avatars.githubusercontent.com/u/835733?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/vavkamil"><img src="https://avatars.githubusercontent.com/u/47953210?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/leonjza"><img src="https://avatars.githubusercontent.com/u/1148127?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mionskowski-form3"><img src="https://avatars.githubusercontent.com/u/91873652?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/chenrui333"><img src="https://avatars.githubusercontent.com/u/1580956?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/iamargus95"><img src="https://avatars.githubusercontent.com/u/77744293?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/shashikarsiddharth"><img src="https://avatars.githubusercontent.com/u/60960197?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/trypa11"><img src="https://avatars.githubusercontent.com/u/67585616?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Zeokat"><img src="https://avatars.githubusercontent.com/u/1313154?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/alban-stourbe-wmx"><img src="https://avatars.githubusercontent.com/u/159776828?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/anykno"><img src="https://avatars.githubusercontent.com/u/2528207?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ronaudinho"><img src="https://avatars.githubusercontent.com/u/10264710?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/boy-hack"><img src="https://avatars.githubusercontent.com/u/18695984?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/iuliu8899"><img src="https://avatars.githubusercontent.com/u/31680027?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/debasishbsws"><img src="https://avatars.githubusercontent.com/u/65381620?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/denysvitali-niantic"><img src="https://avatars.githubusercontent.com/u/157139422?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/fail-open"><img src="https://avatars.githubusercontent.com/u/72417455?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Xc1Ym"><img src="https://avatars.githubusercontent.com/u/29765332?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/XTeam-Wing"><img src="https://avatars.githubusercontent.com/u/25416365?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Weltolk"><img src="https://avatars.githubusercontent.com/u/40228052?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/tonghuaroot"><img src="https://avatars.githubusercontent.com/u/23011166?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/praetorian-thendrickson"><img src="https://avatars.githubusercontent.com/u/69640071?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/S0obi"><img src="https://avatars.githubusercontent.com/u/4180104?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/skahn007gl"><img src="https://avatars.githubusercontent.com/u/144735608?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/shouichi"><img src="https://avatars.githubusercontent.com/u/99586?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/seb-elttam"><img src="https://avatars.githubusercontent.com/u/111818823?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/AdallomRoy"><img src="https://avatars.githubusercontent.com/u/4046118?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/rotemreiss"><img src="https://avatars.githubusercontent.com/u/9288082?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/oscarintherocks"><img src="https://avatars.githubusercontent.com/u/1785821?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/xxcdd"><img src="https://avatars.githubusercontent.com/u/42600601?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/chen2aaron"><img src="https://avatars.githubusercontent.com/u/9978183?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/voidz0r"><img src="https://avatars.githubusercontent.com/u/1032286?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/vince-isec"><img src="https://avatars.githubusercontent.com/u/149686094?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/true13"><img src="https://avatars.githubusercontent.com/u/18207552?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/skhalsa-sigsci"><img src="https://avatars.githubusercontent.com/u/68570441?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ShuBo6"><img src="https://avatars.githubusercontent.com/u/41125338?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/seeyarh"><img src="https://avatars.githubusercontent.com/u/16869800?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/securibee"><img src="https://avatars.githubusercontent.com/u/51520913?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/sduc"><img src="https://avatars.githubusercontent.com/u/2879617?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/scottdharvey"><img src="https://avatars.githubusercontent.com/u/25498254?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/rykkard"><img src="https://avatars.githubusercontent.com/u/51889048?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/monitor403"><img src="https://avatars.githubusercontent.com/u/45124775?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mlec1"><img src="https://avatars.githubusercontent.com/u/42201667?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/meme-lord"><img src="https://avatars.githubusercontent.com/u/17912559?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/LazyMaple"><img src="https://avatars.githubusercontent.com/u/12314941?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/lvyaoting"><img src="https://avatars.githubusercontent.com/u/166296299?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/llussy"><img src="https://avatars.githubusercontent.com/u/18432966?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/linchizhen"><img src="https://avatars.githubusercontent.com/u/170242051?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/kiokuless"><img src="https://avatars.githubusercontent.com/u/110003596?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Jarnpher553"><img src="https://avatars.githubusercontent.com/u/10233873?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/c-f"><img src="https://avatars.githubusercontent.com/u/35263248?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/hanghuge"><img src="https://avatars.githubusercontent.com/u/166206050?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/testwill"><img src="https://avatars.githubusercontent.com/u/8717479?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/galoget"><img src="https://avatars.githubusercontent.com/u/8353133?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/fudancoder"><img src="https://avatars.githubusercontent.com/u/171416994?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/revolunet"><img src="https://avatars.githubusercontent.com/u/124937?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jsoref"><img src="https://avatars.githubusercontent.com/u/2119212?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/MachadoOtto"><img src="https://avatars.githubusercontent.com/u/93268441?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jonathanwalker"><img src="https://avatars.githubusercontent.com/u/14978093?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/nHurD"><img src="https://avatars.githubusercontent.com/u/233374?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/jessekelly881"><img src="https://avatars.githubusercontent.com/u/22938931?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/JaneX8"><img src="https://avatars.githubusercontent.com/u/5116641?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/atomiczsec"><img src="https://avatars.githubusercontent.com/u/75549184?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/M-Faheem-Khan"><img src="https://avatars.githubusercontent.com/u/17150767?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/denandz"><img src="https://avatars.githubusercontent.com/u/5291556?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/tibbon"><img src="https://avatars.githubusercontent.com/u/82880?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/dany74q"><img src="https://avatars.githubusercontent.com/u/2129762?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/0x123456789"><img src="https://avatars.githubusercontent.com/u/36066426?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/danigoland"><img src="https://avatars.githubusercontent.com/u/15079567?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/ChrisMandich"><img src="https://avatars.githubusercontent.com/u/14286797?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/austintraver"><img src="https://avatars.githubusercontent.com/u/25112463?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/socialsister"><img src="https://avatars.githubusercontent.com/u/155628741?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Anemys"><img src="https://avatars.githubusercontent.com/u/51196227?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/andreangelucci"><img src="https://avatars.githubusercontent.com/u/18552197?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/AlexS778"><img src="https://avatars.githubusercontent.com/u/98418121?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/noraj"><img src="https://avatars.githubusercontent.com/u/16578570?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/akkuman"><img src="https://avatars.githubusercontent.com/u/7813511?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/zrquan"><img src="https://avatars.githubusercontent.com/u/33086594?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/1efty"><img src="https://avatars.githubusercontent.com/u/18194777?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/rsrdesarrollo"><img src="https://avatars.githubusercontent.com/u/5142014?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/razin99"><img src="https://avatars.githubusercontent.com/u/44442082?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/MetzinAround"><img src="https://avatars.githubusercontent.com/u/65838556?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/vil02"><img src="https://avatars.githubusercontent.com/u/65706193?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mrschyte"><img src="https://avatars.githubusercontent.com/u/8571?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/PeterDaveHello"><img src="https://avatars.githubusercontent.com/u/3691490?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/parthmalhotra"><img src="https://avatars.githubusercontent.com/u/28601533?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/owenrumney"><img src="https://avatars.githubusercontent.com/u/3049157?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Ovi3"><img src="https://avatars.githubusercontent.com/u/29408109?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/Bisstocuz"><img src="https://avatars.githubusercontent.com/u/42398278?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/daffainfo"><img src="https://avatars.githubusercontent.com/u/36522826?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/mhmdiaa"><img src="https://avatars.githubusercontent.com/u/19687798?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/MiryangJung"><img src="https://avatars.githubusercontent.com/u/48237511?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/0xmin"><img src="https://avatars.githubusercontent.com/u/44919834?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/maikthulhu"><img src="https://avatars.githubusercontent.com/u/680830?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/sttlr"><img src="https://avatars.githubusercontent.com/u/40246850?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/iamRjarpan"><img src="https://avatars.githubusercontent.com/u/45498226?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/leoloobeek"><img src="https://avatars.githubusercontent.com/u/8801754?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/KristinnVikar"><img src="https://avatars.githubusercontent.com/u/93918469?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/kant01ne"><img src="https://avatars.githubusercontent.com/u/5072452?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/KeisukeYamashita"><img src="https://avatars.githubusercontent.com/u/23056537?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
<a href="https://github.com/1hehaq"><img src="https://avatars.githubusercontent.com/u/162917546?v=4" width="50" height="50" alt="" style="max-width: 100%;"></a>
</p>
<br>
<br>
<br>
<div align="center">
<sub>**`nuclei`** is distributed under [**MIT License**](https://github.com/projectdiscovery/nuclei/blob/main/LICENSE.md)</sub>
</div>
================================================
FILE: README_CN.md
================================================
<h1 align="center">
<br>
<a href="https://nuclei.projectdiscovery.io"><img src="static/nuclei-logo.png" width="200px" alt="Nuclei"></a>
</h1>
<h4 align="center">基于YAML语法模板的定制化快速漏洞扫描器</h4>
<p align="center">
<img src="https://img.shields.io/github/go-mod/go-version/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/releases"><img src="https://img.shields.io/github/downloads/projectdiscovery/nuclei/total">
<a href="https://github.com/projectdiscovery/nuclei/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/releases/"><img src="https://img.shields.io/github/release/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/issues"><img src="https://img.shields.io/github/issues-raw/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/discussions"><img src="https://img.shields.io/github/discussions/projectdiscovery/nuclei">
<a href="https://discord.gg/projectdiscovery"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
<a href="https://twitter.com/pdnuclei"><img src="https://img.shields.io/twitter/follow/pdnuclei.svg?logo=twitter"></a>
</p>
<p align="center">
<a href="#工作流程">工作流程</a> •
<a href="#安装Nuclei">安装</a> •
<a href="#对于安全工程师">对于安全工程师</a> •
<a href="#对于开发和组织">对于开发者</a> •
<a href="https://nuclei.projectdiscovery.io/nuclei/get-started/">文档</a> •
<a href="#致谢">致谢</a> •
<a href="https://docs.projectdiscovery.io/tools/nuclei/faq">常见问题</a> •
<a href="https://discord.gg/projectdiscovery">加入Discord</a>
</p>
<p align="center">
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README.md">English</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_CN.md">中文</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_KR.md">Korean</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ID.md">Indonesia</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ES.md">Spanish</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_PT-BR.md">Portuguese</a>
</p>
---
Nuclei使用零误报的定制模板向目标发送请求,同时可以对主机进行批量快速扫描。Nuclei提供TCP、DNS、HTTP、FILE等各类协议的扫描,通过强大且灵活的模板,可以使用Nuclei模拟各种安全检查。
我们的[模板仓库](https://github.com/projectdiscovery/nuclei-templates)包含**超过300名**安全研究员和工程师提供的模板。
## 工作流程
<h3 align="center">
<img src="static/nuclei-flow.jpg" alt="nuclei-flow" width="700px"></a>
</h3>
| :exclamation: **免责声明** |
|---------------------------------|
| **这个项目正在积极开发中**。预计发布会带来突破性的更改。更新前请查看版本更改日志。 |
| 这个项目主要是为了作为一个独立的命令行工具而构建的。 **将Nuclei作为服务运行可能存在安全风险。** 强烈建议谨慎使用,并采取额外的安全措施。 |
# 安装Nuclei
Nuclei需要 **go1.24.2** 才能安装成功。执行下列命令安装最新版本的Nuclei
```sh
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```
<details>
<summary>Brew</summary>
```sh
brew install nuclei
```
</details>
<details>
<summary>Docker</summary>
```sh
docker pull projectdiscovery/nuclei:latest
```
</details>
**更多的安装方式 [请点击此处](https://nuclei.projectdiscovery.io/nuclei/get-started/).**
<table>
<tr>
<td>
### Nuclei模板
自从[v2.5.2]((https://github.com/projectdiscovery/nuclei/releases/tag/v2.5.2))起,Nuclei就内置了自动下载和更新模板的功能。[**Nuclei模板**](https://github.com/projectdiscovery/nuclei-templates)仓库随时更新社区中可用的模板列表。
您仍然可以随时使用`update-templates`命令更新模板,您可以根据[模板指南](https://nuclei.projectdiscovery.io/templating-guide/)为您的个人工作流和需求编写模板。
YAML的语法规范在[这里](SYNTAX-REFERENCE.md)。
</td>
</tr>
</table>
### 用法
```sh
nuclei -h
```
这将显示Nuclei的帮助,以下是所有支持的命令。
```console
Nuclei是一款注重于可配置性、可扩展性和易用性的基于模板的快速漏洞扫描器。
用法:
nuclei [命令]
命令:
目标:
-u, -target string[] 指定扫描的目标URL/主机(多个目标则指定多个-u参数)
-l, -list string 指定包含要扫描的目标URL/主机列表的文件路径(一行一个)
-resume string 从指定文件恢复扫描并保存到指定文件(将禁用请求聚类)
-sa, -scan-all-ips 扫描由目标解析出来的所有IP(针对域名对应多个IP的情况)
-iv, -ip-version string[] 要扫描的主机名的IP版本(4,6)-(默认为4)
模板:
-nt, -new-templates 仅运行最新发布的nuclei模板
-ntv, -new-templates-version string[] 仅运行特定版本中添加的新模板
-as, -automatic-scan 基于Wappalyzer技术的标签映射自动扫描
-t, -templates string[] 指定要运行的模板或者模板目录(以逗号分隔或目录形式)
-turl, -template-url string[] 指定要运行的模板URL或模板目录URL(以逗号分隔或目录形式)
-w, -workflows string[] 指定要运行的工作流或工作流目录(以逗号分隔或目录形式)
-wurl, -workflow-url string[] 指定要运行的工作流URL或工作流目录URL(以逗号分隔或目录形式)
-validate 使用nuclei验证模板有效性
-nss, -no-strict-syntax 禁用对模板的严格检查
-td, -template-display 显示模板内容
-tl 列出所有可用的模板
-sign 使用NUCLEI_SIGNATURE_PRIVATE_KEY环境变量中的私钥对模板进行签名
-code 启用加载基于协议的代码模板
过滤:
-a, -author string[] 执行指定作者的模板(逗号分隔,文件)
-tags string[] 执行带指定tag的模板(逗号分隔,文件)
-etags, -exclude-tags string[] 排除带指定tag的模板(逗号分隔,文件)
-itags, -include-tags string[] 执行带有指定tag的模板,即使是被默认或者配置排除的模板
-id, -template-id string[] 执行指定id的模板(逗号分隔,文件)
-eid, -exclude-id string[] 排除指定id的模板(逗号分隔,文件)
-it, -include-templates string[] 执行指定模板,即使是被默认或配置排除的模板
-et, -exclude-templates string[] 排除指定模板或者模板目录(逗号分隔,文件)
-em, -exclude-matchers string[] 排除指定模板matcher
-s, -severity value[] 根据严重程度运行模板,可选值有:info,low,medium,high,critical
-es, -exclude-severity value[] 根据严重程度排除模板,可选值有:info,low,medium,high,critical
-pt, -type value[] 根据类型运行模板,可选值有:dns, file, http, headless, network, workflow, ssl, websocket, whois
-ept, -exclude-type value[] 根据类型排除模板,可选值有:dns, file, http, headless, network, workflow, ssl, websocket, whois
-tc, -template-condition string[] 根据表达式运行模板
输出:
-o, -output string 输出发现的问题到文件
-sresp, -store-resp 将nuclei的所有请求和响应输出到目录
-srd, -store-resp-dir string 将nuclei的所有请求和响应输出到指定目录(默认:output)
-silent 只显示结果
-nc, -no-color 禁用输出内容着色(ANSI转义码)
-j, -jsonl 输出格式为jsonL(ines)
-irr, -include-rr 在JSON、JSONL和Markdown中输出请求/响应对(仅结果)[已弃用,使用-omit-raw替代]
-or, -omit-raw 在JSON、JSONL和Markdown中不输出请求/响应对
-ot, -omit-template 省略JSON、JSONL输出中的编码模板
-nm, -no-meta 在cli输出中不打印元数据
-ts, -timestamp 在cli输出中打印时间戳
-rdb, -report-db string 本地的nuclei结果数据库(始终使用该数据库保存结果)
-ms, -matcher-status 显示匹配失败状态
-me, -markdown-export string 以markdown格式导出结果
-se, -sarif-export string 以SARIF格式导出结果
-je, -json-export string 以JSON格式导出结果
-jle, -jsonl-export string 以JSONL(ine)格式导出结果
配置:
-config string 指定nuclei的配置文件
-fr, -follow-redirects 为HTTP模板启用重定向
-fhr, -follow-host-redirects 允许在同一主机上重定向
-mr, -max-redirects int HTTP模板最大重定向次数(默认:10)
-dr, -disable-redirects 为HTTP模板禁用重定向
-rc, -report-config string 指定nuclei报告模板文件
-H, -header string[] 指定在所有http请求中包含的自定义header、cookie,以header:value的格式指定(cli,文件)
-V, -var value 以key=value格式自定义变量
-r, -resolvers string 指定包含DNS解析服务列表的文件
-sr, -system-resolvers 当DNS错误时使用系统DNS解析服务
-dc, -disable-clustering 关闭请求聚类功能
-passive 启用被动模式处理本地HTTP响应数据
-fh2, -force-http2 强制使用http2连接
-ev, env-vars 启用在模板中使用环境变量
-cc, -client-cert string 用于对扫描的主机进行身份验证的客户端证书文件(PEM 编码)
-ck, -client-key string 用于对扫描的主机进行身份验证的客户端密钥文件(PEM 编码)
-ca, -client-ca string 用于对扫描的主机进行身份验证的客户端证书颁发机构文件(PEM 编码)
-sml, -show-match-line 显示文件模板的匹配值,只适用于提取器
-ztls 使用ztls库,带有自动回退到标准库tls13 [已弃用] 默认情况下启用对ztls的自动回退
-sni string 指定tls sni的主机名(默认为输入的域名)
-lfa, -allow-local-file-access 允许访问本地文件(payload文件)
-lna, -restrict-local-network-access 阻止对本地/私有网络的连接
-i, -interface string 指定用于网络扫描的网卡
-at, -attack-type string payload的组合模式(batteringram,pitchfork,clusterbomb)
-sip, -source-ip string 指定用于网络扫描的源IP
-rsr, -response-size-read int 最大读取响应大小(默认:10485760字节)
-rss, -response-size-save int 最大储存响应大小(默认:1048576字节)
-reset 删除所有nuclei配置和数据文件(包括nuclei-templates)
-tlsi, -tls-impersonate 启用实验性的Client Hello(ja3)TLS 随机化功能
交互:
-inserver, -ineractsh-server string 使用interactsh反连检测平台(默认为oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me)
-itoken, -interactsh-token string 指定反连检测平台的身份凭证
-interactions-cache-size int 指定保存在交互缓存中的请求数(默认:5000)
-interactions-eviction int 从缓存中删除请求前等待的时间(默认为60秒)
-interactions-poll-duration int 每个轮询前等待时间(默认为5秒)
-interactions-cooldown-period int 退出轮询前的等待时间(默认为5秒)
-ni, -no-interactsh 禁用反连检测平台,同时排除基于反连检测的模板
模糊测试:
-ft, -fuzzing-type string 覆盖模板中设置的模糊测试类型(replace、prefix、postfix、infix)
-fm, -fuzzing-mode string 覆盖模板中设置的模糊测试模式(multiple、single)
UNCOVER引擎:
-uc, -uncover 启动uncover引擎
-uq, -uncover-query string[] uncover查询语句
-ue, -uncover-engine string[] 指定uncover查询引擎 (shodan,censys,fofa,shodan-idb,quake,hunter,zoomeye,netlas,criminalip,publicwww,hunterhow) (默认 shodan)
-uf, -uncover-field string 查询字段 (ip,port,host) (默认 "ip:port")
-ul, -uncover-limit int 查询结果数 (默认 100)
-ur, -uncover-ratelimit int 查询速率,默认每分钟60个请求(默认 60)
限速:
-rl, -rate-limit int 每秒最大请求量(默认:150)
-rlm, -rate-limit-minute int 每分钟最大请求量
-bs, -bulk-size int 每个模板最大并行检测数(默认:25)
-c, -concurrency int 并行执行的最大模板数量(默认:25)
-hbs, -headless-bulk-size int 每个模板并行运行的无头主机最大数量(默认:10)
-headc, -headless-concurrency int 并行指定无头主机最大数量(默认:10)
-tlc, -template-loading-concurrency int 最大并发模板加载操作数(默认:50)
优化:
-timeout int 超时时间(默认为10秒)
-retries int 重试次数(默认:1)
-ldp, -leave-default-ports 指定HTTP/HTTPS默认端口(例如:host:80,host:443)
-mhe, -max-host-error int 某主机扫描失败次数,跳过该主机(默认:30)
-te, -track-error string[] 将给定错误添加到最大主机错误监视列表(标准、文件)
-nmhe, -no-mhe disable skipping host from scan based on errors
-project 使用项目文件夹避免多次发送同一请求
-project-path string 设置特定的项目文件夹
-spm, -stop-at-first-path 得到一个结果后停止(或许会中断模板和工作流的逻辑)
-stream 流模式 - 在不整理输入的情况下详细描述
-ss, -scan-strategy value 扫描时使用的策略(auto/host-spray/template-spray) (默认 auto)
-irt, -input-read-timeout duration 输入读取超时时间(默认:3分钟)
-nh, -no-httpx 禁用对非URL输入进行httpx探测
-no-stdin 禁用标准输入
无界面浏览器:
-headless 启用需要无界面浏览器的模板
-page-timeout int 在无界面下超时秒数(默认:20)
-sb, -show-brower 在无界面浏览器运行模板时,显示浏览器
-ho, -headless-options string[] 使用附加选项启动无界面浏览器
-sc, -system-chrome 不使用Nuclei自带的浏览器,使用本地浏览器
-cdpe, -cdp-endpoint string 通过Chrome DevTools Protocol (CDP)端点使用远程浏览器
-lha, -list-headless-action 列出可用的无界面操作
调试:
-debug 显示所有请求和响应
-dreq, -debug-req 显示所有请求
-dresp, -debug-resp 显示所有响应
-p, -proxy string[] 使用http/socks5代理(逗号分隔,文件)
-pi, -proxy-internal 代理所有请求
-ldf, -list-dsl-function 列出所有支持的DSL函数签名
-tlog, -trace-log string 写入跟踪日志到文件
-elog, -error-log string 写入错误日志到文件
-version 显示版本信息
-hm, -hang-monitor 启用对nuclei挂起协程的监控
-v, -verbose 显示详细信息
-profile-mem string 将Nuclei的内存转储成文件
-vv 显示额外的详细信息
-svd, -show-var-dump 显示用于调试的变量输出
-ep, -enable-pprof 启用pprof调试服务器
-tv, -templates-version 显示已安装的模板版本
-hc, -health-check 运行诊断检查
升级:
-up, -update 更新Nuclei到最新版本
-ut, -update-templates 更新Nuclei模板到最新版
-ud, -update-template-dir string 指定模板目录
-duc, -disable-update-check 禁用nuclei程序与模板更新
统计:
-stats 显示正在扫描的统计信息
-sj, -stats-json 将统计信息以JSONL格式输出到文件
-si, -stats-inerval int 显示统计信息更新的间隔秒数(默认:5)
-mp, -metrics-port int 更改metrics服务的端口(默认:9092)
云服务:
-auth 配置projectdiscovery云服务(pdcp)API密钥
-cup, -cloud-upload 将扫描结果上传到pdcp仪表板
-sid, -scan-id string 将扫描结果上传到指定的扫描ID
例子:
扫描一个单独的URL:
$ nuclei -target example.com
对URL运行指定的模板:
$ nuclei -target example.com -t http/cves/ -t ssl
扫描hosts.txt中的多个URL:
$ nuclei -list hosts.txt
输出结果为JSON格式:
$ nuclei -target example.com -json-export output.json
使用已排序的Markdown输出(使用环境变量)运行nuclei:
$ MARKDOWN_EXPORT_SORT_MODE=template nuclei -target example.com -markdown-export nuclei_report/
```
更多信息请参考文档: https://docs.projectdiscovery.io/getting-started/running
### 运行Nuclei
使用[社区提供的模板](https://github.com/projectdiscovery/nuclei-templates)扫描单个目标
```sh
nuclei -u https://example.com
```
使用[社区提供的模板](https://github.com/projectdiscovery/nuclei-templates)扫描多个目标
```sh
nuclei -list urls.txt
```
Example of `urls.txt`:
```yaml
http://example.com
http://app.example.com
http://test.example.com
http://uat.example.com
```
**更多关于Nuclei的详细实例可以在[这里](https://nuclei.projectdiscovery.io/nuclei/get-started/#running-nuclei)找到**
# 对于安全工程师
Nuclei提供了大量有助于安全工程师在工作流定制相关的功能。通过各种扫描功能(如DNS、HTTP、TCP),安全工程师可以更轻松的使用Nuclei创建一套自定义的检查方式。
- 支持多种协议:TCP、DNS、HTTP、FILE等
- 通过工作流和动态请求实现复杂的漏洞扫描
- 易于集成到CI/CD,旨在可以轻松的集成到周期扫描中,以主动检测漏洞的修复和重新出现
<h1 align="left">
<a href="https://nuclei.projectdiscovery.io/nuclei/get-started/"><img src="static/learn-more-button.png" width="170px" alt="Learn More"></a>
</h1>
<table>
<tr>
<td>
**对于赏金猎人:**
Nuclei允许您定制自己的测试方法,可以轻松的运行您的程序。此外Nuclei可以更容易的集成到您的漏洞扫描工作流中。
- 可以集成到其他工作流中
- 可以在几分钟处理上千台主机
- 使用YAML语法定制自动化测试
欢迎查看我们其他的开源项目,可能有适合您的赏金猎人工作流:[github.com/projectdiscovery](https://github.com/projectdiscovery),我们还使用[Chaos绘制了每日的DNS数据](https://chaos.projectdiscovery.io)。
</td>
</tr>
</table>
<table>
<tr>
<td>
**对于渗透测试:**
Nuclei通过增加手动、自动的过程,极大地改变了安全评估的方式。一些公司已经在用Nuclei升级他们的手动测试步骤,可以使用Nulcei对数千台主机使用同样的流程自动化测试。
渗透测试员可以使用公共模板或者自定义模板来更快的完成渗透测试,特别是漏洞验证时,可以轻松的验证漏洞是否修复。
- 轻松根据您的要求创建标准清单(例如:OWASP TOP 10)
- 通过[FUZZ](https://nuclei.projectdiscovery.io/templating-guide/protocols/http-fuzzing/)和[工作流](https://nuclei.projectdiscovery.io/templating-guide/workflows/)等功能,可以使用Nuclei完成复杂的手动步骤和重复性渗透测试
- 只需要重新运行Nuclei即可验证漏洞修复情况
</td>
</tr>
</table>
# 对于开发和组织
Nuclei构建很简单,通过数百名安全研究员的社区模板,Nuclei可以随时扫描来了解安全威胁。Nuclei通常用来用于复测,以确定漏洞是否被修复。
- **CI/CD:** 工程师已经支持了CI/CD,可以通过Nuclei使用定制模板来监控模拟环境和生产环境
- **周期性扫描:** 使用Nuclei创建新发现的漏洞模板,通过Nuclei可以周期性扫描消除漏洞
我们有个[讨论组](https://github.com/projectdiscovery/nuclei-templates/discussions/693),黑客提交自己的模板后可以获得赏金,这可以减少资产的漏洞,并且减少重复。如果你想实行该计划,可以[联系我](mailto:contact@projectdiscovery.io)。我们非常乐意提供帮助,或者在[讨论组](https://github.com/projectdiscovery/nuclei-templates/discussions/693)中发布相关信息。
<h3 align="center">
<img src="static/regression-with-nuclei.jpg" alt="regression-cycle-with-nuclei" width="1100px"></a>
</h3>
<h1 align="left">
<a href="https://github.com/projectdiscovery/nuclei-action"><img src="static/learn-more-button.png" width="170px" alt="Learn More"></a>
</h1>
### 将nuclei加入您的代码
有关使用Nuclei作为Library/SDK的完整指南,请访问[godoc](https://pkg.go.dev/github.com/projectdiscovery/nuclei/v3/lib#section-readme)
### 资源
- [使用PinkDraconian发现Nuclei的BUG (Robbe Van Roey)](https://www.youtube.com/watch?v=ewP0xVPW-Pk) 作者:[@PinkDraconian](https://twitter.com/PinkDraconian)
- [Nuclei: 强而有力的扫描器](https://bishopfox.com/blog/nuclei-vulnerability-scan) 作者:Bishopfox
- [WAF有效性检查](https://www.fastly.com/blog/the-waf-efficacy-framework-measuring-the-effectiveness-of-your-waf) 作者:Fastly
- [在CI/CD中使用Nuclei实时扫描网页应用](https://blog.escape.tech/devsecops-part-iii-scanning-live-web-applications/) 作者:[@TristanKalos](https://twitter.com/TristanKalos)
- [使用Nuclei扫描](https://blog.projectdiscovery.io/community-powered-scanning-with-nuclei/)
- [Nuclei Unleashed - 快速编写复杂漏洞](https://blog.projectdiscovery.io/nuclei-unleashed-quickly-write-complex-exploits/)
- [Nuclei - FUZZ一切](https://blog.projectdiscovery.io/nuclei-fuzz-all-the-things/)
- [Nuclei + Interactsh Integration,用于自动化OOB测试](https://blog.projectdiscovery.io/nuclei-interactsh-integration/)
- [武器化Nuclei](https://medium.com/@dwisiswant0/weaponizes-nuclei-workflows-to-pwn-all-the-things-cd01223feb77) 作者:[@dwisiswant0](https://github.com/dwisiswant0)
- [如何使用Nuclei连续扫描?](https://medium.com/@dwisiswant0/how-to-scan-continuously-with-nuclei-fcb7e9d8b8b9) 作者:[@dwisiswant0](https://github.com/dwisiswant0)
- [自动化攻击](https://dhiyaneshgeek.github.io/web/security/2021/07/19/hack-with-automation/) 作者:[@DhiyaneshGeek](https://github.com/DhiyaneshGeek)
### 致谢
感谢所有[社区贡献者提供的PR](https://github.com/projectdiscovery/nuclei/graphs/contributors),并不断更新此项目:heart:
如果你有想法或某种改进,欢迎你参与该项目,随时发送你的PR。
<p align="center">
<a href="https://github.com/projectdiscovery/nuclei/graphs/contributors">
<img src="https://contrib.rocks/image?repo=projectdiscovery/nuclei&max=500">
</a>
</p>
另外您可以了解其他类似的开源项目:
[FFuF](https://github.com/ffuf/ffuf), [Qsfuzz](https://github.com/ameenmaali/qsfuzz), [Inception](https://github.com/proabiral/inception), [Snallygaster](https://github.com/hannob/snallygaster), [Gofingerprint](https://github.com/Static-Flow/gofingerprint), [Sn1per](https://github.com/1N3/Sn1per/tree/master/templates), [Google tsunami](https://github.com/google/tsunami-security-scanner), [Jaeles](https://github.com/jaeles-project/jaeles), [ChopChop](https://github.com/michelin/ChopChop)
### 许可证
Nuclei使用[MIT许可证](https://github.com/projectdiscovery/nuclei/blob/main/LICENSE.md)
<h1 align="left">
<a href="https://discord.gg/projectdiscovery"><img src="static/Join-Discord.png" width="380" alt="Join Discord"></a> <a href="https://nuclei.projectdiscovery.io"><img src="static/check-nuclei-documentation.png" width="380" alt="Check Nuclei Documentation"></a>
</h1>
================================================
FILE: README_ES.md
================================================
<h1 align="center">
<br>
<a href="https://nuclei.projectdiscovery.io"><img src="static/nuclei-logo.png" width="200px" alt="Nuclei"></a>
</h1>
<h4 align="center">Escáner de vulnerabilidades rápido y personalizable basado en un sencillo DSL basado en YAML.</h4>
<p align="center">
<img src="https://img.shields.io/github/go-mod/go-version/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/releases"><img src="https://img.shields.io/github/downloads/projectdiscovery/nuclei/total">
<a href="https://github.com/projectdiscovery/nuclei/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/releases/"><img src="https://img.shields.io/github/release/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/issues"><img src="https://img.shields.io/github/issues-raw/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/discussions"><img src="https://img.shields.io/github/discussions/projectdiscovery/nuclei">
<a href="https://discord.gg/projectdiscovery"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
<a href="https://twitter.com/pdnuclei"><img src="https://img.shields.io/twitter/follow/pdnuclei.svg?logo=twitter"></a>
</p>
<p align="center">
<a href="#how-it-works">Cómo funciona</a> •
<a href="#install-nuclei">Instalación</a> •
<a href="https://docs.projectdiscovery.io/tools/nuclei/">Documentación</a> •
<a href="#credits">Créditos</a> •
<a href="https://docs.projectdiscovery.io/tools/nuclei/faq">Preguntas Frecuentes</a> •
<a href="https://discord.gg/projectdiscovery">Únete a Discord</a>
</p>
<p align="center">
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README.md">English</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_CN.md">中文</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_KR.md">Korean</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ID.md">Indonesia</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ES.md">Spanish</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_PT-BR.md">Portuguese</a>
</p>
---
Nuclei se utiliza para enviar peticiones a múltiples objetivos basándose en una plantilla, lo que resulta en cero falsos positivos y proporciona un escaneo rápido en un gran número de hosts. Nuclei ofrece escaneos para una variedad de protocolos, incluyendo TCP, DNS, HTTP, SSL, File, Whois, Websocket, Headless, Code, etc. Con plantillas potentes y flexibles, Nuclei puede utilizarse para modelar todo tipo de comprobaciones de seguridad.
Tenemos un [repositorio dedicado](https://github.com/projectdiscovery/nuclei-templates) que alberga varios tipos de plantillas de vulnerabilidades, contribuidas por **más de 300** investigadores y ingenieros de seguridad.
## Cómo funciona
<h3 align="center">
<img src="static/nuclei-flow.jpg" alt="nuclei-flow" width="700px"></a>
</h3>
| :exclamation: **Descargo de responsabilidad** |
|---------------------------------|
| **Este proyecto está en desarrollo activo**. Es de esperar que se produzcan cambios importantes con las nuevas versiones. Consulte el registro de cambios de la versión antes de actualizar. |
| Este proyecto fue principalmente desarrollado para ser utilizado como una herramienta CLI independiente. **Ejecutar nuclei como un servicio puede suponer riesgos de seguridad.** Se recomienda utilizarlo con precaución y tomar medidas de seguridad adicionales. |
# Instalación de Nuclei
Nuclei requiere **go1.24.2** para instalarse correctamente. Ejecute el siguiente comando para instalar la última versión -
```sh
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```
<details>
<summary>Brew</summary>
```sh
brew install nuclei
```
</details>
<details>
<summary>Docker</summary>
```sh
docker pull projectdiscovery/nuclei:latest
```
</details>
**Más métodos de instalación [pueden encontrarse aquí](https://docs.projectdiscovery.io/tools/nuclei/install).**
<table>
<tr>
<td>
### Plantillas de Nuclei
Nuclei cuenta con soporte incorporado para la descarga/actualización automática de plantillas desde la versión [v2.5.2](https://github.com/projectdiscovery/nuclei/releases/tag/v2.5.2) en adelante. El proyecto [**Nuclei-Templates**](https://github.com/projectdiscovery/nuclei-templates) proporciona una lista de plantillas listas para usar, aportadas por la comunidad, y que se actualizan constantemente.
También puedes utilizar la bandera `update-templates` para actualizar las plantillas de Nuclei en cualquier momento; puedes escribir tus propias pruebas para tu flujo de trabajo y necesidades individuales siguiendo la [guía de plantillas](https://docs.projectdiscovery.io/templates/) de Nuclei.
La sintaxis de referencia YAML DSL está disponible [aquí](SYNTAX-REFERENCE.md).
</td>
</tr>
</table>
### Uso
```sh
nuclei -h
```
Esto mostrará ayuda sobre la herramienta. Aquí están todas las opciones que soporta.
```console
Nuclei es un escáner de vulnerabilidades rápido y basado en plantillas
que se centra en su amplia configurabilidad, extensibilidad y facilidad de uso.
Usage:
./nuclei [flags]
Flags:
TARGET:
-u, -target string[] URLs/hosts a escanear
-l, -list string ruta al archivo que contiene la lista de URLs/hosts a escanear (uno por línea)
-eh, -exclude-hosts string[] hosts a excluir para escanear de la lista de entrada (ip, cidr, hostname)
-resume string reanudar el escaneo desde y guardar en el archivo especificado (la clusterización quedará inhabilitada)
-sa, -scan-all-ips escanear todas las IP asociadas al registro dns
-iv, -ip-version string[] versión IP a escanear del nombre de host (4,6) - (por defecto 4)
TARGET-FORMAT:
-im, -input-mode string modo del archivo de entrada (list, burp, jsonl, yaml, openapi, swagger) (por defecto "list")
-ro, -required-only utilizar solo campos requeridos en el formato de entrada al generar peticiones
-sfv, -skip-format-validation saltar la validación de formato (como variables faltantes) al procesar el archivo de entrada
TEMPLATES:
-nt, -new-templates ejecutar sólo las nuevas plantillas añadidas en la última versión de nuclei-templates
-ntv, -new-templates-version string[] ejecutar las nuevas plantillas añadidas en la versión especificada
-as, -automatic-scan escaneo web automático utilizando la detección de tecnología de wappalyzer para mapeo de etiquetas
-t, -templates string[] lista de plantillas o directorio de plantillas a ejecutar (separadas por comas, file)
-turl, -template-url string[] url de plantilla o lista que contiene urls de plantillas a ejecutar (separadas por comas, file)
-w, -workflows string[] lista de flujos de trabajo o directorio de flujos de trabajo a ejecutar (separadas por comas, file)
-wurl, -workflow-url string[] url de flujo de trabajo o lista que contiene urls de flujo de trabajo para ejecutar (separadas por comas, file)
-validate valida las plantillas pasadas a nuclei
-nss, -no-strict-syntax deshabilita la comprobación de sintaxis estricta en las plantillas
-td, -template-display muestra el contenido de las plantillas
-tl lista todas las plantillas disponibles
-tgl lista todas las etiquetas disponibles
-sign firma las plantillas con la clave privada definida en la variable de entorno NUCLEI_SIGNATURE_PRIVATE_KEY
-code habilita la carga de plantillas basadas en protocolos de código
-dut, -disable-unsigned-templates deshabilita la ejecución de plantillas no firmadas o plantillas con firma no coincidente
FILTERING:
-a, -author string[] plantillas a ejecutar basadas en autores (separadas por comas, file)
-tags string[] plantillas a ejecutar basadas en etiquetas (separadas por comas, file)
-etags, -exclude-tags string[] plantillas a excluir basadas en etiquetas (separadas por comas, file)
-itags, -include-tags string[] etiquetas a ejecutar incluso si están excluidas ya sea por defecto o por configuración
-id, -template-id string[] plantillas a ejecutar basadas en IDs de plantilla (comma-separated, file, allow-wildcard)
-eid, -exclude-id string[] plantillas a excluir basadas en IDs de plantilla (separadas por comas, file)
-it, -include-templates string[] ruta al archivo de plantilla o directorio a ejecutar incluso si están excluidas ya sea por defecto o por configuración
-et, -exclude-templates string[] ruta al archivo de plantilla o directorio a excluir (separadas por comas, file)
-em, -exclude-matchers string[] matchers de plantilla a excluir en el resultado
-s, -severity value[] plantillas a ejecutar basadas en criticidad. Valores posibles: info, bajo, medio, alto, crítico, desconocido
-es, -exclude-severity value[] plantillas a excluir basadas en criticidad. Valores posibles: info, bajo, medio, alto, crítico, desconocido
-pt, -type value[] plantillas a ejecutar basadas en tipo de protocolo. Valores posibles: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-ept, -exclude-type value[] plantillas a excluir basadas en tipo de protocolo. Valores posibles: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-tc, -template-condition string[] plantillas a ejecutar basadas en condición de expresión
OUTPUT:
-o, -output string archivo de salida donde guardar las incidencias/vulnerabilidades detectadas
-sresp, -store-resp almacenar todas las peticiones/respuestas enviadas por nuclei en el directorio de salida
-srd, -store-resp-dir string almacenar todas las peticiones/respuestas enviadas por nuclei en un directorio personalizado (por defecto "output")
-silent mostrar resultados únicamente
-nc, -no-color deshabilitar la coloración del contenido de salida (códigos de escape ANSI)
-j, -jsonl escribir la salida en formato JSONL(ines)
-irr, -include-rr -omit-raw incluir pares peticiones/respuesta en las salidas JSON, JSONL y Markdown (sólo para hallazgos) [OBSOLETO usar -omit-raw] (por defecto true)
-or, -omit-raw omitir los pares peticiones/respuesta en las salidas JSON, JSONL y Markdown (sólo para hallazgos)
-ot, -omit-template omitir plantilla codificada en la salida JSON, JSONL
-nm, -no-meta deshabilitar la impresión de metadatos de resultados en la salida cli
-ts, -timestamp habilitar la impresión de la marca de tiempo en la salida cli
-rdb, -report-db string base de datos de informes de nuclei (utilizarla siempre para persistir los datos de los informes)
-ms, -matcher-status mostrar el estado de fallo de coincidencia
-me, -markdown-export string directorio para exportar resultados en formato markdown
-se, -sarif-export string archivo para exportar resultados en formato SARIF
-je, -json-export string archivo para exportar resultados en formato JSON
-jle, -jsonl-export string archivo para exportar resultados en formato JSONL(ines)
CONFIGURATIONS:
-config string ruta al archivo de configuración de nuclei
-fr, -follow-redirects habilitar el seguimiento de redirecciones para plantillas http
-fhr, -follow-host-redirects seguir redirecciones en el mismo host
-mr, -max-redirects int número máximo de redirecciones a seguir para plantillas http (por defecto 10)
-dr, -disable-redirects deshabilitar redirecciones para plantillas http
-rc, -report-config string archivo de configuración del módulo de informes de nuclei
-H, -header string[] encabezado/cookie personalizado a incluir en todas las peticiones http en formato header:value (cli, file)
-V, -var value variables personalizadas en formato key=value
-r, -resolvers string archivo que contiene lista de resolutores para nuclei
-sr, -system-resolvers utilizar resolución de DNS del sistema como fallback de error
-dc, -disable-clustering deshabilitar la clusterización de peticiones
-passive habilitar el modo de procesamiento pasivo de respuestas HTTP
-fh2, -force-http2 forzar la conexión http2 en las peticiones
-ev, -env-vars habilitar el uso de variables de entorno en la plantilla
-cc, -client-cert string archivo de certificado de cliente (codificado en PEM) utilizado para autenticarse contra los hosts escaneados
-ck, -client-key string archivo de clave de cliente (codificado en PEM) utilizado para autenticarse contra los hosts escaneados
-ca, -client-ca string archivo de autoridad de certificación de cliente (codificado en PEM) utilizado para autenticarse contra los hosts escaneados
-sml, -show-match-line mostrar líneas de coincidencia para plantillas de archivo, funciona solo con extractores
-ztls utilizar la biblioteca ztls con autofallback a estándar para tls13 [Obsoleto] autofallback a ztls está habilitado por defecto
-sni string nombre de host tls sni a usar (por defecto: nombre de dominio de entrada)
-dt, -dialer-timeout value tiempo de espera para peticiones de red
-dka, -dialer-keep-alive value duración de keep-alive para peticiones de red
-lfa, -allow-local-file-access permite el acceso a archivos (carga útil) en cualquier lugar del sistema
-lna, -restrict-local-network-access bloquea conexiones a la red local / privada
-i, -interface string interfaz de red a usar para el escaneo de red
-at, -attack-type string tipo de combinaciones de carga útil a realizar (batteringram, pitchfork, clusterbomb)
-sip, -source-ip string dirección ip de origen a usar para el escaneo de red
-rsr, -response-size-read int tamaño máximo de respuesta a leer en bytes (por defecto 10485760)
-rss, -response-size-save int tamaño máximo de respuesta a guardar en bytes (por defecto 1048576)
-reset reset elimina todos los archivos de configuración y datos de nuclei (incluidas las nuclei-templates)
-tlsi, -tls-impersonate habilitar client hello (ja3) tls randomization experimental
INTERACTSH:
-iserver, -interactsh-server string url del servidor interactsh para instancia autoalojada (por defecto: oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me)
-itoken, -interactsh-token string token de autenticación del servidor interactsh autoalojado
-interactions-cache-size int número de peticiones a mantener en la caché de interacciones (por defecto 5000)
-interactions-eviction int número de segundos a esperar antes de eliminar las solicitudes de la caché (por defecto 60)
-interactions-poll-duration int número de segundos a esperar antes de cada solicitud de polling de interacciones (por defecto 5)
-interactions-cooldown-period int tiempo adicional para el polling de interacciones antes de salir (por defecto 5)
-ni, -no-interactsh desactivar el servidor interactsh para pruebas OAST, excluir plantillas basadas en OAST
FUZZING:
-ft, -fuzzing-type string sobrescribe el tipo de fuzzing establecido en la plantilla (replace, prefix, postfix, infix)
-fm, -fuzzing-mode string sobrescribe el modo de fuzzing establecido en la plantilla (multiple, single)
-fuzz habilita la carga de plantillas de fuzzing (Obsoleto: usar -dast en su lugar)
-dast solo ejecuta plantillas DAST
UNCOVER:
-uc, -uncover habilita el motor uncover
-uq, -uncover-query string[] consulta de búsqueda uncover
-ue, -uncover-engine string[] motor de búsqueda uncover (shodan,censys,fofa,shodan-idb,quake,hunter,zoomeye,netlas,criminalip,publicwww,hunterhow) (por defecto shodan)
-uf, -uncover-field string campos uncover a devolver (ip,port,host) (por defecto "ip:port")
-ul, -uncover-limit int resultados uncover a devolver (por defecto 100)
-ur, -uncover-ratelimit int sobrescribe el límite de velocidad de los motores con el límite de velocidad del motor uncover (por defecto 60 req/min) (por defecto 60)
RATE-LIMIT:
-rl, -rate-limit int número máximo de peticiones a enviar por segundo (por defecto 150)
-rlm, -rate-limit-minute int número máximo de peticiones a enviar por minuto
-bs, -bulk-size int número máximo de hosts a ser analizados en paralelo por plantilla (por defecto 25)
-c, -concurrency int número máximo de plantillas a ejecutar en paralelo (por defecto 25)
-hbs, -headless-bulk-size int número máximo de hosts headless a ser analizados en paralelo por plantilla (por defecto 10)
-headc, -headless-concurrency int número máximo de plantillas headless a ejecutar en paralelo (por defecto 10)
-jsc, -js-concurrency int número máximo de entornos de ejecución de JavaScript a ejecutar en paralelo (por defecto 120)
-pc, -payload-concurrency int concurrencia máxima de carga útil para cada plantilla (por defecto 25)
-tlc, -template-loading-concurrency int número máximo de operaciones de carga de plantillas concurrentes (por defecto 50)
OPTIMIZATIONS:
-timeout int tiempo de espera en segundos (por defecto 10)
-retries int número de veces que se reintenta una petición fallida (por defecto 1)
-ldp, -leave-default-ports dejar puertos HTTP/HTTPS predeterminados (por ejemplo, host:80,host:443)
-mhe, -max-host-error int errores máximos para un host antes de omitirlo del escaneo (por defecto 30)
-te, -track-error string[] agrega el error dado a la lista de seguimiento de errores máximos por host (standard, file)
-nmhe, -no-mhe deshabilita la omisión del host del escaneo basado en errores
-project utiliza una carpeta de proyecto para evitar enviar la misma petición varias veces
-project-path string establece una ruta de proyecto específica (por defecto "/tmp")
-spm, -stop-at-first-match detiene el procesamiento de las peticiones HTTP después de la primera coincidencia (puede romper la lógica de la plantilla/flujo de trabajo)
-stream modo transmisión - comienza a trabajar sin ordenar la entrada
-ss, -scan-strategy value estrategia a utilizar mientras se escanea (auto/host-spray/template-spray) (por defecto auto)
-irt, -input-read-timeout value tiempo de espera en la lectura de entrada (por defecto 3m0s)
-nh, -no-httpx deshabilita análisis httpx para entradas que no son URL
-no-stdin deshabilita el procesamiento de la entrada estándar
HEADLESS:
-headless habilita las plantillas que requieren soporte de navegadores sin interfaz gráfica (headless browser) (el usuario root en Linux deshabilitará el sandbox)
-page-timeout int segundos para esperar cada página en modo sin interfaz (por defecto 20)
-sb, -show-browser muestra el navegador en la pantalla al ejecutar plantillas con modo sin interfaz
-ho, -headless-options string[] inicia Chrome en modo sin interfaz con opciones adicionales
-sc, -system-chrome utiliza el navegador Chrome instalado localmente en lugar del instalado por nuclei
-cdpe, -cdp-endpoint string usar navegador remoto a través del endpoint del Protocolo de Herramientas de Desarrollador de Chrome (CDP)
-lha, -list-headless-action lista de acciones sin interfaz disponibles
DEBUG:
-debug muestra todas las peticiones y respuestas
-dreq, -debug-req muestra todas las peticiones enviadas
-dresp, -debug-resp muestra todas las respuestas recibidas
-p, -proxy string[] lista de proxies http/socks5 a utilizar (separados por comas o archivo de entrada)
-pi, -proxy-internal proxy para todas las peticiones internas
-ldf, -list-dsl-function lista todas las firmas de función DSL admitidas
-tlog, -trace-log string archivo a escribir el registro de traza de peticiones enviadas
-elog, -error-log string archivo a escribir el registro de error de peticiones enviadas
-version muestra la versión de nuclei
-hm, -hang-monitor habilita la monitorización de bloqueos de nuclei
-v, -verbose muestra salida detallada
-profile-mem string archivo opcional de volcado de memoria de nuclei
-vv muestra las plantillas cargadas para el escaneo
-svd, -show-var-dump muestra el volcado de variables para depuración
-ep, -enable-pprof habilita el servidor de depuración pprof
-tv, -templates-version muestra la versión de las plantillas nuclei (nuclei-templates) instaladas
-hc, -health-check ejecuta comprobación de diagnóstico
UPDATE:
-up, -update actualiza el motor de nuclei a la última versión lanzada
-ut, -update-templates actualiza nuclei-templates a la última versión lanzada
-ud, -update-template-dir string directorio personalizado para instalar/actualizar nuclei-templates
-duc, -disable-update-check deshabilita la comprobación automática de actualizaciones de nuclei/templates
STATISTICS:
-stats muestra estadísticas sobre el escaneo en ejecución
-sj, -stats-json muestra estadísticas en formato JSONL(ines)
-si, -stats-interval int número de segundos a esperar entre mostrar una actualización de estadísticas (por defecto 5)
-mp, -metrics-port int puerto para exponer métricas de nuclei (por defecto 9092)
CLOUD:
-auth configura la clave de API del cloud de projectdiscovery (pdcp)
-cup, -cloud-upload sube los resultados del escaneo al dashboard de pdcp
-sid, -scan-id string sube los resultados del escaneo al ID de escaneo dado
AUTHENTICATION:
-sf, -secret-file string[] ruta al archivo de configuración que contiene los secrets para el escaneo autenticado de nuclei
-ps, -prefetch-secrets precarga los secrets del archivo de secrets
EXAMPLES:
Ejecutar nuclei en un solo host:
$ nuclei -target example.com
Ejecutar nuclei con directorios de plantillas específicos:
$ nuclei -target example.com -t http/cves/ -t ssl
Ejecutar nuclei contra una lista de hosts:
$ nuclei -list hosts.txt
Ejecutar nuclei con una salida JSON:
$ nuclei -target example.com -json-export output.json
Ejecutar nuclei con salidas Markdown ordenadas (con variables de entorno):
$ MARKDOWN_EXPORT_SORT_MODE=template nuclei -target example.com -markdown-export nuclei_report/
Documentación adicional disponible en: https://docs.projectdiscovery.io/getting-started/running
```
### Ejecutando Nuclei
Consulta https://docs.projectdiscovery.io/tools/nuclei/running para obtener detalles sobre cómo ejecutar Nuclei.
### Uso de Nuclei desde código Go
La guía completa sobre cómo usar Nuclei como biblioteca/SDK está disponible en [godoc](https://pkg.go.dev/github.com/projectdiscovery/nuclei/v3/lib#section-readme).
### Recursos
Puedes acceder a la documentación principal de Nuclei en https://docs.projectdiscovery.io/tools/nuclei/, y obtener más información sobre Nuclei en la nube con [ProjectDiscovery Cloud Platform](https://cloud.projectdiscovery.io).
¡Consulta https://docs.projectdiscovery.io/tools/nuclei/resources para obtener más recursos y videos sobre Nuclei!
### Créditos
Gracias a todos los increíbles [contribuyentes de la comunidad que enviaron PRs](https://github.com/projectdiscovery/nuclei/graphs/contributors) y mantienen este proyecto actualizado. :heart:
Si tienes una idea o algún tipo de mejora, eres bienvenido a contribuir y participar en el Proyecto, siéntete libre de enviar tu PR.
<p align="center">
<a href="https://github.com/projectdiscovery/nuclei/graphs/contributors">
<img src="https://contrib.rocks/image?repo=projectdiscovery/nuclei&max=500">
</a>
</p>
También echa un vistazo a los siguientes proyectos de código abierto similares que pueden adaptarse a tu flujo de trabajo:
[FFuF](https://github.com/ffuf/ffuf), [Qsfuzz](https://github.com/ameenmaali/qsfuzz), [Inception](https://github.com/proabiral/inception), [Snallygaster](https://github.com/hannob/snallygaster), [Gofingerprint](https://github.com/Static-Flow/gofingerprint), [Sn1per](https://github.com/1N3/Sn1per/tree/master/templates), [Google tsunami](https://github.com/google/tsunami-security-scanner), [Jaeles](https://github.com/jaeles-project/jaeles), [ChopChop](https://github.com/michelin/ChopChop)
### Licencia
Nuclei se distribuye bajo la [Licencia MIT](https://github.com/projectdiscovery/nuclei/blob/main/LICENSE.md)
<h1 align="left">
<a href="https://discord.gg/projectdiscovery"><img src="static/Join-Discord.png" width="380" alt="Join Discord"></a> <a href="https://docs.projectdiscovery.io"><img src="static/check-nuclei-documentation.png" width="380" alt="Check Nuclei Documentation"></a>
</h1>
================================================
FILE: README_ID.md
================================================
<h1 align="center">
<br>
<a href="https://nuclei.projectdiscovery.io"><img src="static/nuclei-logo.png" width="200px" alt="Nuclei"></a>
</h1>
<h4 align="center">Pemindai kerentanan yang cepat dan dapat disesuaikan berdasarkan DSL berbasis YAML sederhana.</h4>
<p align="center">
<img src="https://img.shields.io/github/go-mod/go-version/projectdiscovery/nuclei?filename=v2%2Fgo.mod">
<a href="https://github.com/projectdiscovery/nuclei/releases"><img src="https://img.shields.io/github/downloads/projectdiscovery/nuclei/total">
<a href="https://github.com/projectdiscovery/nuclei/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/releases/"><img src="https://img.shields.io/github/release/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/issues"><img src="https://img.shields.io/github/issues-raw/projectdiscovery/nuclei">
<a href="https://github.com/projectdiscovery/nuclei/discussions"><img src="https://img.shields.io/github/discussions/projectdiscovery/nuclei">
<a href="https://discord.gg/projectdiscovery"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
<a href="https://twitter.com/pdnuclei"><img src="https://img.shields.io/twitter/follow/pdnuclei.svg?logo=twitter"></a>
</p>
<p align="center">
<a href="#cara-kerja">Cara Kerja</a> •
<a href="#instalasi-nuclei">Instalasi</a> •
<a href="#untuk-insinyur-keamanan">Untuk Teknisi Keamanan</a> •
<a href="#untuk-pengembang-dan-organisasi">Untuk Pengembang</a> •
<a href="https://nuclei.projectdiscovery.io/nuclei/get-started/">Dokumentasi</a> •
<a href="#kredit">Kredit</a> •
<a href="https://docs.projectdiscovery.io/tools/nuclei/faq">Tanya Jawab</a> •
<a href="https://discord.gg/projectdiscovery">Gabung Discord</a>
</p>
<p align="center">
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README.md">English</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_CN.md">中文</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_KR.md">Korean</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ID.md">Indonesia</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_ES.md">Spanish</a> •
<a href="https://github.com/projectdiscovery/nuclei/blob/main/README_PT-BR.md">Portuguese</a>
</p>
---
Nuclei digunakan untuk mengirim permintaan lintas target berdasarkan templat, yang menghasilkan nol positif palsu dan menyediakan pemindaian yang cepat pada banyak host. Nuclei menawarkan pemindaian untuk berbagai protokol, termasuk TCP, DNS, HTTP, SSL, File, Whois, Websocket, Headless, dll. Dengan templating yang kuat dan fleksibel, Nuclei dapat digunakan untuk memodelkan semua jenis pemeriksaan keamanan.
Kami memiliki [repositori khusus](https://github.com/projectdiscovery/nuclei-templates) yang menampung berbagai jenis templat kerentanan yang disumbangkan oleh **lebih dari 300** peneliti dan teknisi keamanan.
## Cara Kerja
<h3 align="center">
<img src="static/nuclei-flow.jpg" alt="nuclei-flow" width="700px"></a>
</h3>
# Instalasi Nuclei
Nuclei membutuhkan **go1.24.2** agar dapat diinstall. Jalankan perintah berikut untuk menginstal versi terbaru -
```sh
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
```
**Metode [instalasi lain dapat ditemukan di sini](https://nuclei.projectdiscovery.io/nuclei/get-started/).**
<table>
<tr>
<td>
### Nuclei Templates
Nuclei memiliki dukungan untuk unduhan/pembaruan templat otomatis sebagai bawaan sejak versi [v2.5.2](https://github.com/projectdiscovery/nuclei/releases/tag/v2.5.2). Proyek [**Nuclei-Templates**](https://github.com/projectdiscovery/nuclei-templates) menyediakan daftar template siap pakai yang dibuat oleh komunitas yang terus diperbarui.
Anda dapat menggunakan flag `-update-templates` untuk memperbarui templat inti kapan saja; Anda juga dapat menulis pemeriksaan Anda sendiri untuk alur kerja individu dan untuk kebutuhan Anda sendiri dengan mengikuti [panduan pembuatan templat Nuclei](https://nuclei.projectdiscovery.io/templating-guide/).
Untuk referensi penulisan sintaks DSL berbasis YAML tersedia [di sini](SYNTAX-REFERENCE.md).
</td>
</tr>
</table>
### Cara Pakai
```sh
nuclei -h
```
Ini akan menampilkan bantuan untuk alat tersebut. Berikut adalah semua flag yang didukungnya.
```console
Nuclei is a fast, template based vulnerability scanner focusing
on extensive configurability, massive extensibility and ease of use.
Usage:
./nuclei [flags]
Flags:
TARGET:
-u, -target string[] target URLs/hosts to scan
-l, -list string path to file containing a list of target URLs/hosts to scan (one per line)
-resume string resume scan from and save to specified file (clustering will be disabled)
-sa, -scan-all-ips scan all the IP's associated with dns record
-iv, -ip-version string[] IP version to scan of hostname (4,6) - (default 4)
TEMPLATES:
-nt, -new-templates run only new templates added in latest nuclei-templates release
-ntv, -new-templates-version string[] run new templates added in specific version
-as, -automatic-scan automatic 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)
-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)
-validate validate the passed templates to nuclei
-nss, -no-strict-syntax disable strict syntax check on templates
-td, -template-display displays the templates content
-tl list all available templates
-sign signs the templates with the private key defined in NUCLEI_SIGNATURE_PRIVATE_KEY env variable
-code enable loading code protocol-based templates
FILTERING:
-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)
-eid, -exclude-id string[] templates to exclude based on template ids (comma-separated, file)
-it, -include-templates string[] templates to be executed even if they are excluded either by default or configuration
-et, -exclude-templates string[] template or template 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
-ept, -exclude-type value[] templates to exclude based on protocol type. Possible values: dns, file, http, headless, tcp, workflow, ssl, websocket, whois
-tc, -template-condition string[] templates to run based on expression condition
OUTPUT:
-o, -output string output file to write found issues/vulnerabilities
-sresp, -store-resp store all request/response passed through nuclei to output directory
-srd, -store-resp-dir string store all request/response passed through nuclei to custom directory (default "output")
-silent display findings only
-nc, -no-color disable output content coloring (ANSI escape codes)
-j, -jsonl write output in JSONL(ines) format
-irr, -include-rr include request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only) [DEPRECATED use -omit-raw] (default true)
-or, -omit-raw omit request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only)
-nm, -no-meta disable printing result metadata in cli output
-ts, -timestamp enables printing timestamp in cli output
-rdb, -report-db string nuclei reporting database (always use this to persist report data)
-ms, -matcher-status display match failure status
-me, -markdown-export string directory to export results in markdown format
-se, -sarif-export string file to export results in SARIF format
-je, -json-export string file to export results in JSON format
-jle, -jsonl-export string file to export results in JSONL(ine) format
CONFIGURATIONS:
-config string path to the nuclei configuration file
-fr, -follow-redirects enable following redirects for http templates
-fhr, -follow-host-redirects follow redirects on the same host
-mr, -max-redirects int max number of redirects to follow for http templates (default 10)
-dr, -disable-redirects disable redirects for http templates
-rc, -report-config string nuclei reporting module configuration file
-H, -header string[] custom header/cookie to include in all http request in header:value format (cli, file)
-V, -var value custom vars in key=value format
-r, -resolvers string file containing resolver list for nuclei
-sr, -system-resolvers use system DNS resolving as error fallback
-dc, -disable-clustering disable clustering of requests
-passive enable passive HTTP response processing mode
-fh2, -force-http2 force http2 connection on requests
-ev, -env-vars enable environment variables to be used in template
-cc, -client-cert string client certificate file (PEM-encoded) used for authenticating against scanned hosts
-ck, -client-key string client key file (PEM-encoded) used for authenticating against scanned hosts
-ca, -client-ca string client certificate authority file (PEM-encoded) used for authenticating against scanned hosts
-sml, -show-match-line show match lines for file templates, works with extractors only
-ztls use ztls library with autofallback to standard one for tls13 [Deprecated] autofallback to ztls is enabled by default
-sni string tls sni hostname to use (default: input domain name)
-lfa, -allow-local-file-access allows file (payload) access anywhere on the system
-lna, -restrict-local-network-access blocks connections to the local / private network
-i, -interface string network interface to use for network scan
-at, -attack-type string type of payload combinations to perform (batteringram,pitchfork,clusterbomb)
-sip, -source-ip string source ip address to use for network scan
-config-directory string override the default config path ($home/.config)
-rsr, -response-size-read int max response size to read in bytes (default 10485760)
-rss, -response-size-save int max response size to read in bytes (default 1048576)
-reset reset removes all nuclei configuration and data files (including nuclei-templates)
-tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization
INTERACTSH:
-iserver, -interactsh-server string interactsh server url for self-hosted instance (default: oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me)
-itoken, -interactsh-token string authentication token for self-hosted interactsh server
-interactions-cache-size int number of requests to keep in the interactions cache (default 5000)
-interactions-eviction int number of seconds to wait before evicting reque
gitextract_eat1zd1s/
├── .github/
│ ├── DISCUSSION_TEMPLATE.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ ├── config.yml
│ │ └── reference-templates/
│ │ ├── README.md
│ │ └── feature-request-reference.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── auto_assign.yml
│ ├── dependabot.yml
│ ├── release.yml
│ └── workflows/
│ ├── auto-merge.yaml
│ ├── compat-checks.yaml
│ ├── flamegraph.yaml
│ ├── generate-docs.yaml
│ ├── generate-pgo.yaml
│ ├── govulncheck.yaml
│ ├── memogen.yaml
│ ├── perf-regression.yaml
│ ├── release.yaml
│ ├── stale.yaml
│ ├── tests.yaml
│ └── typos.yaml
├── .goreleaser.yml
├── .run/
│ ├── DSLFunctionsIT.run.xml
│ ├── IntegrationTests.run.xml
│ ├── RegressionTests.run.xml
│ └── UnitTests.run.xml
├── CLAUDE.md
├── CONTRIBUTING.md
├── DEBUG.md
├── DESIGN.md
├── Dockerfile
├── Dockerfile.goreleaser
├── LICENSE.md
├── Makefile
├── README.md
├── README_CN.md
├── README_ES.md
├── README_ID.md
├── README_JP.md
├── README_KR.md
├── README_PT-BR.md
├── README_TR.md
├── SYNTAX-REFERENCE.md
├── THANKS.md
├── _typos.toml
├── cmd/
│ ├── docgen/
│ │ └── docgen.go
│ ├── functional-test/
│ │ ├── main.go
│ │ ├── run.sh
│ │ ├── targets-1000.txt
│ │ ├── targets-150.txt
│ │ ├── targets-250.txt
│ │ ├── targets.txt
│ │ └── testcases.txt
│ ├── generate-checksum/
│ │ └── main.go
│ ├── integration-test/
│ │ ├── code.go
│ │ ├── custom-dir.go
│ │ ├── dns.go
│ │ ├── dsl.go
│ │ ├── exporters.go
│ │ ├── file.go
│ │ ├── flow.go
│ │ ├── fuzz.go
│ │ ├── generic.go
│ │ ├── headless.go
│ │ ├── http.go
│ │ ├── integration-test.go
│ │ ├── interactsh.go
│ │ ├── javascript.go
│ │ ├── library.go
│ │ ├── loader.go
│ │ ├── matcher-status.go
│ │ ├── multi.go
│ │ ├── network.go
│ │ ├── offline-http.go
│ │ ├── profile-loader.go
│ │ ├── ssl.go
│ │ ├── template-dir.go
│ │ ├── template-path.go
│ │ ├── templates-dir-env.go
│ │ ├── websocket.go
│ │ ├── whois.go
│ │ └── workflow.go
│ ├── memogen/
│ │ ├── function.tpl
│ │ └── memogen.go
│ ├── nuclei/
│ │ ├── issue-tracker-config.yaml
│ │ ├── main.go
│ │ ├── main_benchmark_test.go
│ │ └── testdata/
│ │ └── benchmark/
│ │ └── multiproto/
│ │ ├── basic-template-multiproto-mixed.yaml
│ │ ├── basic-template-multiproto-raw.yaml
│ │ └── basic-template-multiproto.yaml
│ ├── scan-charts/
│ │ └── main.go
│ ├── tmc/
│ │ ├── main.go
│ │ └── types.go
│ └── tools/
│ ├── fuzzplayground/
│ │ └── main.go
│ └── signer/
│ └── main.go
├── examples/
│ ├── advanced/
│ │ └── advanced.go
│ ├── simple/
│ │ └── simple.go
│ └── with_speed_control/
│ └── main.go
├── gh_retry.sh
├── go.mod
├── go.sum
├── helm/
│ ├── Chart.yaml
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── hpa.yaml
│ │ ├── interactsh-deployment.yaml
│ │ ├── interactsh-ingress.yaml
│ │ ├── interactsh-service.yaml
│ │ ├── nuclei-configmap.yaml
│ │ ├── nuclei-cron.yaml
│ │ └── serviceaccount.yaml
│ └── values.yaml
├── integration_tests/
│ ├── debug.sh
│ ├── dsl/
│ │ ├── hide-version-warning.yaml
│ │ └── show-version-warning.yaml
│ ├── flow/
│ │ ├── conditional-flow-negative.yaml
│ │ ├── conditional-flow.yaml
│ │ ├── dns-ns-probe.yaml
│ │ ├── flow-hide-matcher.yaml
│ │ ├── iterate-one-value-flow.yaml
│ │ └── iterate-values-flow.yaml
│ ├── fuzz/
│ │ ├── fuzz-body-generic-sqli.yaml
│ │ ├── fuzz-body-json-sqli.yaml
│ │ ├── fuzz-body-multipart-form-sqli.yaml
│ │ ├── fuzz-body-params-sqli.yaml
│ │ ├── fuzz-body-xml-sqli.yaml
│ │ ├── fuzz-body.yaml
│ │ ├── fuzz-cookie-error-sqli.yaml
│ │ ├── fuzz-headless.yaml
│ │ ├── fuzz-host-header-injection.yaml
│ │ ├── fuzz-mode.yaml
│ │ ├── fuzz-multi-mode.yaml
│ │ ├── fuzz-path-sqli.yaml
│ │ ├── fuzz-query-num-replace.yaml
│ │ ├── fuzz-query.yaml
│ │ ├── fuzz-type.yaml
│ │ └── testData/
│ │ └── ginandjuice.proxify.yaml
│ ├── generic/
│ │ └── auth/
│ │ └── certificate/
│ │ ├── assets/
│ │ │ ├── client.crt
│ │ │ ├── client.key
│ │ │ └── server.crt
│ │ └── http-get.yaml
│ ├── library/
│ │ ├── test.json
│ │ └── test.yaml
│ ├── loader/
│ │ ├── basic.yaml
│ │ ├── condition-matched.yaml
│ │ ├── excluded-template.yaml
│ │ ├── get-headers.yaml
│ │ ├── get.yaml
│ │ ├── template-list.yaml
│ │ └── workflow-list.yaml
│ ├── profile-loader/
│ │ └── basic.yml
│ ├── protocols/
│ │ ├── code/
│ │ │ ├── pre-condition.yaml
│ │ │ ├── ps1-snippet.yaml
│ │ │ ├── pwsh-echo.yaml
│ │ │ ├── py-env-var.yaml
│ │ │ ├── py-file.yaml
│ │ │ ├── py-interactsh.yaml
│ │ │ ├── py-nosig.yaml
│ │ │ ├── py-snippet.yaml
│ │ │ ├── py-virtual.yaml
│ │ │ ├── pyfile.py
│ │ │ ├── sh-virtual.yaml
│ │ │ └── unsigned.yaml
│ │ ├── dns/
│ │ │ ├── a.yaml
│ │ │ ├── aaaa.yaml
│ │ │ ├── caa.yaml
│ │ │ ├── cname-fingerprint.yaml
│ │ │ ├── cname.yaml
│ │ │ ├── dsl-matcher-variable.yaml
│ │ │ ├── ns.yaml
│ │ │ ├── payload.yaml
│ │ │ ├── ptr.yaml
│ │ │ ├── srv.yaml
│ │ │ ├── tlsa.yaml
│ │ │ ├── txt.yaml
│ │ │ └── variables.yaml
│ │ ├── file/
│ │ │ ├── data/
│ │ │ │ ├── test1.txt
│ │ │ │ ├── test2.txt
│ │ │ │ └── test3.txt
│ │ │ ├── extract.yaml
│ │ │ ├── matcher-with-and.yaml
│ │ │ ├── matcher-with-nested-and.yaml
│ │ │ └── matcher-with-or.yaml
│ │ ├── headless/
│ │ │ ├── file-upload-negative.yaml
│ │ │ ├── file-upload.yaml
│ │ │ ├── headless-basic.yaml
│ │ │ ├── headless-dsl.yaml
│ │ │ ├── headless-extract-values.yaml
│ │ │ ├── headless-header-action.yaml
│ │ │ ├── headless-header-status-test.yaml
│ │ │ ├── headless-local.yaml
│ │ │ ├── headless-payloads.yaml
│ │ │ ├── headless-self-contained.yaml
│ │ │ ├── headless-waitevent.yaml
│ │ │ └── variables.yaml
│ │ ├── http/
│ │ │ ├── annotation-timeout.yaml
│ │ │ ├── cl-body-with-header.yaml
│ │ │ ├── cl-body-without-header.yaml
│ │ │ ├── cli-with-constants.yaml
│ │ │ ├── constants-with-threads.yaml
│ │ │ ├── custom-attack-type.yaml
│ │ │ ├── default-matcher-condition.yaml
│ │ │ ├── disable-path-automerge.yaml
│ │ │ ├── disable-redirects.yaml
│ │ │ ├── dsl-functions.yaml
│ │ │ ├── dsl-matcher-variable.yaml
│ │ │ ├── get-all-ips.yaml
│ │ │ ├── get-case-insensitive.yaml
│ │ │ ├── get-headers.yaml
│ │ │ ├── get-host-redirects.yaml
│ │ │ ├── get-override-sni.yaml
│ │ │ ├── get-query-string.yaml
│ │ │ ├── get-redirects-chain-headers.yaml
│ │ │ ├── get-redirects.yaml
│ │ │ ├── get-sni-unsafe.yaml
│ │ │ ├── get-sni.yaml
│ │ │ ├── get-without-scheme.yaml
│ │ │ ├── get.yaml
│ │ │ ├── http-matcher-extractor-dy-extractor.yaml
│ │ │ ├── http-paths.yaml
│ │ │ ├── http-preprocessor.yaml
│ │ │ ├── interactsh-requests-mc-and.yaml
│ │ │ ├── interactsh-stop-at-first-match.yaml
│ │ │ ├── interactsh-with-payloads.yaml
│ │ │ ├── interactsh.yaml
│ │ │ ├── matcher-status-and-cluster.yaml
│ │ │ ├── matcher-status-and.yaml
│ │ │ ├── matcher-status.yaml
│ │ │ ├── multi-http-var-sharing.yaml
│ │ │ ├── multi-request.yaml
│ │ │ ├── post-body.yaml
│ │ │ ├── post-json-body.yaml
│ │ │ ├── post-multipart-body.yaml
│ │ │ ├── race-condition-with-delay.yaml
│ │ │ ├── race-multiple.yaml
│ │ │ ├── race-simple.yaml
│ │ │ ├── race-with-variables.yaml
│ │ │ ├── raw-cookie-reuse.yaml
│ │ │ ├── raw-dynamic-extractor.yaml
│ │ │ ├── raw-get-query.yaml
│ │ │ ├── raw-get.yaml
│ │ │ ├── raw-path-single-slash.yaml
│ │ │ ├── raw-path-trailing-slash.yaml
│ │ │ ├── raw-payload.yaml
│ │ │ ├── raw-post-body.yaml
│ │ │ ├── raw-unsafe-path-single-slash.yaml
│ │ │ ├── raw-unsafe-path.yaml
│ │ │ ├── raw-unsafe-request.yaml
│ │ │ ├── raw-unsafe-with-params.yaml
│ │ │ ├── raw-with-params.yaml
│ │ │ ├── redirect-match-url.yaml
│ │ │ ├── request-condition-new.yaml
│ │ │ ├── request-condition.yaml
│ │ │ ├── response-data-literal-reuse.yaml
│ │ │ ├── self-contained-file-input.yaml
│ │ │ ├── self-contained-with-params.yaml
│ │ │ ├── self-contained-with-path.yaml
│ │ │ ├── self-contained.yaml
│ │ │ ├── stop-at-first-match-with-extractors.yaml
│ │ │ ├── stop-at-first-match.yaml
│ │ │ ├── variable-dsl-function.yaml
│ │ │ ├── variables-threads-previous.yaml
│ │ │ └── variables.yaml
│ │ ├── javascript/
│ │ │ ├── multi-ports.yaml
│ │ │ ├── mysql-connect.yaml
│ │ │ ├── net-https.yaml
│ │ │ ├── net-multi-step.yaml
│ │ │ ├── no-port-args.yaml
│ │ │ ├── postgres-pass-brute.yaml
│ │ │ ├── redis-pass-brute.yaml
│ │ │ ├── rsync-test.yaml
│ │ │ ├── ssh-server-fingerprint.yaml
│ │ │ ├── telnet-auth-test.yaml
│ │ │ └── vnc-pass-brute.yaml
│ │ ├── keys/
│ │ │ ├── README.md
│ │ │ ├── ci-private-key.pem
│ │ │ └── ci.crt
│ │ ├── multi/
│ │ │ ├── dynamic-values.yaml
│ │ │ ├── evaluate-variables.yaml
│ │ │ └── exported-response-vars.yaml
│ │ ├── network/
│ │ │ ├── basic.yaml
│ │ │ ├── hex.yaml
│ │ │ ├── multi-step.yaml
│ │ │ ├── net-https-timeout.yaml
│ │ │ ├── net-https.yaml
│ │ │ ├── network-port.yaml
│ │ │ ├── same-address.yaml
│ │ │ ├── self-contained.yaml
│ │ │ └── variables.yaml
│ │ ├── offlinehttp/
│ │ │ ├── data/
│ │ │ │ └── req-resp-with-http-keywords.txt
│ │ │ ├── offline-allowed-paths.yaml
│ │ │ ├── offline-raw.yaml
│ │ │ └── rfc-req-resp.yaml
│ │ ├── ssl/
│ │ │ ├── basic-ztls.yaml
│ │ │ ├── basic.yaml
│ │ │ ├── custom-cipher.yaml
│ │ │ ├── custom-version.yaml
│ │ │ ├── multi-req.yaml
│ │ │ └── ssl-with-vars.yaml
│ │ ├── websocket/
│ │ │ ├── basic.yaml
│ │ │ ├── cswsh.yaml
│ │ │ ├── no-cswsh.yaml
│ │ │ └── path.yaml
│ │ └── whois/
│ │ └── basic.yaml
│ ├── run.sh
│ ├── subdomains.txt
│ ├── test-issue-tracker-config1.yaml
│ ├── test-issue-tracker-config2.yaml
│ └── workflow/
│ ├── basic.yaml
│ ├── code-template-1.yaml
│ ├── code-template-2.yaml
│ ├── code-value-share-workflow.yaml
│ ├── complex-conditions.yaml
│ ├── condition-matched.yaml
│ ├── condition-unmatched.yaml
│ ├── dns-value-share-template-1.yaml
│ ├── dns-value-share-template-2.yaml
│ ├── dns-value-share-template-3.yaml
│ ├── dns-value-share-workflow.yaml
│ ├── headless-1.yaml
│ ├── http-1.yaml
│ ├── http-2.yaml
│ ├── http-3.yaml
│ ├── http-value-share-template-1.yaml
│ ├── http-value-share-template-2.yaml
│ ├── http-value-share-workflow.yaml
│ ├── match-1.yaml
│ ├── match-2.yaml
│ ├── match-3.yaml
│ ├── matcher-name.yaml
│ ├── multimatch-value-share-template.yaml
│ ├── multimatch-value-share-workflow.yaml
│ ├── multiprotocol-value-share-template.yaml
│ ├── multiprotocol-value-share-workflow.yaml
│ ├── nomatch-1.yaml
│ └── shared-cookie.yaml
├── internal/
│ ├── colorizer/
│ │ └── colorizer.go
│ ├── httpapi/
│ │ └── apiendpoint.go
│ ├── pdcp/
│ │ ├── utils.go
│ │ └── writer.go
│ ├── runner/
│ │ ├── banner.go
│ │ ├── healthcheck.go
│ │ ├── inputs.go
│ │ ├── lazy.go
│ │ ├── options.go
│ │ ├── options_test.go
│ │ ├── proxy.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ └── templates.go
│ └── server/
│ ├── dedupe.go
│ ├── nuclei_sdk.go
│ ├── requests_worker.go
│ ├── scope/
│ │ ├── extensions.go
│ │ ├── scope.go
│ │ └── scope_test.go
│ ├── server.go
│ └── templates/
│ └── index.html
├── lib/
│ ├── README.md
│ ├── config.go
│ ├── example_test.go
│ ├── helper.go
│ ├── multi.go
│ ├── sdk.go
│ ├── sdk_private.go
│ ├── sdk_test.go
│ └── tests/
│ └── sdk_test.go
├── nuclei-jsonschema.json
├── pkg/
│ ├── authprovider/
│ │ ├── authx/
│ │ │ ├── basic_auth.go
│ │ │ ├── bearer_auth.go
│ │ │ ├── cookies_auth.go
│ │ │ ├── dynamic.go
│ │ │ ├── dynamic_test.go
│ │ │ ├── file.go
│ │ │ ├── file_test.go
│ │ │ ├── headers_auth.go
│ │ │ ├── query_auth.go
│ │ │ ├── strategy.go
│ │ │ └── testData/
│ │ │ └── example-auth.yaml
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── interface.go
│ │ └── multi.go
│ ├── catalog/
│ │ ├── aws/
│ │ │ ├── catalog.go
│ │ │ └── catalog_test.go
│ │ ├── catalog.go
│ │ ├── config/
│ │ │ ├── constants.go
│ │ │ ├── ignorefile.go
│ │ │ ├── nucleiconfig.go
│ │ │ ├── template.go
│ │ │ └── template_test.go
│ │ ├── disk/
│ │ │ ├── catalog.go
│ │ │ ├── errors.go
│ │ │ ├── find.go
│ │ │ ├── known-files.go
│ │ │ └── path.go
│ │ ├── index/
│ │ │ ├── filter.go
│ │ │ ├── filter_test.go
│ │ │ ├── index.go
│ │ │ ├── index_test.go
│ │ │ └── metadata.go
│ │ └── loader/
│ │ ├── ai_loader.go
│ │ ├── filter/
│ │ │ └── path_filter.go
│ │ ├── loader.go
│ │ ├── loader_bench_test.go
│ │ ├── loader_test.go
│ │ └── remote_loader.go
│ ├── core/
│ │ ├── engine.go
│ │ ├── engine_test.go
│ │ ├── execute_options.go
│ │ ├── executors.go
│ │ ├── executors_test.go
│ │ ├── workflow_execute.go
│ │ ├── workflow_execute_test.go
│ │ └── workpool.go
│ ├── external/
│ │ └── customtemplates/
│ │ ├── azure_blob.go
│ │ ├── github.go
│ │ ├── github_test.go
│ │ ├── gitlab.go
│ │ ├── s3.go
│ │ └── templates_provider.go
│ ├── fuzz/
│ │ ├── analyzers/
│ │ │ ├── analyzers.go
│ │ │ └── time/
│ │ │ ├── analyzer.go
│ │ │ ├── time_delay.go
│ │ │ └── time_delay_test.go
│ │ ├── component/
│ │ │ ├── body.go
│ │ │ ├── body_test.go
│ │ │ ├── component.go
│ │ │ ├── cookie.go
│ │ │ ├── cookie_test.go
│ │ │ ├── headers.go
│ │ │ ├── headers_test.go
│ │ │ ├── path.go
│ │ │ ├── path_test.go
│ │ │ ├── query.go
│ │ │ ├── query_test.go
│ │ │ ├── value.go
│ │ │ └── value_test.go
│ │ ├── dataformat/
│ │ │ ├── dataformat.go
│ │ │ ├── dataformat_test.go
│ │ │ ├── form.go
│ │ │ ├── json.go
│ │ │ ├── kv.go
│ │ │ ├── multipart.go
│ │ │ ├── multipart_test.go
│ │ │ ├── raw.go
│ │ │ └── xml.go
│ │ ├── doc.go
│ │ ├── execute.go
│ │ ├── execute_race_test.go
│ │ ├── frequency/
│ │ │ └── tracker.go
│ │ ├── fuzz.go
│ │ ├── fuzz_test.go
│ │ ├── parts.go
│ │ ├── parts_frequency_test.go
│ │ ├── parts_test.go
│ │ ├── stats/
│ │ │ ├── db.go
│ │ │ ├── db_test.go
│ │ │ ├── simple.go
│ │ │ └── stats.go
│ │ └── type.go
│ ├── input/
│ │ ├── README.md
│ │ ├── formats/
│ │ │ ├── README.md
│ │ │ ├── burp/
│ │ │ │ ├── burp.go
│ │ │ │ └── burp_test.go
│ │ │ ├── formats.go
│ │ │ ├── json/
│ │ │ │ ├── json.go
│ │ │ │ └── json_test.go
│ │ │ ├── openapi/
│ │ │ │ ├── downloader.go
│ │ │ │ ├── downloader_test.go
│ │ │ │ ├── examples.go
│ │ │ │ ├── generator.go
│ │ │ │ ├── openapi.go
│ │ │ │ └── openapi_test.go
│ │ │ ├── swagger/
│ │ │ │ ├── downloader.go
│ │ │ │ ├── downloader_test.go
│ │ │ │ ├── swagger.go
│ │ │ │ └── swagger_test.go
│ │ │ ├── testdata/
│ │ │ │ ├── burp.xml
│ │ │ │ ├── ginandjuice.proxify.json
│ │ │ │ ├── ginandjuice.proxify.yaml
│ │ │ │ ├── openapi.yaml
│ │ │ │ ├── postman.json
│ │ │ │ ├── swagger.yaml
│ │ │ │ └── ytt/
│ │ │ │ ├── ginandjuice.ytt.yaml
│ │ │ │ ├── ytt-profile.yaml
│ │ │ │ └── ytt-vars.yaml
│ │ │ └── yaml/
│ │ │ ├── multidoc.go
│ │ │ ├── multidoc_test.go
│ │ │ └── ytt.go
│ │ ├── provider/
│ │ │ ├── chunked.go
│ │ │ ├── http/
│ │ │ │ └── multiformat.go
│ │ │ ├── interface.go
│ │ │ ├── list/
│ │ │ │ ├── hmap.go
│ │ │ │ ├── hmap_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── AS134029.txt
│ │ │ │ │ └── AS14421.txt
│ │ │ │ └── utils.go
│ │ │ └── simple.go
│ │ ├── transform.go
│ │ ├── transform_test.go
│ │ └── types/
│ │ ├── http.go
│ │ ├── http_test.go
│ │ └── probe.go
│ ├── installer/
│ │ ├── doc.go
│ │ ├── template.go
│ │ ├── template_test.go
│ │ ├── util.go
│ │ ├── versioncheck.go
│ │ ├── versioncheck_test.go
│ │ └── zipslip_unix_test.go
│ ├── js/
│ │ ├── CONTRIBUTE.md
│ │ ├── DESIGN.md
│ │ ├── THANKS.md
│ │ ├── compiler/
│ │ │ ├── compiler.go
│ │ │ ├── compiler_test.go
│ │ │ ├── init.go
│ │ │ ├── non-pool.go
│ │ │ └── pool.go
│ │ ├── devtools/
│ │ │ ├── README.md
│ │ │ ├── bindgen/
│ │ │ │ ├── INSTALL.md
│ │ │ │ ├── README.md
│ │ │ │ ├── cmd/
│ │ │ │ │ └── bindgen/
│ │ │ │ │ └── main.go
│ │ │ │ ├── generator.go
│ │ │ │ ├── output.go
│ │ │ │ └── templates/
│ │ │ │ ├── go_class.tmpl
│ │ │ │ ├── js_class.tmpl
│ │ │ │ └── markdown_class.tmpl
│ │ │ ├── scrapefuncs/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ └── tsgen/
│ │ │ ├── README.md
│ │ │ ├── astutil.go
│ │ │ ├── cmd/
│ │ │ │ └── tsgen/
│ │ │ │ ├── main.go
│ │ │ │ └── tsmodule.go.tmpl
│ │ │ ├── parser.go
│ │ │ ├── scrape.go
│ │ │ └── types.go
│ │ ├── generated/
│ │ │ ├── README.md
│ │ │ ├── go/
│ │ │ │ ├── libbytes/
│ │ │ │ │ └── bytes.go
│ │ │ │ ├── libfs/
│ │ │ │ │ └── fs.go
│ │ │ │ ├── libgoconsole/
│ │ │ │ │ └── goconsole.go
│ │ │ │ ├── libikev2/
│ │ │ │ │ └── ikev2.go
│ │ │ │ ├── libkerberos/
│ │ │ │ │ └── kerberos.go
│ │ │ │ ├── libldap/
│ │ │ │ │ └── ldap.go
│ │ │ │ ├── libmssql/
│ │ │ │ │ └── mssql.go
│ │ │ │ ├── libmysql/
│ │ │ │ │ └── mysql.go
│ │ │ │ ├── libnet/
│ │ │ │ │ └── net.go
│ │ │ │ ├── liboracle/
│ │ │ │ │ └── oracle.go
│ │ │ │ ├── libpop3/
│ │ │ │ │ └── pop3.go
│ │ │ │ ├── libpostgres/
│ │ │ │ │ └── postgres.go
│ │ │ │ ├── librdp/
│ │ │ │ │ └── rdp.go
│ │ │ │ ├── libredis/
│ │ │ │ │ └── redis.go
│ │ │ │ ├── librsync/
│ │ │ │ │ └── rsync.go
│ │ │ │ ├── libsmb/
│ │ │ │ │ └── smb.go
│ │ │ │ ├── libsmtp/
│ │ │ │ │ └── smtp.go
│ │ │ │ ├── libssh/
│ │ │ │ │ └── ssh.go
│ │ │ │ ├── libstructs/
│ │ │ │ │ └── structs.go
│ │ │ │ ├── libtelnet/
│ │ │ │ │ └── telnet.go
│ │ │ │ └── libvnc/
│ │ │ │ └── vnc.go
│ │ │ └── ts/
│ │ │ ├── bytes.ts
│ │ │ ├── fs.ts
│ │ │ ├── goconsole.ts
│ │ │ ├── ikev2.ts
│ │ │ ├── index.ts
│ │ │ ├── kerberos.ts
│ │ │ ├── ldap.ts
│ │ │ ├── mssql.ts
│ │ │ ├── mysql.ts
│ │ │ ├── net.ts
│ │ │ ├── oracle.ts
│ │ │ ├── pop3.ts
│ │ │ ├── postgres.ts
│ │ │ ├── rdp.ts
│ │ │ ├── redis.ts
│ │ │ ├── rsync.ts
│ │ │ ├── smb.ts
│ │ │ ├── smtp.ts
│ │ │ ├── ssh.ts
│ │ │ ├── structs.ts
│ │ │ ├── telnet.ts
│ │ │ └── vnc.ts
│ │ ├── global/
│ │ │ ├── exports.js
│ │ │ ├── helpers.go
│ │ │ ├── js/
│ │ │ │ ├── active_directory.js
│ │ │ │ └── dump.js
│ │ │ ├── scripts.go
│ │ │ └── scripts_test.go
│ │ ├── gojs/
│ │ │ ├── gojs.go
│ │ │ └── set.go
│ │ ├── libs/
│ │ │ ├── LICENSE.md
│ │ │ ├── bytes/
│ │ │ │ └── buffer.go
│ │ │ ├── fs/
│ │ │ │ └── fs.go
│ │ │ ├── goconsole/
│ │ │ │ └── log.go
│ │ │ ├── ikev2/
│ │ │ │ └── ikev2.go
│ │ │ ├── kerberos/
│ │ │ │ ├── kerberosx.go
│ │ │ │ └── sendtokdc.go
│ │ │ ├── ldap/
│ │ │ │ ├── adenum.go
│ │ │ │ ├── ldap.go
│ │ │ │ └── utils.go
│ │ │ ├── mssql/
│ │ │ │ ├── memo.mssql.go
│ │ │ │ └── mssql.go
│ │ │ ├── mysql/
│ │ │ │ ├── memo.mysql.go
│ │ │ │ ├── memo.mysql_private.go
│ │ │ │ ├── mysql.go
│ │ │ │ └── mysql_private.go
│ │ │ ├── net/
│ │ │ │ └── net.go
│ │ │ ├── oracle/
│ │ │ │ ├── memo.oracle.go
│ │ │ │ ├── oracle.go
│ │ │ │ └── oracledialer.go
│ │ │ ├── pop3/
│ │ │ │ ├── memo.pop3.go
│ │ │ │ └── pop3.go
│ │ │ ├── postgres/
│ │ │ │ ├── memo.postgres.go
│ │ │ │ └── postgres.go
│ │ │ ├── rdp/
│ │ │ │ ├── memo.rdp.go
│ │ │ │ └── rdp.go
│ │ │ ├── redis/
│ │ │ │ ├── memo.redis.go
│ │ │ │ └── redis.go
│ │ │ ├── rsync/
│ │ │ │ ├── memo.rsync.go
│ │ │ │ └── rsync.go
│ │ │ ├── smb/
│ │ │ │ ├── memo.smb.go
│ │ │ │ ├── memo.smb_private.go
│ │ │ │ ├── memo.smbghost.go
│ │ │ │ ├── smb.go
│ │ │ │ ├── smb_private.go
│ │ │ │ └── smbghost.go
│ │ │ ├── smtp/
│ │ │ │ ├── msg.go
│ │ │ │ └── smtp.go
│ │ │ ├── ssh/
│ │ │ │ ├── memo.ssh.go
│ │ │ │ └── ssh.go
│ │ │ ├── structs/
│ │ │ │ ├── smbexploit.js
│ │ │ │ └── structs.go
│ │ │ ├── telnet/
│ │ │ │ ├── memo.telnet.go
│ │ │ │ └── telnet.go
│ │ │ └── vnc/
│ │ │ ├── memo.vnc.go
│ │ │ └── vnc.go
│ │ └── utils/
│ │ ├── nucleijs.go
│ │ ├── pgwrap/
│ │ │ └── pgwrap.go
│ │ └── util.go
│ ├── keys/
│ │ ├── key.go
│ │ └── nuclei.crt
│ ├── loader/
│ │ ├── parser/
│ │ │ └── parser.go
│ │ └── workflow/
│ │ └── workflow_loader.go
│ ├── model/
│ │ ├── model.go
│ │ ├── model_test.go
│ │ ├── types/
│ │ │ ├── severity/
│ │ │ │ ├── severities.go
│ │ │ │ ├── severity.go
│ │ │ │ └── severity_test.go
│ │ │ ├── stringslice/
│ │ │ │ ├── stringslice.go
│ │ │ │ └── stringslice_raw.go
│ │ │ └── userAgent/
│ │ │ └── user_agent.go
│ │ └── workflow_loader.go
│ ├── operators/
│ │ ├── cache/
│ │ │ ├── cache.go
│ │ │ └── cache_test.go
│ │ ├── common/
│ │ │ └── dsl/
│ │ │ ├── dsl.go
│ │ │ └── dsl_test.go
│ │ ├── extractors/
│ │ │ ├── compile.go
│ │ │ ├── doc.go
│ │ │ ├── extract.go
│ │ │ ├── extract_test.go
│ │ │ ├── extractor_types.go
│ │ │ ├── extractors.go
│ │ │ └── util.go
│ │ ├── matchers/
│ │ │ ├── compile.go
│ │ │ ├── doc.go
│ │ │ ├── match.go
│ │ │ ├── match_test.go
│ │ │ ├── matchers.go
│ │ │ ├── matchers_types.go
│ │ │ ├── validate.go
│ │ │ └── validate_test.go
│ │ ├── operators.go
│ │ └── operators_test.go
│ ├── output/
│ │ ├── doc.go
│ │ ├── file_output_writer.go
│ │ ├── format_json.go
│ │ ├── format_screen.go
│ │ ├── multi_writer.go
│ │ ├── output.go
│ │ ├── output_stats.go
│ │ ├── output_test.go
│ │ ├── standard_writer.go
│ │ └── stats/
│ │ ├── stats.go
│ │ ├── stats_test.go
│ │ └── waf/
│ │ ├── regexes.json
│ │ ├── waf.go
│ │ └── waf_test.go
│ ├── progress/
│ │ ├── doc.go
│ │ └── progress.go
│ ├── projectfile/
│ │ ├── httputil.go
│ │ └── project.go
│ ├── protocols/
│ │ ├── code/
│ │ │ ├── code.go
│ │ │ ├── code_test.go
│ │ │ └── helpers.go
│ │ ├── common/
│ │ │ ├── automaticscan/
│ │ │ │ ├── automaticscan.go
│ │ │ │ ├── automaticscan_test.go
│ │ │ │ ├── doc.go
│ │ │ │ └── util.go
│ │ │ ├── contextargs/
│ │ │ │ ├── contextargs.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── metainput.go
│ │ │ │ └── variables.go
│ │ │ ├── expressions/
│ │ │ │ ├── expressions.go
│ │ │ │ ├── expressions_test.go
│ │ │ │ ├── variables.go
│ │ │ │ └── variables_test.go
│ │ │ ├── generators/
│ │ │ │ ├── attack_types.go
│ │ │ │ ├── attack_types_test.go
│ │ │ │ ├── env.go
│ │ │ │ ├── env_test.go
│ │ │ │ ├── generators.go
│ │ │ │ ├── generators_test.go
│ │ │ │ ├── load.go
│ │ │ │ ├── load_test.go
│ │ │ │ ├── maps.go
│ │ │ │ ├── maps_bench_test.go
│ │ │ │ ├── maps_test.go
│ │ │ │ ├── options.go
│ │ │ │ ├── options_bench_test.go
│ │ │ │ ├── options_test.go
│ │ │ │ ├── slice.go
│ │ │ │ └── validate.go
│ │ │ ├── globalmatchers/
│ │ │ │ └── globalmatchers.go
│ │ │ ├── helpers/
│ │ │ │ ├── deserialization/
│ │ │ │ │ ├── deserialization.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── java.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ ├── Deserialize.java
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── ValueObject.java
│ │ │ │ ├── eventcreator/
│ │ │ │ │ └── eventcreator.go
│ │ │ │ ├── responsehighlighter/
│ │ │ │ │ ├── hexdump.go
│ │ │ │ │ ├── response_highlighter.go
│ │ │ │ │ └── response_highlighter_test.go
│ │ │ │ └── writer/
│ │ │ │ └── writer.go
│ │ │ ├── hosterrorscache/
│ │ │ │ ├── hosterrorscache.go
│ │ │ │ └── hosterrorscache_test.go
│ │ │ ├── interactsh/
│ │ │ │ ├── const.go
│ │ │ │ ├── interactsh.go
│ │ │ │ └── options.go
│ │ │ ├── marker/
│ │ │ │ └── marker.go
│ │ │ ├── protocolinit/
│ │ │ │ └── init.go
│ │ │ ├── protocolstate/
│ │ │ │ ├── context.go
│ │ │ │ ├── dialers.go
│ │ │ │ ├── file.go
│ │ │ │ ├── headless.go
│ │ │ │ ├── js.go
│ │ │ │ ├── memguardian.go
│ │ │ │ ├── memguardian_test.go
│ │ │ │ ├── memoizer.go
│ │ │ │ └── state.go
│ │ │ ├── randomip/
│ │ │ │ ├── randomip.go
│ │ │ │ └── randomip_test.go
│ │ │ ├── replacer/
│ │ │ │ ├── replacer.go
│ │ │ │ └── replacer_test.go
│ │ │ ├── uncover/
│ │ │ │ └── uncover.go
│ │ │ ├── utils/
│ │ │ │ ├── excludematchers/
│ │ │ │ │ ├── excludematchers.go
│ │ │ │ │ └── excludematchers_test.go
│ │ │ │ └── vardump/
│ │ │ │ ├── dump.go
│ │ │ │ ├── dump_test.go
│ │ │ │ └── vars.go
│ │ │ └── variables/
│ │ │ ├── doc.go
│ │ │ ├── variables.go
│ │ │ ├── variables_bench_test.go
│ │ │ └── variables_test.go
│ │ ├── dns/
│ │ │ ├── cluster.go
│ │ │ ├── dns.go
│ │ │ ├── dns_test.go
│ │ │ ├── dns_types.go
│ │ │ ├── dnsclientpool/
│ │ │ │ └── clientpool.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── file/
│ │ │ ├── file.go
│ │ │ ├── find.go
│ │ │ ├── find_test.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── headless/
│ │ │ ├── engine/
│ │ │ │ ├── action.go
│ │ │ │ ├── action_types.go
│ │ │ │ ├── engine.go
│ │ │ │ ├── hijack.go
│ │ │ │ ├── http_client.go
│ │ │ │ ├── instance.go
│ │ │ │ ├── page.go
│ │ │ │ ├── page_actions.go
│ │ │ │ ├── page_actions_test.go
│ │ │ │ ├── rules.go
│ │ │ │ └── util.go
│ │ │ ├── headless.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ └── request.go
│ │ ├── http/
│ │ │ ├── build_request.go
│ │ │ ├── build_request_test.go
│ │ │ ├── cluster.go
│ │ │ ├── cluster_test.go
│ │ │ ├── http.go
│ │ │ ├── http_method_types.go
│ │ │ ├── http_test.go
│ │ │ ├── httpclientpool/
│ │ │ │ ├── clientpool.go
│ │ │ │ ├── errors.go
│ │ │ │ └── options.go
│ │ │ ├── httputils/
│ │ │ │ ├── misc.go
│ │ │ │ └── spm.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── race/
│ │ │ │ └── syncedreadcloser.go
│ │ │ ├── raw/
│ │ │ │ ├── doc.go
│ │ │ │ ├── raw.go
│ │ │ │ └── raw_test.go
│ │ │ ├── request.go
│ │ │ ├── request_annotations.go
│ │ │ ├── request_annotations_test.go
│ │ │ ├── request_condition.go
│ │ │ ├── request_fuzz.go
│ │ │ ├── request_generator.go
│ │ │ ├── request_generator_test.go
│ │ │ ├── request_test.go
│ │ │ ├── signature.go
│ │ │ ├── signer/
│ │ │ │ ├── aws-sign.go
│ │ │ │ └── signer.go
│ │ │ ├── signerpool/
│ │ │ │ └── signerpool.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ └── validate.go
│ │ ├── javascript/
│ │ │ ├── js.go
│ │ │ ├── js_test.go
│ │ │ └── testcases/
│ │ │ ├── ms-sql-detect.yaml
│ │ │ ├── oracle-auth-test.yaml
│ │ │ ├── redis-pass-brute.yaml
│ │ │ └── ssh-server-fingerprint.yaml
│ │ ├── network/
│ │ │ ├── network.go
│ │ │ ├── network_input_types.go
│ │ │ ├── network_test.go
│ │ │ ├── networkclientpool/
│ │ │ │ └── clientpool.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── request.go
│ │ │ └── request_test.go
│ │ ├── offlinehttp/
│ │ │ ├── find.go
│ │ │ ├── find_test.go
│ │ │ ├── offlinehttp.go
│ │ │ ├── operators.go
│ │ │ ├── operators_test.go
│ │ │ ├── read_response.go
│ │ │ ├── read_response_test.go
│ │ │ └── request.go
│ │ ├── protocols.go
│ │ ├── ssl/
│ │ │ ├── ssl.go
│ │ │ └── ssl_test.go
│ │ ├── utils/
│ │ │ ├── fields.go
│ │ │ ├── fields_test.go
│ │ │ ├── http/
│ │ │ │ ├── requtils.go
│ │ │ │ └── requtils_test.go
│ │ │ ├── utils.go
│ │ │ ├── utils_test.go
│ │ │ ├── variables.go
│ │ │ └── variables_test.go
│ │ ├── websocket/
│ │ │ └── websocket.go
│ │ └── whois/
│ │ ├── rdapclientpool/
│ │ │ └── clientpool.go
│ │ └── whois.go
│ ├── reporting/
│ │ ├── client.go
│ │ ├── dedupe/
│ │ │ ├── dedupe.go
│ │ │ └── dedupe_test.go
│ │ ├── exporters/
│ │ │ ├── es/
│ │ │ │ └── elasticsearch.go
│ │ │ ├── jsonexporter/
│ │ │ │ └── jsonexporter.go
│ │ │ ├── jsonl/
│ │ │ │ └── jsonl.go
│ │ │ ├── markdown/
│ │ │ │ ├── markdown.go
│ │ │ │ └── util/
│ │ │ │ ├── markdown_formatter.go
│ │ │ │ ├── markdown_utils.go
│ │ │ │ └── markdown_utils_test.go
│ │ │ ├── mongo/
│ │ │ │ └── mongo.go
│ │ │ ├── pdf/
│ │ │ │ ├── pdf.go
│ │ │ │ └── pdf_test.go
│ │ │ ├── sarif/
│ │ │ │ └── sarif.go
│ │ │ └── splunk/
│ │ │ └── splunkhec.go
│ │ ├── format/
│ │ │ ├── format.go
│ │ │ ├── format_utils.go
│ │ │ └── format_utils_test.go
│ │ ├── options.go
│ │ ├── reporting.go
│ │ └── trackers/
│ │ ├── filters/
│ │ │ └── filters.go
│ │ ├── gitea/
│ │ │ └── gitea.go
│ │ ├── github/
│ │ │ └── github.go
│ │ ├── gitlab/
│ │ │ └── gitlab.go
│ │ ├── jira/
│ │ │ ├── jira.go
│ │ │ └── jira_test.go
│ │ └── linear/
│ │ ├── jsonutil/
│ │ │ └── jsonutil.go
│ │ └── linear.go
│ ├── scan/
│ │ ├── charts/
│ │ │ ├── charts.go
│ │ │ └── echarts.go
│ │ ├── events/
│ │ │ ├── scan_noop.go
│ │ │ ├── stats_build.go
│ │ │ └── utils.go
│ │ └── scan_context.go
│ ├── templates/
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── cluster.go
│ │ ├── cluster_test.go
│ │ ├── compile.go
│ │ ├── compile_bench_test.go
│ │ ├── compile_test.go
│ │ ├── doc.go
│ │ ├── extensions/
│ │ │ └── extensions.go
│ │ ├── log.go
│ │ ├── log_test.go
│ │ ├── parser.go
│ │ ├── parser_config.go
│ │ ├── parser_error.go
│ │ ├── parser_stats.go
│ │ ├── parser_test.go
│ │ ├── parser_validate.go
│ │ ├── preprocessors.go
│ │ ├── signer/
│ │ │ ├── default.go
│ │ │ ├── handler.go
│ │ │ ├── handler_test.go
│ │ │ ├── tmpl_signer.go
│ │ │ └── tmpl_signer_test.go
│ │ ├── stats.go
│ │ ├── tag_filter.go
│ │ ├── tag_filter_test.go
│ │ ├── template_sign.go
│ │ ├── templates.go
│ │ ├── templates_doc.go
│ │ ├── templates_doc_examples.go
│ │ ├── templates_test.go
│ │ ├── templates_utils.go
│ │ ├── tests/
│ │ │ ├── global-matcher.yaml
│ │ │ ├── json-template.json
│ │ │ ├── match-1.yaml
│ │ │ ├── multiproto.json
│ │ │ ├── multiproto.yaml
│ │ │ ├── no-author.yaml
│ │ │ ├── no-req.yaml
│ │ │ ├── workflow-global-matchers.yaml
│ │ │ ├── workflow-invalid.yaml
│ │ │ └── workflow.yaml
│ │ ├── types/
│ │ │ ├── cluster_mappings.go
│ │ │ └── types.go
│ │ ├── validator_singleton.go
│ │ └── workflows.go
│ ├── testutils/
│ │ ├── fuzzplayground/
│ │ │ ├── db.go
│ │ │ ├── server.go
│ │ │ └── sqli_test.go
│ │ ├── integration.go
│ │ ├── testheadless/
│ │ │ ├── headless_local.go
│ │ │ └── headless_runtime.go
│ │ └── testutils.go
│ ├── tmplexec/
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── exec.go
│ │ ├── flow/
│ │ │ ├── README.md
│ │ │ ├── builtin/
│ │ │ │ └── dedupe.go
│ │ │ ├── doc.go
│ │ │ ├── flow_executor.go
│ │ │ ├── flow_executor_test.go
│ │ │ ├── flow_internal.go
│ │ │ ├── testcases/
│ │ │ │ ├── condition-flow-extractors.yaml
│ │ │ │ ├── condition-flow-no-operators.yaml
│ │ │ │ ├── condition-flow.yaml
│ │ │ │ ├── nuclei-flow-dns-id.yaml
│ │ │ │ ├── nuclei-flow-dns-prefix.yaml
│ │ │ │ └── nuclei-flow-dns.yaml
│ │ │ ├── util.go
│ │ │ ├── util_test.go
│ │ │ └── vm.go
│ │ ├── generic/
│ │ │ └── exec.go
│ │ ├── interface.go
│ │ ├── multiproto/
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── multi.go
│ │ │ ├── multi_test.go
│ │ │ └── testcases/
│ │ │ ├── multiprotodynamic.yaml
│ │ │ └── multiprotowithprefix.yaml
│ │ └── utils/
│ │ └── utils.go
│ ├── types/
│ │ ├── interfaces.go
│ │ ├── nucleierr/
│ │ │ └── kinds.go
│ │ ├── resume.go
│ │ ├── scanstrategy/
│ │ │ └── scan_strategy.go
│ │ └── types.go
│ ├── utils/
│ │ ├── capture_writer.go
│ │ ├── expand/
│ │ │ └── expand.go
│ │ ├── http_probe.go
│ │ ├── http_probe_test.go
│ │ ├── index.go
│ │ ├── insertion_ordered_map.go
│ │ ├── insertion_ordered_map_test.go
│ │ ├── json/
│ │ │ ├── doc.go
│ │ │ ├── json.go
│ │ │ ├── json_fallback.go
│ │ │ ├── jsoncodec.go
│ │ │ └── message.go
│ │ ├── monitor/
│ │ │ ├── monitor.go
│ │ │ └── monitor_test.go
│ │ ├── stats/
│ │ │ ├── doc.go
│ │ │ └── stats.go
│ │ ├── telnetmini/
│ │ │ ├── doc.go
│ │ │ ├── ntlm.go
│ │ │ ├── smb.go
│ │ │ └── telnet.go
│ │ ├── template_path.go
│ │ ├── utils.go
│ │ ├── utils_test.go
│ │ └── yaml/
│ │ ├── preprocess.go
│ │ └── yaml_decode_wrapper.go
│ └── workflows/
│ ├── doc.go
│ ├── workflows.go
│ └── workflows_test.go
└── static/
└── regression-cycle.md
Showing preview only (429K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4633 symbols across 623 files)
FILE: cmd/docgen/docgen.go
function writeToFile (line 17) | func writeToFile(filename string, data []byte) {
function main (line 32) | func main() {
FILE: cmd/functional-test/main.go
function main (line 27) | func main() {
function runFunctionalTests (line 39) | func runFunctionalTests(debug bool) (error, bool) {
function runTestCases (line 61) | func runTestCases(file *os.File, debug bool) (bool, []string) {
function runTestCase (line 83) | func runTestCase(testCase string, debug bool) bool {
function runIndividualTestCase (line 93) | func runIndividualTestCase(testcase string, debug bool) error {
FILE: cmd/generate-checksum/main.go
function main (line 15) | func main() {
FILE: cmd/integration-test/code.go
constant testCertFile (line 33) | testCertFile = "protocols/keys/ci.crt"
constant testKeyFile (line 34) | testKeyFile = "protocols/keys/ci-private-key.pem"
function init (line 39) | func init() {
function getEnvValues (line 84) | func getEnvValues() []string {
type codeSnippet (line 90) | type codeSnippet struct
method Execute (line 93) | func (h *codeSnippet) Execute(filePath string) error {
type codePreCondition (line 101) | type codePreCondition struct
method Execute (line 104) | func (h *codePreCondition) Execute(filePath string) error {
type codeFile (line 117) | type codeFile struct
method Execute (line 120) | func (h *codeFile) Execute(filePath string) error {
type codeEnvVar (line 128) | type codeEnvVar struct
method Execute (line 131) | func (h *codeEnvVar) Execute(filePath string) error {
type unsignedCode (line 139) | type unsignedCode struct
method Execute (line 142) | func (h *unsignedCode) Execute(filePath string) error {
type codePyNoSig (line 154) | type codePyNoSig struct
method Execute (line 157) | func (h *codePyNoSig) Execute(filePath string) error {
FILE: cmd/integration-test/custom-dir.go
type customConfigDirTest (line 9) | type customConfigDirTest struct
method Execute (line 16) | func (h *customConfigDirTest) Execute(filePath string) error {
FILE: cmd/integration-test/dns.go
type dnsBasic (line 22) | type dnsBasic struct
method Execute (line 25) | func (h *dnsBasic) Execute(filePath string) error {
type dnsPtr (line 33) | type dnsPtr struct
method Execute (line 36) | func (h *dnsPtr) Execute(filePath string) error {
type dnsCAA (line 44) | type dnsCAA struct
method Execute (line 47) | func (h *dnsCAA) Execute(filePath string) error {
type dnsTLSA (line 55) | type dnsTLSA struct
method Execute (line 58) | func (h *dnsTLSA) Execute(filePath string) error {
type dnsVariables (line 66) | type dnsVariables struct
method Execute (line 69) | func (h *dnsVariables) Execute(filePath string) error {
type dnsPayload (line 77) | type dnsPayload struct
method Execute (line 80) | func (h *dnsPayload) Execute(filePath string) error {
type dnsDSLMatcherVariable (line 97) | type dnsDSLMatcherVariable struct
method Execute (line 100) | func (h *dnsDSLMatcherVariable) Execute(filePath string) error {
FILE: cmd/integration-test/dsl.go
type dslVersionWarning (line 19) | type dslVersionWarning struct
method Execute (line 21) | func (d *dslVersionWarning) Execute(templatePath string) error {
type dslShowVersionWarning (line 35) | type dslShowVersionWarning struct
method Execute (line 37) | func (d *dslShowVersionWarning) Execute(templatePath string) error {
FILE: cmd/integration-test/exporters.go
constant dbName (line 20) | dbName = "test"
constant dbImage (line 21) | dbImage = "mongo:8"
type mongoExporter (line 30) | type mongoExporter struct
method Execute (line 32) | func (m *mongoExporter) Execute(filepath string) error {
FILE: cmd/integration-test/file.go
type fileWithOrMatcher (line 14) | type fileWithOrMatcher struct
method Execute (line 17) | func (h *fileWithOrMatcher) Execute(filePath string) error {
type fileWithAndMatcher (line 26) | type fileWithAndMatcher struct
method Execute (line 29) | func (h *fileWithAndMatcher) Execute(filePath string) error {
type fileWithExtractor (line 38) | type fileWithExtractor struct
method Execute (line 41) | func (h *fileWithExtractor) Execute(filePath string) error {
FILE: cmd/integration-test/flow.go
type conditionalFlow (line 22) | type conditionalFlow struct
method Execute (line 24) | func (t *conditionalFlow) Execute(filePath string) error {
type conditionalFlowNegative (line 32) | type conditionalFlowNegative struct
method Execute (line 34) | func (t *conditionalFlowNegative) Execute(filePath string) error {
type iterateValuesFlow (line 42) | type iterateValuesFlow struct
method Execute (line 44) | func (t *iterateValuesFlow) Execute(filePath string) error {
type iterateOneValueFlow (line 74) | type iterateOneValueFlow struct
method Execute (line 76) | func (t *iterateOneValueFlow) Execute(filePath string) error {
type dnsNsProbe (line 84) | type dnsNsProbe struct
method Execute (line 86) | func (t *dnsNsProbe) Execute(filePath string) error {
function getBase64 (line 94) | func getBase64(input string) string {
type flowHideMatcher (line 98) | type flowHideMatcher struct
method Execute (line 100) | func (t *flowHideMatcher) Execute(filePath string) error {
FILE: cmd/integration-test/fuzz.go
constant targetFile (line 16) | targetFile = "fuzz/testData/ginandjuice.proxify.yaml"
type genericFuzzTestCase (line 38) | type genericFuzzTestCase struct
method Execute (line 42) | func (g *genericFuzzTestCase) Execute(filePath string) error {
type httpFuzzQuery (line 50) | type httpFuzzQuery struct
method Execute (line 53) | func (h *httpFuzzQuery) Execute(filePath string) error {
type fuzzModeOverride (line 70) | type fuzzModeOverride struct
method Execute (line 73) | func (h *fuzzModeOverride) Execute(filePath string) error {
type fuzzTypeOverride (line 115) | type fuzzTypeOverride struct
method Execute (line 118) | func (h *fuzzTypeOverride) Execute(filePath string) error {
type HeadlessFuzzingQuery (line 160) | type HeadlessFuzzingQuery struct
method Execute (line 163) | func (h *HeadlessFuzzingQuery) Execute(filePath string) error {
type fuzzMultipleMode (line 179) | type fuzzMultipleMode struct
method Execute (line 182) | func (h *fuzzMultipleMode) Execute(filePath string) error {
FILE: cmd/integration-test/generic.go
type clientCertificate (line 73) | type clientCertificate struct
method Execute (line 76) | func (h *clientCertificate) Execute(filePath string) error {
FILE: cmd/integration-test/headless.go
type headlessBasic (line 29) | type headlessBasic struct
method Execute (line 32) | func (h *headlessBasic) Execute(filePath string) error {
type headlessSelfContained (line 48) | type headlessSelfContained struct
method Execute (line 51) | func (h *headlessSelfContained) Execute(filePath string) error {
type headlessLocal (line 60) | type headlessLocal struct
method Execute (line 64) | func (h *headlessLocal) Execute(filePath string) error {
type headlessHeaderActions (line 81) | type headlessHeaderActions struct
method Execute (line 84) | func (h *headlessHeaderActions) Execute(filePath string) error {
type headlessExtractValues (line 103) | type headlessExtractValues struct
method Execute (line 106) | func (h *headlessExtractValues) Execute(filePath string) error {
type headlessPayloads (line 121) | type headlessPayloads struct
method Execute (line 124) | func (h *headlessPayloads) Execute(filePath string) error {
type headlessVariables (line 139) | type headlessVariables struct
method Execute (line 142) | func (h *headlessVariables) Execute(filePath string) error {
type headlessFileUpload (line 157) | type headlessFileUpload struct
method Execute (line 160) | func (h *headlessFileUpload) Execute(filePath string) error {
type headlessHeaderStatus (line 204) | type headlessHeaderStatus struct
method Execute (line 207) | func (h *headlessHeaderStatus) Execute(filePath string) error {
type headlessFileUploadNegative (line 216) | type headlessFileUploadNegative struct
method Execute (line 219) | func (h *headlessFileUploadNegative) Execute(filePath string) error {
FILE: cmd/integration-test/http.go
type httpMultiVarSharing (line 96) | type httpMultiVarSharing struct
method Execute (line 98) | func (h *httpMultiVarSharing) Execute(filePath string) error {
type httpResponseDataLiteralReuse (line 106) | type httpResponseDataLiteralReuse struct
method Execute (line 108) | func (h *httpResponseDataLiteralReuse) Execute(filePath string) error {
type httpMatcherExtractorDynamicExtractor (line 131) | type httpMatcherExtractorDynamicExtractor struct
method Execute (line 133) | func (h *httpMatcherExtractorDynamicExtractor) Execute(filePath string...
type httpInteractshRequest (line 168) | type httpInteractshRequest struct
method Execute (line 171) | func (h *httpInteractshRequest) Execute(filePath string) error {
type httpInteractshWithPayloadsRequest (line 192) | type httpInteractshWithPayloadsRequest struct
method Execute (line 195) | func (h *httpInteractshWithPayloadsRequest) Execute(filePath string) e...
type httpDefaultMatcherCondition (line 216) | type httpDefaultMatcherCondition struct
method Execute (line 219) | func (d *httpDefaultMatcherCondition) Execute(filePath string) error {
type httpInteractshStopAtFirstMatchRequest (line 262) | type httpInteractshStopAtFirstMatchRequest struct
method Execute (line 265) | func (h *httpInteractshStopAtFirstMatchRequest) Execute(filePath strin...
type httpGetHeaders (line 286) | type httpGetHeaders struct
method Execute (line 289) | func (h *httpGetHeaders) Execute(filePath string) error {
type httpGetQueryString (line 307) | type httpGetQueryString struct
method Execute (line 310) | func (h *httpGetQueryString) Execute(filePath string) error {
type httpGetRedirects (line 328) | type httpGetRedirects struct
method Execute (line 331) | func (h *httpGetRedirects) Execute(filePath string) error {
type httpGetHostRedirects (line 350) | type httpGetHostRedirects struct
method Execute (line 353) | func (h *httpGetHostRedirects) Execute(filePath string) error {
type httpDisableRedirects (line 378) | type httpDisableRedirects struct
method Execute (line 381) | func (h *httpDisableRedirects) Execute(filePath string) error {
type httpGet (line 400) | type httpGet struct
method Execute (line 403) | func (h *httpGet) Execute(filePath string) error {
type httpDSLVariable (line 419) | type httpDSLVariable struct
method Execute (line 422) | func (h *httpDSLVariable) Execute(filePath string) error {
type httpDSLFunctions (line 438) | type httpDSLFunctions struct
method Execute (line 440) | func (h *httpDSLFunctions) Execute(filePath string) error {
type httpPostBody (line 495) | type httpPostBody struct
method Execute (line 498) | func (h *httpPostBody) Execute(filePath string) error {
type httpPostJSONBody (line 525) | type httpPostJSONBody struct
method Execute (line 528) | func (h *httpPostJSONBody) Execute(filePath string) error {
type httpPostMultipartBody (line 560) | type httpPostMultipartBody struct
method Execute (line 563) | func (h *httpPostMultipartBody) Execute(filePath string) error {
type httpRawDynamicExtractor (line 600) | type httpRawDynamicExtractor struct
method Execute (line 603) | func (h *httpRawDynamicExtractor) Execute(filePath string) error {
type httpRawGetQuery (line 635) | type httpRawGetQuery struct
method Execute (line 638) | func (h *httpRawGetQuery) Execute(filePath string) error {
type httpRawGet (line 656) | type httpRawGet struct
method Execute (line 659) | func (h *httpRawGet) Execute(filePath string) error {
type httpRawWithParams (line 675) | type httpRawWithParams struct
method Execute (line 678) | func (h *httpRawWithParams) Execute(filePath string) error {
type httpRawPathTrailingSlash (line 706) | type httpRawPathTrailingSlash struct
method Execute (line 708) | func (h *httpRawPathTrailingSlash) Execute(filepath string) error {
type httpRawPayload (line 731) | type httpRawPayload struct
method Execute (line 734) | func (h *httpRawPayload) Execute(filePath string) error {
type httpRawPostBody (line 764) | type httpRawPostBody struct
method Execute (line 767) | func (h *httpRawPostBody) Execute(filePath string) error {
type httpRawUnsafePath (line 794) | type httpRawUnsafePath struct
method Execute (line 796) | func (h *httpRawUnsafePath) Execute(filepath string) error {
type httpPaths (line 844) | type httpPaths struct
method Execute (line 846) | func (h *httpPaths) Execute(filepath string) error {
type httpRawCookieReuse (line 899) | type httpRawCookieReuse struct
method Execute (line 902) | func (h *httpRawCookieReuse) Execute(filePath string) error {
type httpRequestCondition (line 967) | type httpRequestCondition struct
method Execute (line 970) | func (h *httpRequestCondition) Execute(filePath string) error {
type httpRequestSelfContained (line 990) | type httpRequestSelfContained struct
method Execute (line 993) | func (h *httpRequestSelfContained) Execute(filePath string) error {
type httpRequestSelfContainedWithParams (line 1018) | type httpRequestSelfContainedWithParams struct
method Execute (line 1021) | func (h *httpRequestSelfContainedWithParams) Execute(filePath string) ...
type httpRequestSelfContainedFileInput (line 1058) | type httpRequestSelfContainedFileInput struct
method Execute (line 1060) | func (h *httpRequestSelfContainedFileInput) Execute(filePath string) e...
type httpGetCaseInsensitive (line 1109) | type httpGetCaseInsensitive struct
method Execute (line 1112) | func (h *httpGetCaseInsensitive) Execute(filePath string) error {
type httpGetCaseInsensitiveCluster (line 1128) | type httpGetCaseInsensitiveCluster struct
method Execute (line 1131) | func (h *httpGetCaseInsensitiveCluster) Execute(filesPath string) error {
type httpGetRedirectsChainHeaders (line 1149) | type httpGetRedirectsChainHeaders struct
method Execute (line 1152) | func (h *httpGetRedirectsChainHeaders) Execute(filePath string) error {
type httpRaceSimple (line 1175) | type httpRaceSimple struct
method Execute (line 1178) | func (h *httpRaceSimple) Execute(filePath string) error {
type httpRaceMultiple (line 1193) | type httpRaceMultiple struct
method Execute (line 1196) | func (h *httpRaceMultiple) Execute(filePath string) error {
type httpRaceWithDelay (line 1211) | type httpRaceWithDelay struct
method Execute (line 1214) | func (h *httpRaceWithDelay) Execute(filePath string) error {
type httpRaceWithVariables (line 1256) | type httpRaceWithVariables struct
method Execute (line 1259) | func (h *httpRaceWithVariables) Execute(filePath string) error {
type httpStopAtFirstMatch (line 1276) | type httpStopAtFirstMatch struct
method Execute (line 1279) | func (h *httpStopAtFirstMatch) Execute(filePath string) error {
type httpStopAtFirstMatchWithExtractors (line 1295) | type httpStopAtFirstMatchWithExtractors struct
method Execute (line 1298) | func (h *httpStopAtFirstMatchWithExtractors) Execute(filePath string) ...
type httpVariables (line 1314) | type httpVariables struct
method Execute (line 1317) | func (h *httpVariables) Execute(filePath string) error {
type httpVariablesThreadsPrevious (line 1343) | type httpVariablesThreadsPrevious struct
method Execute (line 1347) | func (h *httpVariablesThreadsPrevious) Execute(filePath string) error {
type httpVariableDSLFunction (line 1367) | type httpVariableDSLFunction struct
method Execute (line 1370) | func (h *httpVariableDSLFunction) Execute(filePath string) error {
type customCLISNI (line 1392) | type customCLISNI struct
method Execute (line 1395) | func (h *customCLISNI) Execute(filePath string) error {
type httpSniAnnotation (line 1414) | type httpSniAnnotation struct
method Execute (line 1417) | func (h *httpSniAnnotation) Execute(filePath string) error {
type httpRedirectMatchURL (line 1436) | type httpRedirectMatchURL struct
method Execute (line 1439) | func (h *httpRedirectMatchURL) Execute(filePath string) error {
type customCLISNIUnsafe (line 1465) | type customCLISNIUnsafe struct
method Execute (line 1468) | func (h *customCLISNIUnsafe) Execute(filePath string) error {
type annotationTimeout (line 1487) | type annotationTimeout struct
method Execute (line 1490) | func (h *annotationTimeout) Execute(filePath string) error {
type customAttackType (line 1506) | type customAttackType struct
method Execute (line 1509) | func (h *customAttackType) Execute(filePath string) error {
type scanAllIPS (line 1527) | type scanAllIPS struct
method Execute (line 1530) | func (h *scanAllIPS) Execute(filePath string) error {
type httpGetWithoutScheme (line 1540) | type httpGetWithoutScheme struct
method Execute (line 1543) | func (h *httpGetWithoutScheme) Execute(filePath string) error {
type httpCLBodyWithoutHeader (line 1552) | type httpCLBodyWithoutHeader struct
method Execute (line 1555) | func (h *httpCLBodyWithoutHeader) Execute(filePath string) error {
type httpCLBodyWithHeader (line 1575) | type httpCLBodyWithHeader struct
method Execute (line 1578) | func (h *httpCLBodyWithHeader) Execute(filePath string) error {
type ConstantWithCliVar (line 1595) | type ConstantWithCliVar struct
method Execute (line 1598) | func (h *ConstantWithCliVar) Execute(filePath string) error {
type constantsWithThreads (line 1613) | type constantsWithThreads struct
method Execute (line 1616) | func (h *constantsWithThreads) Execute(filePath string) error {
type matcherStatusTest (line 1633) | type matcherStatusTest struct
method Execute (line 1636) | func (h *matcherStatusTest) Execute(filePath string) error {
type httpDisablePathAutomerge (line 1652) | type httpDisablePathAutomerge struct
method Execute (line 1655) | func (h *httpDisablePathAutomerge) Execute(filePath string) error {
type httpInteractshRequestsWithMCAnd (line 1673) | type httpInteractshRequestsWithMCAnd struct
method Execute (line 1675) | func (h *httpInteractshRequestsWithMCAnd) Execute(filePath string) err...
type httpPreprocessor (line 1685) | type httpPreprocessor struct
method Execute (line 1688) | func (h *httpPreprocessor) Execute(filePath string) error {
type httpMultiRequest (line 1712) | type httpMultiRequest struct
method Execute (line 1715) | func (h *httpMultiRequest) Execute(filePath string) error {
type httpRawPathSingleSlash (line 1736) | type httpRawPathSingleSlash struct
method Execute (line 1738) | func (h *httpRawPathSingleSlash) Execute(filepath string) error {
type httpRawUnsafePathSingleSlash (line 1761) | type httpRawUnsafePathSingleSlash struct
method Execute (line 1763) | func (h *httpRawUnsafePathSingleSlash) Execute(filepath string) error {
FILE: cmd/integration-test/integration-test.go
type TestCaseInfo (line 21) | type TestCaseInfo struct
function main (line 77) | func main() {
function isDebugMode (line 138) | func isDebugMode() bool {
function executeWithRetry (line 159) | func executeWithRetry(testCase testutils.TestCase, templatePath string, ...
function debugTests (line 172) | func debugTests() {
function runTests (line 191) | func runTests(customTemplatePaths []string) []string {
function execute (line 228) | func execute(testCase testutils.TestCase, templatePath string) (string, ...
function expectResultsCount (line 238) | func expectResultsCount(results []string, expectedNumbers ...int) error {
function normalizeSplit (line 247) | func normalizeSplit(str string) []string {
function filterLines (line 254) | func filterLines(results []string) []string {
function filterHeadlessLogs (line 262) | func filterHeadlessLogs(results []string) []string {
function filterUnsignedTemplatesWarnings (line 275) | func filterUnsignedTemplatesWarnings(results []string) []string {
FILE: cmd/integration-test/javascript.go
type javascriptNetHttps (line 41) | type javascriptNetHttps struct
method Execute (line 43) | func (j *javascriptNetHttps) Execute(filePath string) error {
type javascriptRedisPassBrute (line 51) | type javascriptRedisPassBrute struct
method Execute (line 53) | func (j *javascriptRedisPassBrute) Execute(filePath string) error {
type javascriptSSHServerFingerprint (line 83) | type javascriptSSHServerFingerprint struct
method Execute (line 85) | func (j *javascriptSSHServerFingerprint) Execute(filePath string) error {
type javascriptOracleAuthTest (line 115) | type javascriptOracleAuthTest struct
method Execute (line 117) | func (j *javascriptOracleAuthTest) Execute(filePath string) error {
type javascriptVncPassBrute (line 148) | type javascriptVncPassBrute struct
method Execute (line 150) | func (j *javascriptVncPassBrute) Execute(filePath string) error {
type javascriptPostgresPassBrute (line 180) | type javascriptPostgresPassBrute struct
method Execute (line 182) | func (j *javascriptPostgresPassBrute) Execute(filePath string) error {
type javascriptMySQLConnect (line 212) | type javascriptMySQLConnect struct
method Execute (line 214) | func (j *javascriptMySQLConnect) Execute(filePath string) error {
type javascriptMultiPortsSSH (line 244) | type javascriptMultiPortsSSH struct
method Execute (line 246) | func (j *javascriptMultiPortsSSH) Execute(filePath string) error {
type javascriptNoPortArgs (line 255) | type javascriptNoPortArgs struct
method Execute (line 257) | func (j *javascriptNoPortArgs) Execute(filePath string) error {
type javascriptRsyncTest (line 265) | type javascriptRsyncTest struct
method Execute (line 267) | func (j *javascriptRsyncTest) Execute(filePath string) error {
type javascriptTelnetAuthTest (line 297) | type javascriptTelnetAuthTest struct
method Execute (line 299) | func (j *javascriptTelnetAuthTest) Execute(filePath string) error {
function purge (line 330) | func purge(resource *dockertest.Resource) {
function init (line 342) | func init() {
FILE: cmd/integration-test/library.go
type goIntegrationTest (line 43) | type goIntegrationTest struct
method Execute (line 48) | func (h *goIntegrationTest) Execute(templatePath string) error {
function executeNucleiAsLibrary (line 68) | func executeNucleiAsLibrary(templatePath, templateURL string) ([]string,...
FILE: cmd/integration-test/loader.go
type remoteTemplateList (line 27) | type remoteTemplateList struct
method Execute (line 30) | func (h *remoteTemplateList) Execute(templateList string) error {
type excludedTemplate (line 70) | type excludedTemplate struct
method Execute (line 73) | func (h *excludedTemplate) Execute(templateList string) error {
type remoteTemplateListNotAllowed (line 93) | type remoteTemplateListNotAllowed struct
method Execute (line 96) | func (h *remoteTemplateListNotAllowed) Execute(templateList string) er...
type remoteWorkflowList (line 128) | type remoteWorkflowList struct
method Execute (line 131) | func (h *remoteWorkflowList) Execute(workflowList string) error {
type nonExistentTemplateList (line 171) | type nonExistentTemplateList struct
method Execute (line 174) | func (h *nonExistentTemplateList) Execute(nonExistingTemplateList stri...
type nonExistentWorkflowList (line 196) | type nonExistentWorkflowList struct
method Execute (line 199) | func (h *nonExistentWorkflowList) Execute(nonExistingWorkflowList stri...
type loadTemplateWithID (line 221) | type loadTemplateWithID struct
method Execute (line 223) | func (h *loadTemplateWithID) Execute(nooop string) error {
FILE: cmd/integration-test/matcher-status.go
type httpNoAccess (line 25) | type httpNoAccess struct
method Execute (line 27) | func (h *httpNoAccess) Execute(filePath string) error {
type networkNoAccess (line 41) | type networkNoAccess struct
method Execute (line 44) | func (h *networkNoAccess) Execute(filePath string) error {
type headlessNoAccess (line 58) | type headlessNoAccess struct
method Execute (line 61) | func (h *headlessNoAccess) Execute(filePath string) error {
type javascriptNoAccess (line 75) | type javascriptNoAccess struct
method Execute (line 78) | func (h *javascriptNoAccess) Execute(filePath string) error {
type websocketNoAccess (line 92) | type websocketNoAccess struct
method Execute (line 95) | func (h *websocketNoAccess) Execute(filePath string) error {
type dnsNoAccess (line 109) | type dnsNoAccess struct
method Execute (line 112) | func (h *dnsNoAccess) Execute(filePath string) error {
type httpMatcherStatusAnd (line 126) | type httpMatcherStatusAnd struct
method Execute (line 130) | func (h *httpMatcherStatusAnd) Execute(filePath string) error {
FILE: cmd/integration-test/multi.go
type multiProtoDynamicExtractor (line 13) | type multiProtoDynamicExtractor struct
method Execute (line 16) | func (h *multiProtoDynamicExtractor) Execute(templatePath string) error {
FILE: cmd/integration-test/network.go
constant defaultStaticPort (line 27) | defaultStaticPort = 5431
type networkBasic (line 29) | type networkBasic struct
method Execute (line 32) | func (h *networkBasic) Execute(filePath string) error {
type networkMultiStep (line 66) | type networkMultiStep struct
method Execute (line 69) | func (h *networkMultiStep) Execute(filePath string) error {
type networkRequestSelContained (line 116) | type networkRequestSelContained struct
method Execute (line 119) | func (h *networkRequestSelContained) Execute(filePath string) error {
type networkVariables (line 136) | type networkVariables struct
method Execute (line 139) | func (h *networkVariables) Execute(filePath string) error {
type networkPort (line 169) | type networkPort struct
method Execute (line 171) | func (n *networkPort) Execute(filePath string) error {
type networkhttps (line 232) | type networkhttps struct
method Execute (line 235) | func (h *networkhttps) Execute(filePath string) error {
FILE: cmd/integration-test/offline-http.go
type RfcRequestResponse (line 15) | type RfcRequestResponse struct
method Execute (line 18) | func (h *RfcRequestResponse) Execute(filePath string) error {
type RequestResponseWithAllowedPaths (line 27) | type RequestResponseWithAllowedPaths struct
method Execute (line 30) | func (h *RequestResponseWithAllowedPaths) Execute(filePath string) err...
type RawRequestResponse (line 39) | type RawRequestResponse struct
method Execute (line 42) | func (h *RawRequestResponse) Execute(filePath string) error {
FILE: cmd/integration-test/profile-loader.go
type profileLoaderByRelFile (line 16) | type profileLoaderByRelFile struct
method Execute (line 18) | func (h *profileLoaderByRelFile) Execute(testName string) error {
type profileLoaderById (line 29) | type profileLoaderById struct
method Execute (line 31) | func (h *profileLoaderById) Execute(testName string) error {
type customProfileLoader (line 43) | type customProfileLoader struct
method Execute (line 45) | func (h *customProfileLoader) Execute(filepath string) error {
FILE: cmd/integration-test/ssl.go
type sslBasic (line 19) | type sslBasic struct
method Execute (line 22) | func (h *sslBasic) Execute(filePath string) error {
type sslBasicZtls (line 42) | type sslBasicZtls struct
method Execute (line 45) | func (h *sslBasicZtls) Execute(filePath string) error {
type sslCustomCipher (line 65) | type sslCustomCipher struct
method Execute (line 68) | func (h *sslCustomCipher) Execute(filePath string) error {
type sslCustomVersion (line 88) | type sslCustomVersion struct
method Execute (line 91) | func (h *sslCustomVersion) Execute(filePath string) error {
type sslWithVars (line 111) | type sslWithVars struct
method Execute (line 113) | func (h *sslWithVars) Execute(filePath string) error {
type sslMultiReq (line 133) | type sslMultiReq struct
method Execute (line 135) | func (h *sslMultiReq) Execute(filePath string) error {
FILE: cmd/integration-test/template-dir.go
type templateDirWithTargetTest (line 14) | type templateDirWithTargetTest struct
method Execute (line 17) | func (h *templateDirWithTargetTest) Execute(filePath string) error {
FILE: cmd/integration-test/template-path.go
function getTemplatePath (line 11) | func getTemplatePath() string {
type cwdTemplateTest (line 26) | type cwdTemplateTest struct
method Execute (line 29) | func (h *cwdTemplateTest) Execute(filePath string) error {
type relativePathTemplateTest (line 37) | type relativePathTemplateTest struct
method Execute (line 40) | func (h *relativePathTemplateTest) Execute(filePath string) error {
type absolutePathTemplateTest (line 48) | type absolutePathTemplateTest struct
method Execute (line 51) | func (h *absolutePathTemplateTest) Execute(filePath string) error {
type folderPathTemplateTest (line 59) | type folderPathTemplateTest struct
method Execute (line 62) | func (h *folderPathTemplateTest) Execute(filePath string) error {
FILE: cmd/integration-test/templates-dir-env.go
function copyTemplateToDir (line 25) | func copyTemplateToDir(templatePath, destDir string) error {
type templatesDirEnvBasicTest (line 50) | type templatesDirEnvBasicTest struct
method Execute (line 53) | func (h *templatesDirEnvBasicTest) Execute(filePath string) error {
type templatesDirEnvAbsolutePathTest (line 78) | type templatesDirEnvAbsolutePathTest struct
method Execute (line 81) | func (h *templatesDirEnvAbsolutePathTest) Execute(filePath string) err...
type templatesDirEnvRelativePathTest (line 112) | type templatesDirEnvRelativePathTest struct
method Execute (line 115) | func (h *templatesDirEnvRelativePathTest) Execute(filePath string) err...
type templatesDirEnvPrecedenceTest (line 145) | type templatesDirEnvPrecedenceTest struct
method Execute (line 148) | func (h *templatesDirEnvPrecedenceTest) Execute(filePath string) error {
type templatesDirEnvCustomTemplatesTest (line 183) | type templatesDirEnvCustomTemplatesTest struct
method Execute (line 186) | func (h *templatesDirEnvCustomTemplatesTest) Execute(filePath string) ...
FILE: cmd/integration-test/websocket.go
type websocketBasic (line 19) | type websocketBasic struct
method Execute (line 22) | func (h *websocketBasic) Execute(filePath string) error {
type websocketCswsh (line 46) | type websocketCswsh struct
method Execute (line 49) | func (h *websocketCswsh) Execute(filePath string) error {
type websocketNoCswsh (line 67) | type websocketNoCswsh struct
method Execute (line 70) | func (h *websocketNoCswsh) Execute(filePath string) error {
type websocketWithPath (line 88) | type websocketWithPath struct
method Execute (line 91) | func (h *websocketWithPath) Execute(filePath string) error {
FILE: cmd/integration-test/whois.go
type whoisBasic (line 11) | type whoisBasic struct
method Execute (line 14) | func (h *whoisBasic) Execute(filePath string) error {
FILE: cmd/integration-test/workflow.go
function init (line 33) | func init() {
type workflowBasic (line 59) | type workflowBasic struct
method Execute (line 62) | func (h *workflowBasic) Execute(filePath string) error {
type workflowConditionMatched (line 78) | type workflowConditionMatched struct
method Execute (line 81) | func (h *workflowConditionMatched) Execute(filePath string) error {
type workflowConditionUnmatch (line 97) | type workflowConditionUnmatch struct
method Execute (line 100) | func (h *workflowConditionUnmatch) Execute(filePath string) error {
type workflowMatcherName (line 116) | type workflowMatcherName struct
method Execute (line 119) | func (h *workflowMatcherName) Execute(filePath string) error {
type workflowComplexConditions (line 135) | type workflowComplexConditions struct
method Execute (line 138) | func (h *workflowComplexConditions) Execute(filePath string) error {
type workflowHttpKeyValueShare (line 159) | type workflowHttpKeyValueShare struct
method Execute (line 162) | func (h *workflowHttpKeyValueShare) Execute(filePath string) error {
type workflowDnsKeyValueShare (line 182) | type workflowDnsKeyValueShare struct
method Execute (line 185) | func (h *workflowDnsKeyValueShare) Execute(filePath string) error {
type workflowCodeKeyValueShare (line 195) | type workflowCodeKeyValueShare struct
method Execute (line 198) | func (h *workflowCodeKeyValueShare) Execute(filePath string) error {
type workflowMultiProtocolKeyValueShare (line 210) | type workflowMultiProtocolKeyValueShare struct
method Execute (line 213) | func (h *workflowMultiProtocolKeyValueShare) Execute(filePath string) ...
type workflowMultiMatchKeyValueShare (line 234) | type workflowMultiMatchKeyValueShare struct
method Execute (line 237) | func (h *workflowMultiMatchKeyValueShare) Execute(filePath string) err...
type workflowSharedCookies (line 272) | type workflowSharedCookies struct
method Execute (line 275) | func (h *workflowSharedCookies) Execute(filePath string) error {
FILE: cmd/memogen/memogen.go
function main (line 24) | func main() {
function walk (line 39) | func walk(path string, info fs.FileInfo, err error) error {
FILE: cmd/nuclei/main.go
function main (line 56) | func main() {
function readConfig (line 241) | func readConfig() *goflags.FlagSet {
function cleanupOldResumeFiles (line 678) | func cleanupOldResumeFiles() {
function readFlagsConfig (line 688) | func readFlagsConfig(flagset *goflags.FlagSet) {
function disableUpdatesCallback (line 717) | func disableUpdatesCallback() {
function printVersion (line 722) | func printVersion() {
function printTemplateVersion (line 731) | func printTemplateVersion() {
function resetCallback (line 750) | func resetCallback() {
function findProfilePathById (line 795) | func findProfilePathById(profileId, templatesDir string) string {
FILE: cmd/nuclei/main_benchmark_test.go
function TestMain (line 25) | func TestMain(m *testing.M) {
function getUniqFilename (line 57) | func getUniqFilename(basePath string) string {
function getDefaultOptions (line 80) | func getDefaultOptions() *types.Options {
function runEnumBenchmark (line 129) | func runEnumBenchmark(b *testing.B, options *types.Options) {
function BenchmarkRunEnumeration (line 179) | func BenchmarkRunEnumeration(b *testing.B) {
FILE: cmd/scan-charts/main.go
function main (line 15) | func main() {
FILE: cmd/tmc/main.go
constant yamlIndentSpaces (line 31) | yamlIndentSpaces = 2
constant tmBaseUrlDefault (line 33) | tmBaseUrlDefault = "https://tm.nuclei.sh"
function init (line 38) | func init() {
function init (line 49) | func init() {
type options (line 80) | type options struct
function main (line 91) | func main() {
function process (line 133) | func process(opts options) error {
function logErrMsg (line 227) | func logErrMsg(path string, err error, debug bool, errFile *os.File) str...
function enhanceTemplate (line 240) | func enhanceTemplate(data string) (string, bool, error) {
function formatTemplate (line 274) | func formatTemplate(data string) (string, bool, error) {
function lintTemplate (line 308) | func lintTemplate(data string) (bool, error) {
function validateTemplate (line 330) | func validateTemplate(data string) (bool, error) {
function parseAndAddMaxRequests (line 358) | func parseAndAddMaxRequests(catalog catalog.Catalog, path, data string) ...
function parseTemplate (line 403) | func parseTemplate(catalog catalog.Catalog, templatePath string) (*templ...
function getInfoStartEnd (line 420) | func getInfoStartEnd(data string) (int, int) {
FILE: cmd/tmc/types.go
type Mark (line 3) | type Mark struct
type Error (line 11) | type Error struct
type LintError (line 16) | type LintError struct
type TemplateLintResp (line 22) | type TemplateLintResp struct
type ValidateError (line 28) | type ValidateError struct
type TemplateResp (line 42) | type TemplateResp struct
type InfoBlock (line 57) | type InfoBlock struct
type TemplateClassification (line 61) | type TemplateClassification struct
type TemplateInfo (line 70) | type TemplateInfo struct
FILE: cmd/tools/fuzzplayground/main.go
function main (line 15) | func main() {
FILE: cmd/tools/signer/main.go
function main (line 34) | func main() {
function defaultExecutorOpts (line 102) | func defaultExecutorOpts(templatePath string) *protocols.ExecutorOptions {
FILE: examples/advanced/advanced.go
function main (line 11) | func main() {
FILE: examples/simple/simple.go
function main (line 9) | func main() {
FILE: examples/with_speed_control/main.go
function main (line 13) | func main() {
function initializeNucleiEngine (line 37) | func initializeNucleiEngine() (*nuclei.NucleiEngine, error) {
function testRateLimit (line 54) | func testRateLimit(wg *sync.WaitGroup, ne *nuclei.NucleiEngine) {
function testThreadsAndBulkSize (line 59) | func testThreadsAndBulkSize(wg *sync.WaitGroup, ne *nuclei.NucleiEngine) {
function testPayloadConcurrency (line 65) | func testPayloadConcurrency(wg *sync.WaitGroup, ne *nuclei.NucleiEngine) {
function verifyRateLimit (line 70) | func verifyRateLimit(ne *nuclei.NucleiEngine, initialRate, finalRate int) {
function verifyThreadsAndBulkSize (line 82) | func verifyThreadsAndBulkSize(ne *nuclei.NucleiEngine, initialThreads, i...
function verifyPayloadConcurrency (line 95) | func verifyPayloadConcurrency(ne *nuclei.NucleiEngine, initialPayloadCon...
FILE: internal/colorizer/colorizer.go
constant fgOrange (line 12) | fgOrange uint8 = 208
function GetColor (line 15) | func GetColor(colorizer aurora.Aurora, templateSeverity fmt.Stringer) st...
function New (line 35) | func New(colorizer aurora.Aurora) func(severity.Severity) string {
FILE: internal/httpapi/apiendpoint.go
type Concurrency (line 12) | type Concurrency struct
type Server (line 23) | type Server struct
method Start (line 37) | func (s *Server) Start() error {
method handleConcurrency (line 46) | func (s *Server) handleConcurrency(w http.ResponseWriter, r *http.Requ...
method getSettings (line 58) | func (s *Server) getSettings(w http.ResponseWriter, _ *http.Request) {
method updateSettings (line 76) | func (s *Server) updateSettings(w http.ResponseWriter, r *http.Request) {
function New (line 29) | func New(addr string, config *types.Options) *Server {
FILE: internal/pdcp/utils.go
function getScanDashBoardURL (line 8) | func getScanDashBoardURL(id string, teamID string) string {
type uploadResponse (line 23) | type uploadResponse struct
FILE: internal/pdcp/writer.go
constant uploadEndpoint (line 29) | uploadEndpoint = "/v1/scans/import"
constant appendEndpoint (line 30) | appendEndpoint = "/v1/scans/%s/import"
constant flushTimer (line 31) | flushTimer = time.Minute
constant MaxChunkSize (line 32) | MaxChunkSize = 4 * unitutils.Mega
constant xidRe (line 33) | xidRe = `^[a-z0-9]{20}$`
constant teamIDHeader (line 34) | teamIDHeader = "X-Team-Id"
constant NoneTeamID (line 35) | NoneTeamID = "none"
type UploadWriter (line 47) | type UploadWriter struct
method SetScanID (line 105) | func (u *UploadWriter) SetScanID(id string) error {
method SetScanName (line 114) | func (u *UploadWriter) SetScanName(name string) {
method SetTeamID (line 118) | func (u *UploadWriter) SetTeamID(id string) {
method autoCommit (line 126) | func (u *UploadWriter) autoCommit(ctx context.Context, r *io.PipeReade...
method uploadChunk (line 200) | func (u *UploadWriter) uploadChunk(buff *bytes.Buffer) error {
method upload (line 211) | func (u *UploadWriter) upload(data []byte) error {
method getRequest (line 243) | func (u *UploadWriter) getRequest(bin []byte) (*retryablehttp.Request,...
method Close (line 277) | func (u *UploadWriter) Close() {
function NewUploadWriter (line 62) | func NewUploadWriter(ctx context.Context, logger *gologger.Logger, creds...
FILE: internal/runner/banner.go
function showBanner (line 22) | func showBanner() {
function NucleiToolUpdateCallback (line 28) | func NucleiToolUpdateCallback() {
function AuthWithPDCP (line 34) | func AuthWithPDCP() {
FILE: internal/runner/healthcheck.go
function DoHealthCheck (line 15) | func DoHealthCheck(options *types.Options) string {
FILE: internal/runner/inputs.go
method initializeTemplatesHTTPInput (line 22) | func (r *Runner) initializeTemplatesHTTPInput() (*hybrid.HybridMap, erro...
FILE: internal/runner/lazy.go
type AuthLazyFetchOptions (line 24) | type AuthLazyFetchOptions struct
function GetAuthTmplStore (line 31) | func GetAuthTmplStore(opts *types.Options, catalog catalog.Catalog, exec...
function GetLazyAuthFetchCallback (line 68) | func GetLazyAuthFetchCallback(opts *AuthLazyFetchOptions) authx.LazyFetc...
FILE: internal/runner/options.go
constant DefaultDumpTrafficOutputFolder (line 40) | DefaultDumpTrafficOutputFolder = "output"
function ConfigureOptions (line 45) | func ConfigureOptions() error {
function ParseOptions (line 58) | func ParseOptions(options *types.Options) {
function ValidateOptions (line 143) | func ValidateOptions(options *types.Options) error {
function validateMissingS3Options (line 234) | func validateMissingS3Options(options *types.Options) []string {
function validateMissingAzureOptions (line 261) | func validateMissingAzureOptions(options *types.Options) []string {
function validateMissingGitLabOptions (line 281) | func validateMissingGitLabOptions(options *types.Options) []string {
function validateDASTOptions (line 293) | func validateDASTOptions(options *types.Options) error {
function createReportingOptions (line 301) | func createReportingOptions(options *types.Options) (*reporting.Options,...
function configureOutput (line 364) | func configureOutput(options *types.Options) {
function loadResolvers (line 389) | func loadResolvers(options *types.Options) {
function validateTemplatePaths (line 416) | func validateTemplatePaths(logger *gologger.Logger, templatesDirectory s...
function validateCertificatePaths (line 433) | func validateCertificatePaths(logger *gologger.Logger, certificatePaths ...
function readEnvInputVars (line 445) | func readEnvInputVars(options *types.Options) {
function getBoolEnvValue (line 511) | func getBoolEnvValue(key string) bool {
FILE: internal/runner/options_test.go
function TestParseHeadlessOptionalArguments (line 12) | func TestParseHeadlessOptionalArguments(t *testing.T) {
FILE: internal/runner/proxy.go
constant HTTP_PROXY_ENV (line 17) | HTTP_PROXY_ENV = "HTTP_PROXY"
function loadProxyServers (line 21) | func loadProxyServers(options *types.Options) error {
FILE: internal/runner/runner.go
type Runner (line 80) | type Runner struct
method runStandardEnumeration (line 402) | func (r *Runner) runStandardEnumeration(executerOpts *protocols.Execut...
method Close (line 410) | func (r *Runner) Close() {
method setupPDCPUpload (line 454) | func (r *Runner) setupPDCPUpload(writer output.Writer) output.Writer {
method RunEnumeration (line 492) | func (r *Runner) RunEnumeration() error {
method isInputNonHTTP (line 792) | func (r *Runner) isInputNonHTTP() bool {
method executeSmartWorkflowInput (line 804) | func (r *Runner) executeSmartWorkflowInput(executorOpts *protocols.Exe...
method executeTemplatesInput (line 824) | func (r *Runner) executeTemplatesInput(store *loader.Store, engine *co...
method displayExecutionInfo (line 852) | func (r *Runner) displayExecutionInfo(store *loader.Store) {
method SaveResumeConfig (line 928) | func (r *Runner) SaveResumeConfig(path string) error {
function New (line 109) | func New(options *types.Options) (*Runner, error) {
function shortDur (line 774) | func shortDur(d time.Duration) string {
function UploadResultsToCloud (line 943) | func UploadResultsToCloud(options *types.Options) error {
type WalkFunc (line 990) | type WalkFunc
function Walk (line 996) | func Walk(s interface{}, callback WalkFunc) {
function expandEndVars (line 1023) | func expandEndVars(f reflect.Value, fieldType reflect.StructField) {
function init (line 1039) | func init() {
FILE: internal/runner/runner_test.go
function TestCreateReportingOptions (line 13) | func TestCreateReportingOptions(t *testing.T) {
type TestStruct1 (line 29) | type TestStruct1 struct
type TestStruct2 (line 34) | type TestStruct2 struct
type TestStruct3 (line 38) | type TestStruct3 struct
type TestStruct4 (line 44) | type TestStruct4 struct
type TestStruct5 (line 49) | type TestStruct5 struct
type TestStruct6 (line 54) | type TestStruct6 struct
function TestWalkReflectStructAssignsEnvVars (line 60) | func TestWalkReflectStructAssignsEnvVars(t *testing.T) {
function TestWalkReflectStructHandlesDifferentTypes (line 76) | func TestWalkReflectStructHandlesDifferentTypes(t *testing.T) {
function TestWalkReflectStructEmpty (line 93) | func TestWalkReflectStructEmpty(t *testing.T) {
function TestWalkReflectStructWithNoYamlTag (line 110) | func TestWalkReflectStructWithNoYamlTag(t *testing.T) {
function TestWalkReflectStructHandlesNestedStructs (line 127) | func TestWalkReflectStructHandlesNestedStructs(t *testing.T) {
FILE: internal/runner/templates.go
method logAvailableTemplate (line 20) | func (r *Runner) logAvailableTemplate(tplPath string) {
method verboseTemplate (line 34) | func (r *Runner) verboseTemplate(tpl *templates.Template) {
method listAvailableStoreTemplates (line 41) | func (r *Runner) listAvailableStoreTemplates(store *loader.Store) {
method listAvailableTags (line 81) | func (r *Runner) listAvailableTags(tagsMap map[string]int) {
method highlightTemplate (line 110) | func (r *Runner) highlightTemplate(body *[]byte) ([]byte, error) {
function hasExtraFlags (line 121) | func hasExtraFlags(options *types.Options) bool {
FILE: internal/server/dedupe.go
type requestDeduplicator (line 34) | type requestDeduplicator struct
method isDuplicate (line 46) | func (r *requestDeduplicator) isDuplicate(req *types.RequestResponse) ...
function newRequestDeduplicator (line 39) | func newRequestDeduplicator() *requestDeduplicator {
function hashRequest (line 65) | func hashRequest(req *types.RequestResponse) (string, error) {
function normalizeURL (line 90) | func normalizeURL(u *url.URL) (string, error) {
type header (line 105) | type header struct
function sortedNonDynamicHeaders (line 110) | func sortedNonDynamicHeaders(headers mapsutil.OrderedMap[string, string]...
FILE: internal/server/nuclei_sdk.go
type nucleiExecutor (line 40) | type nucleiExecutor struct
method ExecuteScan (line 150) | func (n *nucleiExecutor) ExecuteScan(target PostRequestsHandlerRequest...
method Close (line 192) | func (n *nucleiExecutor) Close() {
type NucleiExecutorOptions (line 47) | type NucleiExecutorOptions struct
function newNucleiExecutor (line 64) | func newNucleiExecutor(opts *NucleiExecutorOptions) (*nucleiExecutor, er...
type proxifyRequest (line 141) | type proxifyRequest struct
FILE: internal/server/requests_worker.go
method consumeTaskRequest (line 11) | func (s *DASTServer) consumeTaskRequest(req PostRequestsHandlerRequest) {
FILE: internal/server/scope/extensions.go
function IsUninterestingPath (line 5) | func IsUninterestingPath(uriPath string) bool {
FILE: internal/server/scope/scope.go
type Manager (line 11) | type Manager struct
method Validate (line 42) | func (m *Manager) Validate(URL *url.URL) (bool, error) {
method validateURL (line 59) | func (m *Manager) validateURL(URL string) (bool, error) {
function NewManager (line 18) | func NewManager(inScope, outOfScope []string) (*Manager, error) {
FILE: internal/server/scope/scope_test.go
function TestManagerValidate (line 10) | func TestManagerValidate(t *testing.T) {
FILE: internal/server/server.go
type DASTServer (line 27) | type DASTServer struct
method Close (line 126) | func (s *DASTServer) Close() {
method buildURL (line 132) | func (s *DASTServer) buildURL(endpoint string) string {
method setupHandlers (line 148) | func (s *DASTServer) setupHandlers(onlyStats bool) {
method Start (line 181) | func (s *DASTServer) Start() error {
method handleRequest (line 194) | func (s *DASTServer) handleRequest(c echo.Context) error {
method getStats (line 242) | func (s *DASTServer) getStats() (StatsResponse, error) {
method handleStats (line 277) | func (s *DASTServer) handleStats(c echo.Context) error {
method handleStatsJSON (line 290) | func (s *DASTServer) handleStatsJSON(c echo.Context) error {
type Options (line 43) | type Options struct
function New (line 63) | func New(options *Options) (*DASTServer, error) {
function NewStatsServer (line 112) | func NewStatsServer(fuzzStatsDB *stats.Tracker) (*DASTServer, error) {
type PostRequestsHandlerRequest (line 189) | type PostRequestsHandlerRequest struct
type StatsResponse (line 214) | type StatsResponse struct
type DASTServerInfo (line 223) | type DASTServerInfo struct
type DASTScanStatistics (line 230) | type DASTScanStatistics struct
FILE: lib/config.go
type TemplateSources (line 28) | type TemplateSources struct
function WithTemplatesOrWorkflows (line 37) | func WithTemplatesOrWorkflows(sources TemplateSources) NucleiSDKOptions {
type TemplateFilters (line 50) | type TemplateFilters struct
function WithTemplateFilters (line 66) | func WithTemplateFilters(filters TemplateFilters) NucleiSDKOptions {
type InteractshOpts (line 100) | type InteractshOpts
function WithInteractshOptions (line 103) | func WithInteractshOptions(opts InteractshOpts) NucleiSDKOptions {
type Concurrency (line 116) | type Concurrency struct
function WithConcurrency (line 127) | func WithConcurrency(opts Concurrency) NucleiSDKOptions {
function WithResponseReadSize (line 164) | func WithResponseReadSize(responseReadSize int) NucleiSDKOptions {
function WithGlobalRateLimit (line 176) | func WithGlobalRateLimit(maxTokens int, duration time.Duration) NucleiSD...
function WithGlobalRateLimitCtx (line 181) | func WithGlobalRateLimitCtx(ctx context.Context, maxTokens int, duration...
type HeadlessOpts (line 191) | type HeadlessOpts struct
function EnableHeadlessWithOpts (line 203) | func EnableHeadlessWithOpts(hopts *HeadlessOpts) NucleiSDKOptions {
type StatsOptions (line 217) | type StatsOptions struct
function EnableStatsWithOpts (line 225) | func EnableStatsWithOpts(opts StatsOptions) NucleiSDKOptions {
type VerbosityOptions (line 242) | type VerbosityOptions struct
function WithVerbosity (line 253) | func WithVerbosity(opts VerbosityOptions) NucleiSDKOptions {
type NetworkConfig (line 272) | type NetworkConfig struct
function WithNetworkConfig (line 286) | func WithNetworkConfig(opts NetworkConfig) NucleiSDKOptions {
function WithProxy (line 318) | func WithProxy(proxy []string, proxyInternalRequests bool) NucleiSDKOpti...
function WithScanStrategy (line 330) | func WithScanStrategy(strategy string) NucleiSDKOptions {
type OutputWriter (line 338) | type OutputWriter
function UseOutputWriter (line 343) | func UseOutputWriter(writer OutputWriter) NucleiSDKOptions {
type StatsWriter (line 354) | type StatsWriter
function UseStatsWriter (line 358) | func UseStatsWriter(writer StatsWriter) NucleiSDKOptions {
function WithTemplateUpdateCallback (line 372) | func WithTemplateUpdateCallback(disableTemplatesAutoUpgrade bool, callba...
function WithSandboxOptions (line 384) | func WithSandboxOptions(allowLocalFileAccess bool, restrictLocalNetworkA...
function EnableCodeTemplates (line 396) | func EnableCodeTemplates() NucleiSDKOptions {
function EnableSelfContainedTemplates (line 405) | func EnableSelfContainedTemplates() NucleiSDKOptions {
function EnableGlobalMatchersTemplates (line 413) | func EnableGlobalMatchersTemplates() NucleiSDKOptions {
function DisableTemplateCache (line 421) | func DisableTemplateCache() NucleiSDKOptions {
function EnableFileTemplates (line 429) | func EnableFileTemplates() NucleiSDKOptions {
function WithHeaders (line 437) | func WithHeaders(headers []string) NucleiSDKOptions {
function WithVars (line 445) | func WithVars(vars []string) NucleiSDKOptions {
function EnablePassiveMode (line 464) | func EnablePassiveMode() NucleiSDKOptions {
function EnableMatcherStatus (line 473) | func EnableMatcherStatus() NucleiSDKOptions {
function WithAuthProvider (line 481) | func WithAuthProvider(provider authprovider.AuthProvider) NucleiSDKOptio...
function LoadSecretsFromFile (line 489) | func LoadSecretsFromFile(files []string, prefetch bool) NucleiSDKOptions {
function DASTMode (line 498) | func DASTMode() NucleiSDKOptions {
function SignedTemplatesOnly (line 506) | func SignedTemplatesOnly() NucleiSDKOptions {
function WithCatalog (line 514) | func WithCatalog(cat catalog.Catalog) NucleiSDKOptions {
function DisableUpdateCheck (line 522) | func DisableUpdateCheck() NucleiSDKOptions {
function WithResumeFile (line 530) | func WithResumeFile(file string) NucleiSDKOptions {
function WithLogger (line 538) | func WithLogger(logger *gologger.Logger) NucleiSDKOptions {
function WithOptions (line 552) | func WithOptions(opts *pkgtypes.Options) NucleiSDKOptions {
function WithTemporaryDirectory (line 563) | func WithTemporaryDirectory(parentDir string) NucleiSDKOptions {
FILE: lib/example_test.go
function ExampleNucleiEngine (line 15) | func ExampleNucleiEngine() {
function ExampleThreadSafeNucleiEngine (line 36) | func ExampleThreadSafeNucleiEngine() {
function TestMain (line 78) | func TestMain(m *testing.M) {
FILE: lib/helper.go
function GetTargetsFromUncover (line 17) | func GetTargetsFromUncover(ctx context.Context, outputFormat string, opt...
function GetTargetsFromTemplateMetadata (line 23) | func GetTargetsFromTemplateMetadata(ctx context.Context, templates []*te...
function init (line 31) | func init() {
FILE: lib/multi.go
type unsafeOptions (line 23) | type unsafeOptions struct
function createEphemeralObjects (line 29) | func createEphemeralObjects(ctx context.Context, base *NucleiEngine, opt...
function closeEphemeralObjects (line 62) | func closeEphemeralObjects(u *unsafeOptions) {
type ThreadSafeNucleiEngine (line 79) | type ThreadSafeNucleiEngine struct
method GlobalLoadAllTemplates (line 112) | func (e *ThreadSafeNucleiEngine) GlobalLoadAllTemplates() error {
method GlobalResultCallback (line 117) | func (e *ThreadSafeNucleiEngine) GlobalResultCallback(callback func(ev...
method ExecuteNucleiWithOptsCtx (line 125) | func (e *ThreadSafeNucleiEngine) ExecuteNucleiWithOptsCtx(ctx context....
method ExecuteNucleiWithOpts (line 177) | func (e *ThreadSafeNucleiEngine) ExecuteNucleiWithOpts(targets []strin...
method Close (line 182) | func (e *ThreadSafeNucleiEngine) Close() {
function NewThreadSafeNucleiEngineCtx (line 86) | func NewThreadSafeNucleiEngineCtx(ctx context.Context, opts ...NucleiSDK...
function NewThreadSafeNucleiEngine (line 106) | func NewThreadSafeNucleiEngine(opts ...NucleiSDKOptions) (*ThreadSafeNuc...
FILE: lib/sdk.go
type NucleiSDKOptions (line 37) | type NucleiSDKOptions
type engineMode (line 50) | type engineMode
constant singleInstance (line 53) | singleInstance engineMode = iota
constant threadSafe (line 54) | threadSafe
type NucleiEngine (line 59) | type NucleiEngine struct
method LoadAllTemplates (line 102) | func (e *NucleiEngine) LoadAllTemplates() error {
method GetTemplates (line 121) | func (e *NucleiEngine) GetTemplates() []*templates.Template {
method GetWorkflows (line 129) | func (e *NucleiEngine) GetWorkflows() []*templates.Template {
method LoadTargets (line 137) | func (e *NucleiEngine) LoadTargets(targets []string, probeNonHttp bool) {
method LoadTargetsFromReader (line 148) | func (e *NucleiEngine) LoadTargetsFromReader(reader io.Reader, probeNo...
method LoadTargetsWithHttpData (line 162) | func (e *NucleiEngine) LoadTargetsWithHttpData(filePath string, filemo...
method GetExecuterOptions (line 176) | func (e *NucleiEngine) GetExecuterOptions() *protocols.ExecutorOptions {
method ParseTemplate (line 182) | func (e *NucleiEngine) ParseTemplate(data []byte) (*templates.Template...
method SignTemplate (line 187) | func (e *NucleiEngine) SignTemplate(tmplSigner *signer.TemplateSigner,...
method closeInternal (line 209) | func (e *NucleiEngine) closeInternal() {
method Close (line 249) | func (e *NucleiEngine) Close() {
method ExecuteCallbackWithCtx (line 256) | func (e *NucleiEngine) ExecuteCallbackWithCtx(ctx context.Context, cal...
method ExecuteWithCallback (line 300) | func (e *NucleiEngine) ExecuteWithCallback(callback ...func(event *out...
method Options (line 309) | func (e *NucleiEngine) Options() *types.Options {
method Engine (line 314) | func (e *NucleiEngine) Engine() *core.Engine {
method Store (line 319) | func (e *NucleiEngine) Store() *loader.Store {
method GetParser (line 350) | func (e *NucleiEngine) GetParser() *templates.Parser {
method GetClusterTemplateIDs (line 366) | func (e *NucleiEngine) GetClusterTemplateIDs(clusterID string) []string {
method GetAllClusterMappings (line 379) | func (e *NucleiEngine) GetAllClusterMappings() map[string][]string {
function NewNucleiEngineCtx (line 324) | func NewNucleiEngineCtx(ctx context.Context, options ...NucleiSDKOptions...
function NewNucleiEngine (line 345) | func NewNucleiEngine(options ...NucleiSDKOptions) (*NucleiEngine, error) {
function wait (line 355) | func wait(wg *sync.WaitGroup) <-chan struct{} {
FILE: lib/sdk_private.go
method applyRequiredDefaults (line 42) | func (e *NucleiEngine) applyRequiredDefaults(ctx context.Context) {
method init (line 99) | func (e *NucleiEngine) init(ctx context.Context) error {
type syncOnce (line 294) | type syncOnce struct
method processUpdateCheckResults (line 301) | func (e *NucleiEngine) processUpdateCheckResults() error {
FILE: lib/sdk_test.go
function TestContextCancelNucleiEngine (line 13) | func TestContextCancelNucleiEngine(t *testing.T) {
function TestHeadlessOptionInitialization (line 39) | func TestHeadlessOptionInitialization(t *testing.T) {
FILE: lib/tests/sdk_test.go
function TestSimpleNuclei (line 24) | func TestSimpleNuclei(t *testing.T) {
function TestSimpleNucleiRemote (line 59) | func TestSimpleNucleiRemote(t *testing.T) {
function TestThreadSafeNuclei (line 97) | func TestThreadSafeNuclei(t *testing.T) {
function TestWithVarsNuclei (line 137) | func TestWithVarsNuclei(t *testing.T) {
FILE: pkg/authprovider/authx/basic_auth.go
type BasicAuthStrategy (line 14) | type BasicAuthStrategy struct
method Apply (line 24) | func (s *BasicAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 29) | func (s *BasicAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
function NewBasicAuthStrategy (line 19) | func NewBasicAuthStrategy(data *Secret) *BasicAuthStrategy {
FILE: pkg/authprovider/authx/bearer_auth.go
type BearerTokenAuthStrategy (line 14) | type BearerTokenAuthStrategy struct
method Apply (line 24) | func (s *BearerTokenAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 29) | func (s *BearerTokenAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
function NewBearerTokenAuthStrategy (line 19) | func NewBearerTokenAuthStrategy(data *Secret) *BearerTokenAuthStrategy {
FILE: pkg/authprovider/authx/cookies_auth.go
type CookiesAuthStrategy (line 15) | type CookiesAuthStrategy struct
method Apply (line 25) | func (s *CookiesAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 36) | func (s *CookiesAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
function NewCookiesAuthStrategy (line 20) | func NewCookiesAuthStrategy(data *Secret) *CookiesAuthStrategy {
FILE: pkg/authprovider/authx/dynamic.go
type LazyFetchSecret (line 15) | type LazyFetchSecret
type fetchState (line 19) | type fetchState struct
type Dynamic (line 32) | type Dynamic struct
method GetDomainAndDomainRegex (line 45) | func (d *Dynamic) GetDomainAndDomainRegex() ([]string, []string) {
method UnmarshalJSON (line 61) | func (d *Dynamic) UnmarshalJSON(data []byte) error {
method Validate (line 79) | func (d *Dynamic) Validate() error {
method SetLazyFetchCallback (line 106) | func (d *Dynamic) SetLazyFetchCallback(callback LazyFetchSecret) {
method applyValuesToSecret (line 131) | func (d *Dynamic) applyValuesToSecret(secret *Secret) error {
method GetStrategies (line 193) | func (d *Dynamic) GetStrategies() []AuthStrategy {
method Fetch (line 214) | func (d *Dynamic) Fetch(isFatal bool) error {
method Error (line 237) | func (d *Dynamic) Error() error {
FILE: pkg/authprovider/authx/dynamic_test.go
function TestDynamicUnmarshalJSON (line 13) | func TestDynamicUnmarshalJSON(t *testing.T) {
function TestDynamicFetchConcurrent (line 131) | func TestDynamicFetchConcurrent(t *testing.T) {
FILE: pkg/authprovider/authx/file.go
type AuthType (line 17) | type AuthType
constant BasicAuth (line 20) | BasicAuth AuthType = "BasicAuth"
constant BearerTokenAuth (line 21) | BearerTokenAuth AuthType = "BearerToken"
constant HeadersAuth (line 22) | HeadersAuth AuthType = "Header"
constant CookiesAuth (line 23) | CookiesAuth AuthType = "Cookie"
constant QueryAuth (line 24) | QueryAuth AuthType = "Query"
function SupportedAuthTypes (line 28) | func SupportedAuthTypes() []string {
type Authx (line 39) | type Authx struct
type AuthFileInfo (line 46) | type AuthFileInfo struct
type Secret (line 54) | type Secret struct
method GetStrategy (line 68) | func (s *Secret) GetStrategy() AuthStrategy {
method Validate (line 84) | func (s *Secret) Validate() error {
type KV (line 150) | type KV struct
method Validate (line 155) | func (k *KV) Validate() error {
type Cookie (line 165) | type Cookie struct
method Validate (line 171) | func (c *Cookie) Validate() error {
method Parse (line 187) | func (c *Cookie) Parse() error {
function GetAuthDataFromFile (line 207) | func GetAuthDataFromFile(file string) (*Authx, error) {
function GetTemplatePathsFromSecretFile (line 223) | func GetTemplatePathsFromSecretFile(file string) ([]string, error) {
function GetAuthDataFromYAML (line 236) | func GetAuthDataFromYAML(data []byte) (*Authx, error) {
function GetAuthDataFromJSON (line 248) | func GetAuthDataFromJSON(data []byte) (*Authx, error) {
FILE: pkg/authprovider/authx/file_test.go
function TestSecretsUnmarshal (line 9) | func TestSecretsUnmarshal(t *testing.T) {
FILE: pkg/authprovider/authx/headers_auth.go
type HeadersAuthStrategy (line 14) | type HeadersAuthStrategy struct
method Apply (line 26) | func (s *HeadersAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 35) | func (s *HeadersAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
function NewHeadersAuthStrategy (line 19) | func NewHeadersAuthStrategy(data *Secret) *HeadersAuthStrategy {
FILE: pkg/authprovider/authx/query_auth.go
type QueryAuthStrategy (line 15) | type QueryAuthStrategy struct
method Apply (line 25) | func (s *QueryAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 35) | func (s *QueryAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
function NewQueryAuthStrategy (line 20) | func NewQueryAuthStrategy(data *Secret) *QueryAuthStrategy {
FILE: pkg/authprovider/authx/strategy.go
type AuthStrategy (line 11) | type AuthStrategy interface
type DynamicAuthStrategy (line 20) | type DynamicAuthStrategy struct
method Apply (line 26) | func (d *DynamicAuthStrategy) Apply(req *http.Request) {
method ApplyOnRR (line 40) | func (d *DynamicAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
FILE: pkg/authprovider/file.go
type FileAuthProvider (line 16) | type FileAuthProvider struct
method init (line 57) | func (f *FileAuthProvider) init() {
method LookupAddr (line 128) | func (f *FileAuthProvider) LookupAddr(addr string) []authx.AuthStrategy {
method LookupURL (line 153) | func (f *FileAuthProvider) LookupURL(u *url.URL) []authx.AuthStrategy {
method LookupURLX (line 158) | func (f *FileAuthProvider) LookupURLX(u *urlutil.URL) []authx.AuthStra...
method GetTemplatePaths (line 163) | func (f *FileAuthProvider) GetTemplatePaths() []string {
method PreFetchSecrets (line 174) | func (f *FileAuthProvider) PreFetchSecrets() error {
function NewFileAuthProvider (line 24) | func NewFileAuthProvider(path string, callback authx.LazyFetchSecret) (A...
FILE: pkg/authprovider/file_test.go
function TestFileAuthProviderDynamicSecretConcurrentAccess (line 17) | func TestFileAuthProviderDynamicSecretConcurrentAccess(t *testing.T) {
FILE: pkg/authprovider/interface.go
type AuthProvider (line 22) | type AuthProvider interface
type AuthProviderOptions (line 41) | type AuthProviderOptions struct
function NewAuthProvider (line 49) | func NewAuthProvider(options *AuthProviderOptions) (AuthProvider, error) {
FILE: pkg/authprovider/multi.go
type MultiAuthProvider (line 13) | type MultiAuthProvider struct
method LookupAddr (line 22) | func (m *MultiAuthProvider) LookupAddr(host string) []authx.AuthStrate...
method LookupURL (line 32) | func (m *MultiAuthProvider) LookupURL(u *url.URL) []authx.AuthStrategy {
method LookupURLX (line 42) | func (m *MultiAuthProvider) LookupURLX(u *urlutil.URL) []authx.AuthStr...
method GetTemplatePaths (line 52) | func (m *MultiAuthProvider) GetTemplatePaths() []string {
method PreFetchSecrets (line 60) | func (m *MultiAuthProvider) PreFetchSecrets() error {
function NewMultiAuthProvider (line 18) | func NewMultiAuthProvider(providers ...AuthProvider) AuthProvider {
FILE: pkg/catalog/aws/catalog.go
type Catalog (line 21) | type Catalog struct
method OpenFile (line 84) | func (c Catalog) OpenFile(filename string) (io.ReadCloser, error) {
method GetTemplatePath (line 94) | func (c Catalog) GetTemplatePath(target string) ([]string, error) {
method GetTemplatesPath (line 113) | func (c Catalog) GetTemplatesPath(definitions []string) ([]string, map...
method ResolvePath (line 125) | func (c Catalog) ResolvePath(templateName, second string) (string, err...
type client (line 26) | type client interface
type s3svc (line 32) | type s3svc struct
method getAllKeys (line 151) | func (s *s3svc) getAllKeys() ([]string, error) {
method downloadKey (line 172) | func (s *s3svc) downloadKey(name string) (io.ReadCloser, error) {
method setBucket (line 186) | func (s *s3svc) setBucket(bucket string) {
function NewCatalog (line 39) | func NewCatalog(bucket string, configurations ...func(*Catalog) error) (...
function WithAWSKeys (line 65) | func WithAWSKeys(accessKey, secretKey, region string) func(*Catalog) err...
FILE: pkg/catalog/aws/catalog_test.go
function TestCatalog_GetTemplatePath (line 13) | func TestCatalog_GetTemplatePath(t *testing.T) {
function TestCatalog_GetTemplatesPath (line 77) | func TestCatalog_GetTemplatesPath(t *testing.T) {
function TestCatalog_OpenFile (line 133) | func TestCatalog_OpenFile(t *testing.T) {
function TestCatalog_ResolvePath (line 170) | func TestCatalog_ResolvePath(t *testing.T) {
function withMockS3Service (line 224) | func withMockS3Service() func(*Catalog) error {
type mocks3svc (line 231) | type mocks3svc struct
method getAllKeys (line 249) | func (m mocks3svc) getAllKeys() ([]string, error) {
method downloadKey (line 253) | func (m mocks3svc) downloadKey(name string) (io.ReadCloser, error) {
method setBucket (line 281) | func (m mocks3svc) setBucket(bucket string) {}
function newMockS3Service (line 235) | func newMockS3Service() mocks3svc {
FILE: pkg/catalog/catalog.go
type Catalog (line 6) | type Catalog interface
FILE: pkg/catalog/config/constants.go
type AppMode (line 9) | type AppMode
constant AppModeLibrary (line 12) | AppModeLibrary AppMode = "library"
constant AppModeCLI (line 13) | AppModeCLI AppMode = "cli"
constant TemplateConfigFileName (line 24) | TemplateConfigFileName = ".templates-config.json"
constant NucleiTemplatesDirName (line 25) | NucleiTemplatesDirName = "nuclei-templates"
constant OfficialNucleiTemplatesRepoName (line 26) | OfficialNucleiTemplatesRepoName = "nuclei-templates"
constant NucleiIgnoreFileName (line 27) | NucleiIgnoreFileName = ".nuclei-ignore"
constant NucleiTemplatesIndexFileName (line 28) | NucleiTemplatesIndexFileName = ".templates-index"
constant NucleiTemplatesCheckSumFileName (line 29) | NucleiTemplatesCheckSumFileName = ".checksum"
constant NewTemplateAdditionsFileName (line 30) | NewTemplateAdditionsFileName = ".new-additions"
constant CLIConfigFileName (line 31) | CLIConfigFileName = "config.yaml"
constant ReportingConfigFilename (line 32) | ReportingConfigFilename = "reporting-config.yaml"
constant Version (line 34) | Version = `v3.7.1`
constant CustomS3TemplatesDirName (line 36) | CustomS3TemplatesDirName = "s3"
constant CustomGitHubTemplatesDirName (line 37) | CustomGitHubTemplatesDirName = "github"
constant CustomAzureTemplatesDirName (line 38) | CustomAzureTemplatesDirName = "azure"
constant CustomGitLabTemplatesDirName (line 39) | CustomGitLabTemplatesDirName = "gitlab"
constant BinaryName (line 40) | BinaryName = "nuclei"
constant FallbackConfigFolderName (line 41) | FallbackConfigFolderName = ".nuclei-config"
constant NucleiConfigDirEnv (line 42) | NucleiConfigDirEnv = "NUCLEI_CONFIG_DIR"
constant NucleiTemplatesDirEnv (line 43) | NucleiTemplatesDirEnv = "NUCLEI_TEMPLATES_DIR"
function IsOutdatedVersion (line 48) | func IsOutdatedVersion(current, latest string) bool {
function trimDevIfExists (line 69) | func trimDevIfExists(version string) string {
constant DebugArgHostErrorStats (line 81) | DebugArgHostErrorStats = "host-error-stats"
constant DebugExportURLPattern (line 83) | DebugExportURLPattern = "req-url-pattern"
FILE: pkg/catalog/config/ignorefile.go
type IgnoreFile (line 11) | type IgnoreFile struct
function ReadIgnoreFile (line 17) | func ReadIgnoreFile() IgnoreFile {
FILE: pkg/catalog/config/nucleiconfig.go
type Config (line 25) | type Config struct
method IsCustomTemplate (line 64) | func (c *Config) IsCustomTemplate(templatePath string) bool {
method WriteVersionCheckData (line 81) | func (c *Config) WriteVersionCheckData(ignorehash, nucleiVersion, temp...
method GetTemplateDir (line 103) | func (c *Config) GetTemplateDir() string {
method DisableUpdateCheck (line 109) | func (c *Config) DisableUpdateCheck() {
method CanCheckForUpdates (line 116) | func (c *Config) CanCheckForUpdates() bool {
method NeedsTemplateUpdate (line 123) | func (c *Config) NeedsTemplateUpdate() bool {
method NeedsIgnoreFileUpdate (line 130) | func (c *Config) NeedsIgnoreFileUpdate() bool {
method UpdateNucleiIgnoreHash (line 137) | func (c *Config) UpdateNucleiIgnoreHash() error {
method GetConfigDir (line 153) | func (c *Config) GetConfigDir() string {
method GetKeysDir (line 158) | func (c *Config) GetKeysDir() string {
method GetAllCustomTemplateDirs (line 163) | func (c *Config) GetAllCustomTemplateDirs() []string {
method GetReportingConfigFilePath (line 168) | func (c *Config) GetReportingConfigFilePath() string {
method GetIgnoreFilePath (line 173) | func (c *Config) GetIgnoreFilePath() string {
method GetTemplateIndexFilePath (line 177) | func (c *Config) GetTemplateIndexFilePath() string {
method GetChecksumFilePath (line 182) | func (c *Config) GetChecksumFilePath() string {
method GetFlagsConfigFilePath (line 187) | func (c *Config) GetFlagsConfigFilePath() string {
method GetNewAdditions (line 193) | func (c *Config) GetNewAdditions() []string {
method GetCacheDir (line 215) | func (c *Config) GetCacheDir() string {
method SetConfigDir (line 221) | func (c *Config) SetConfigDir(dir string) {
method SetTemplatesDir (line 242) | func (c *Config) SetTemplatesDir(dirPath string) {
method SetTemplatesVersion (line 256) | func (c *Config) SetTemplatesVersion(version string) error {
method ReadTemplatesConfig (line 266) | func (c *Config) ReadTemplatesConfig() error {
method WriteTemplatesConfig (line 288) | func (c *Config) WriteTemplatesConfig() error {
method WriteTemplatesIndex (line 304) | func (c *Config) WriteTemplatesIndex(index map[string]string) error {
method getTemplatesConfigFilePath (line 314) | func (c *Config) getTemplatesConfigFilePath() string {
method createConfigDirIfNotExists (line 319) | func (c *Config) createConfigDirIfNotExists() error {
method copyIgnoreFile (line 330) | func (c *Config) copyIgnoreFile() {
method IsDebugArgEnabled (line 347) | func (c *Config) IsDebugArgEnabled(arg string) bool {
method parseDebugArgs (line 352) | func (c *Config) parseDebugArgs(data string) {
function init (line 379) | func init() {
function applyDefaultConfig (line 427) | func applyDefaultConfig() {
FILE: pkg/catalog/config/template.go
type TemplateFormat (line 21) | type TemplateFormat
constant YAML (line 24) | YAML TemplateFormat = iota
constant JSON (line 25) | JSON
constant Unknown (line 26) | Unknown
function GetKnownConfigFiles (line 30) | func GetKnownConfigFiles() []string {
function GetKnownMiscDirectories (line 39) | func GetKnownMiscDirectories() []string {
function GetTemplateFormatFromExt (line 49) | func GetTemplateFormatFromExt(filePath string) TemplateFormat {
function GetSupportTemplateFileExtensions (line 62) | func GetSupportTemplateFileExtensions() []string {
function IsTemplate (line 68) | func IsTemplate(fpath string) bool {
function IsTemplateWithRoot (line 75) | func IsTemplateWithRoot(fpath, rootDir string) bool {
type template (line 116) | type template struct
function GetTemplateIDFromReader (line 121) | func GetTemplateIDFromReader(data io.Reader, filename string) (string, e...
function getTemplateID (line 133) | func getTemplateID(filePath string) (string, error) {
function GetNucleiTemplatesIndex (line 146) | func GetNucleiTemplatesIndex() (map[string]string, error) {
FILE: pkg/catalog/config/template_test.go
function toAbs (line 12) | func toAbs(p string) string {
function TestIsTemplate (line 31) | func TestIsTemplate(t *testing.T) {
FILE: pkg/catalog/disk/catalog.go
type DiskCatalog (line 12) | type DiskCatalog struct
method OpenFile (line 39) | func (d *DiskCatalog) OpenFile(filename string) (io.ReadCloser, error) {
function NewCatalog (line 19) | func NewCatalog(directory string) *DiskCatalog {
function NewFSCatalog (line 29) | func NewFSCatalog(fs fs.FS, directory string) *DiskCatalog {
FILE: pkg/catalog/disk/find.go
method GetTemplatesPath (line 21) | func (c *DiskCatalog) GetTemplatesPath(definitions []string) ([]string, ...
method GetTemplatePath (line 67) | func (c *DiskCatalog) GetTemplatePath(target string) ([]string, error) {
method convertPathToAbsolute (line 120) | func (c *DiskCatalog) convertPathToAbsolute(t string) (string, error) {
method findGlobPathMatches (line 133) | func (c *DiskCatalog) findGlobPathMatches(absPath string, processed map[...
method findFileMatches (line 170) | func (c *DiskCatalog) findFileMatches(absPath string, processed map[stri...
method findDirectoryMatches (line 203) | func (c *DiskCatalog) findDirectoryMatches(absPath string, processed map...
function PrintDeprecatedPathsMsgIfApplicable (line 256) | func PrintDeprecatedPathsMsgIfApplicable(isSilent bool) {
FILE: pkg/catalog/disk/path.go
method ResolvePath (line 21) | func (c *DiskCatalog) ResolvePath(templateName, second string) (string, ...
method tryResolve (line 60) | func (c *DiskCatalog) tryResolve(fullPath string) (string, error) {
function BackwardsCompatiblePaths (line 78) | func BackwardsCompatiblePaths(templateDir string, oldPath string) string {
FILE: pkg/catalog/index/filter.go
type Filter (line 20) | type Filter struct
method Matches (line 59) | func (f *Filter) Matches(m *Metadata) bool {
method isForcedInclude (line 76) | func (f *Filter) isForcedInclude(m *Metadata) bool {
method isExcluded (line 95) | func (f *Filter) isExcluded(m *Metadata) bool {
method matchesIncludes (line 137) | func (f *Filter) matchesIncludes(m *Metadata) bool {
method IsEmpty (line 286) | func (f *Filter) IsEmpty() bool {
method String (line 302) | func (f *Filter) String() string {
function matchesID (line 179) | func matchesID(templateID, pattern string) bool {
function matchesPath (line 194) | func matchesPath(templatePath, pattern string) bool {
type FilterFunc (line 212) | type FilterFunc
function UnmarshalFilter (line 215) | func UnmarshalFilter(
function UnmarshalFilterFunc (line 277) | func UnmarshalFilterFunc(filter *Filter) FilterFunc {
FILE: pkg/catalog/index/filter_test.go
function TestFilterMatches (line 13) | func TestFilterMatches(t *testing.T) {
function TestMatchesPath (line 169) | func TestMatchesPath(t *testing.T) {
function TestMatchesID (line 191) | func TestMatchesID(t *testing.T) {
function TestUnmarshalFilter (line 216) | func TestUnmarshalFilter(t *testing.T) {
function TestIndexFilter (line 259) | func TestIndexFilter(t *testing.T) {
function TestIndexFilterFunc (line 358) | func TestIndexFilterFunc(t *testing.T) {
function TestFilterString (line 391) | func TestFilterString(t *testing.T) {
FILE: pkg/catalog/index/index.go
constant IndexFileName (line 18) | IndexFileName = "index.gob"
constant IndexVersion (line 22) | IndexVersion = 1
constant DefaultMaxSize (line 25) | DefaultMaxSize = 50000
constant DefaultMaxWeight (line 28) | DefaultMaxWeight = DefaultMaxSize * 800
type Index (line 32) | type Index struct
method Get (line 106) | func (i *Index) Get(path string) (*Metadata, bool) {
method Set (line 131) | func (i *Index) Set(path string, metadata *Metadata) (*Metadata, bool) {
method SetFromTemplate (line 143) | func (i *Index) SetFromTemplate(path string, tpl *templates.Template) ...
method Has (line 160) | func (i *Index) Has(path string) bool {
method Delete (line 170) | func (i *Index) Delete(path string) {
method Size (line 178) | func (i *Index) Size() int {
method Clear (line 186) | func (i *Index) Clear() {
method Save (line 194) | func (i *Index) Save() error {
method Load (line 236) | func (i *Index) Load() error {
method Filter (line 275) | func (i *Index) Filter(filter *Filter) []string {
method FilterFunc (line 294) | func (i *Index) FilterFunc(fn FilterFunc) []string {
method All (line 313) | func (i *Index) All() []string {
method GetAll (line 326) | func (i *Index) GetAll() map[string]*Metadata {
method Count (line 336) | func (i *Index) Count(filter *Filter) int {
type cacheSnapshot (line 40) | type cacheSnapshot struct
function NewIndex (line 46) | func NewIndex(cacheDir string) (*Index, error) {
function NewDefaultIndex (line 101) | func NewDefaultIndex() (*Index, error) {
FILE: pkg/catalog/index/index_test.go
function TestNewIndex (line 21) | func TestNewIndex(t *testing.T) {
function TestCacheBasicOperations (line 38) | func TestCacheBasicOperations(t *testing.T) {
function TestCachePersistence (line 80) | func TestCachePersistence(t *testing.T) {
function TestIndexVersionMismatch (line 167) | func TestIndexVersionMismatch(t *testing.T) {
function TestCacheCorruptedFile (line 199) | func TestCacheCorruptedFile(t *testing.T) {
function TestMetadataValidation (line 220) | func TestMetadataValidation(t *testing.T) {
function TestSetFromTemplate (line 293) | func TestSetFromTemplate(t *testing.T) {
function TestMetadataMatchingHelpers (line 382) | func TestMetadataMatchingHelpers(t *testing.T) {
function TestCacheConcurrency (line 427) | func TestCacheConcurrency(t *testing.T) {
function TestCacheSize (line 477) | func TestCacheSize(t *testing.T) {
function TestCacheGetWithValidFile (line 506) | func TestCacheGetWithValidFile(t *testing.T) {
function TestCacheSaveErrorHandling (line 534) | func TestCacheSaveErrorHandling(t *testing.T) {
function TestNewCacheWithInvalidDirectory (line 555) | func TestNewCacheWithInvalidDirectory(t *testing.T) {
function TestCacheLoadCorruptedRemoval (line 566) | func TestCacheLoadCorruptedRemoval(t *testing.T) {
function TestMetadataExtractionWithNilClassification (line 591) | func TestMetadataExtractionWithNilClassification(t *testing.T) {
function TestCachePersistenceWithLargeDataset (line 617) | func TestCachePersistenceWithLargeDataset(t *testing.T) {
function TestMetadataHelperMethods (line 654) | func TestMetadataHelperMethods(t *testing.T) {
function TestMultipleProtocolsDetection (line 680) | func TestMultipleProtocolsDetection(t *testing.T) {
function TestNewMetadataFromTemplate (line 710) | func TestNewMetadataFromTemplate(t *testing.T) {
FILE: pkg/catalog/index/metadata.go
type Metadata (line 14) | type Metadata struct
method IsValid (line 77) | func (m *Metadata) IsValid() bool {
method MatchesSeverity (line 87) | func (m *Metadata) MatchesSeverity(sev severity.Severity) bool {
method MatchesProtocol (line 92) | func (m *Metadata) MatchesProtocol(protocolType types.ProtocolType) bo...
method HasTag (line 97) | func (m *Metadata) HasTag(tag string) bool {
method HasAuthor (line 102) | func (m *Metadata) HasAuthor(author string) bool {
function NewMetadataFromTemplate (line 58) | func NewMetadataFromTemplate(path string, tpl *templates.Template) *Meta...
FILE: pkg/catalog/loader/ai_loader.go
constant aiTemplateGeneratorAPIEndpoint (line 21) | aiTemplateGeneratorAPIEndpoint = "https://api.projectdiscovery.io/v1/tem...
type AITemplateResponse (line 24) | type AITemplateResponse struct
function getAIGeneratedTemplates (line 33) | func getAIGeneratedTemplates(prompt string, options *types.Options) ([]s...
function generateAITemplate (line 88) | func generateAITemplate(prompt string) (string, string, error) {
FILE: pkg/catalog/loader/filter/path_filter.go
type PathFilter (line 8) | type PathFilter struct
method Match (line 35) | func (p *PathFilter) Match(templates []string) map[string]struct{} {
method MatchIncluded (line 51) | func (p *PathFilter) MatchIncluded(template string) bool {
type PathFilterConfig (line 14) | type PathFilterConfig struct
function NewPathFilter (line 20) | func NewPathFilter(config *PathFilterConfig, catalogClient catalog.Catal...
FILE: pkg/catalog/loader/loader.go
constant httpPrefix (line 38) | httpPrefix = "http://"
constant httpsPrefix (line 39) | httpsPrefix = "https://"
constant AuthStoreId (line 40) | AuthStoreId = "auth_store"
type Config (line 48) | type Config struct
type Store (line 77) | type Store struct
method getTemplateVerification (line 252) | func (store *Store) getTemplateVerification(templatePath string) *prot...
method ReadTemplateFromURI (line 291) | func (store *Store) ReadTemplateFromURI(uri string, remote bool) ([]by...
method ID (line 315) | func (store *Store) ID() string {
method Templates (line 320) | func (store *Store) Templates() []*templates.Template {
method Workflows (line 325) | func (store *Store) Workflows() []*templates.Template {
method RegisterPreprocessor (line 330) | func (store *Store) RegisterPreprocessor(preprocessor templates.Prepro...
method Load (line 336) | func (store *Store) Load() error {
method buildIndexFilter (line 356) | func (store *Store) buildIndexFilter() *index.Filter {
method loadTemplatesIndex (line 376) | func (store *Store) loadTemplatesIndex() *index.Index {
method LoadTemplateTags (line 396) | func (store *Store) LoadTemplateTags() (map[string]int, error) {
method LoadTemplatesOnlyMetadata (line 473) | func (store *Store) LoadTemplatesOnlyMetadata() error {
method ValidateTemplates (line 586) | func (store *Store) ValidateTemplates() error {
method areWorkflowsValid (line 610) | func (store *Store) areWorkflowsValid(filteredWorkflowPaths map[string...
method areTemplatesValid (line 616) | func (store *Store) areTemplatesValid(filteredTemplatePaths map[string...
method areWorkflowOrTemplatesValid (line 622) | func (store *Store) areWorkflowOrTemplatesValid(filteredTemplatePaths ...
method LoadTemplates (line 725) | func (store *Store) LoadTemplates(templatesList []string) ([]*template...
method LoadWorkflows (line 730) | func (store *Store) LoadWorkflows(workflowsList []string) []*templates...
method LoadTemplatesWithTags (line 757) | func (store *Store) LoadTemplatesWithTags(templatesList, tags []string...
method logErroredTemplates (line 984) | func (s *Store) logErroredTemplates(erred map[string]error) {
function NewConfig (line 110) | func NewConfig(options *types.Options, catalog catalog.Catalog, executer...
function New (line 140) | func New(cfg *Config) (*Store, error) {
function handleTemplatesEditorURLs (line 268) | func handleTemplatesEditorURLs(input string) string {
function init (line 348) | func init() {
function areWorkflowTemplatesValid (line 693) | func areWorkflowTemplatesValid(store *Store, workflows []*workflows.Work...
function isParsingError (line 710) | func isParsingError(store *Store, message string, template string, err e...
function IsHTTPBasedProtocolUsed (line 946) | func IsHTTPBasedProtocolUsed(store *Store) bool {
function workflowContainsProtocol (line 963) | func workflowContainsProtocol(workflow []*workflows.WorkflowTemplate) bo...
FILE: pkg/catalog/loader/loader_bench_test.go
function BenchmarkStoreValidateTemplates (line 17) | func BenchmarkStoreValidateTemplates(b *testing.B) {
function BenchmarkLoadTemplates (line 47) | func BenchmarkLoadTemplates(b *testing.B) {
function BenchmarkLoadTemplatesOnlyMetadata (line 189) | func BenchmarkLoadTemplatesOnlyMetadata(b *testing.B) {
FILE: pkg/catalog/loader/loader_test.go
function TestLoadTemplates (line 12) | func TestLoadTemplates(t *testing.T) {
function TestRemoteTemplates (line 49) | func TestRemoteTemplates(t *testing.T) {
FILE: pkg/catalog/loader/remote_loader.go
type ContentType (line 20) | type ContentType
constant Template (line 23) | Template ContentType = "Template"
constant Workflow (line 24) | Workflow ContentType = "Workflow"
type RemoteContent (line 27) | type RemoteContent struct
function getRemoteTemplatesAndWorkflows (line 33) | func getRemoteTemplatesAndWorkflows(templateURLs, workflowURLs, remoteTe...
function getRemoteContent (line 82) | func getRemoteContent(URL string, remoteTemplateDomainList []string, con...
function validateRemoteTemplateURL (line 128) | func validateRemoteTemplateURL(inputURL string, remoteTemplateDomainList...
FILE: pkg/core/engine.go
type Engine (line 18) | type Engine struct
method GetWorkPoolConfig (line 36) | func (e *Engine) GetWorkPoolConfig() WorkPoolConfig {
method GetWorkPool (line 47) | func (e *Engine) GetWorkPool() *WorkPool {
method SetExecuterOptions (line 53) | func (e *Engine) SetExecuterOptions(options *protocols.ExecutorOptions) {
method ExecuterOptions (line 58) | func (e *Engine) ExecuterOptions() *protocols.ExecutorOptions {
method WorkPool (line 63) | func (e *Engine) WorkPool() *WorkPool {
function New (line 27) | func New(options *types.Options) *Engine {
FILE: pkg/core/execute_options.go
method Execute (line 23) | func (e *Engine) Execute(ctx context.Context, templates []*templates.Tem...
method ExecuteWithResults (line 28) | func (e *Engine) ExecuteWithResults(ctx context.Context, templatesList [...
method ExecuteScanWithOpts (line 34) | func (e *Engine) ExecuteScanWithOpts(ctx context.Context, templatesList ...
method executeTemplateSpray (line 108) | func (e *Engine) executeTemplateSpray(ctx context.Context, templatesList...
method executeHostSpray (line 148) | func (e *Engine) executeHostSpray(ctx context.Context, templatesList []*...
function getRequestCount (line 171) | func getRequestCount(templates []*templates.Template) int {
FILE: pkg/core/executors.go
method executeAllSelfContained (line 22) | func (e *Engine) executeAllSelfContained(ctx context.Context, alltemplat...
method executeTemplateWithTargets (line 50) | func (e *Engine) executeTemplateWithTargets(ctx context.Context, templat...
method executeTemplatesOnTarget (line 186) | func (e *Engine) executeTemplatesOnTarget(ctx context.Context, alltempla...
method executeTemplateOnInput (line 247) | func (e *Engine) executeTemplateOnInput(ctx context.Context, template *t...
FILE: pkg/core/executors_test.go
type fakeExecuter (line 21) | type fakeExecuter struct
method Compile (line 25) | func (f *fakeExecuter) Compile() error { ...
method Requests (line 26) | func (f *fakeExecuter) Requests() int { ...
method Execute (line 27) | func (f *fakeExecuter) Execute(ctx *scan.ScanContext) (bool, error) { ...
method ExecuteWithResults (line 28) | func (f *fakeExecuter) ExecuteWithResults(ctx *scan.ScanContext) ([]*o...
function newTestEngine (line 36) | func newTestEngine() *Engine {
function Test_executeTemplateOnInput_CallbackPath (line 40) | func Test_executeTemplateOnInput_CallbackPath(t *testing.T) {
function Test_executeTemplateOnInput_ExecutePath (line 60) | func Test_executeTemplateOnInput_ExecutePath(t *testing.T) {
type fakeExecuterErr (line 74) | type fakeExecuterErr struct
method Compile (line 76) | func (f *fakeExecuterErr) Compile() error ...
method Requests (line 77) | func (f *fakeExecuterErr) Requests() int ...
method Execute (line 78) | func (f *fakeExecuterErr) Execute(ctx *scan.ScanContext) (bool, error)...
method ExecuteWithResults (line 79) | func (f *fakeExecuterErr) ExecuteWithResults(ctx *scan.ScanContext) ([...
function Test_executeTemplateOnInput_CallbackErrorPropagates (line 83) | func Test_executeTemplateOnInput_CallbackErrorPropagates(t *testing.T) {
type fakeTargetProvider (line 98) | type fakeTargetProvider struct
method Count (line 102) | func (f *fakeTargetProvider) Count() int64 { return int64(len(f.values...
method Iterate (line 103) | func (f *fakeTargetProvider) Iterate(cb func(value *contextargs.MetaIn...
method Set (line 110) | func (f *fakeTargetProvider) Set(string, string) {}
method SetWithProbe (line 111) | func (f *fakeTargetProvider) SetWithProbe(string, string, inputtypes.I...
method SetWithExclusions (line 114) | func (f *fakeTargetProvider) SetWithExclusions(string, string) error {...
method InputType (line 115) | func (f *fakeTargetProvider) InputType() string {...
method Close (line 116) | func (f *fakeTargetProvider) Close() {}
type slowExecuter (line 118) | type slowExecuter struct
method Compile (line 120) | func (s *slowExecuter) Compile() error { return nil }
method Requests (line 121) | func (s *slowExecuter) Requests() int { return 1 }
method Execute (line 122) | func (s *slowExecuter) Execute(ctx *scan.ScanContext) (bool, error) {
method ExecuteWithResults (line 130) | func (s *slowExecuter) ExecuteWithResults(ctx *scan.ScanContext) ([]*o...
function Test_executeTemplateWithTargets_RespectsCancellation (line 134) | func Test_executeTemplateWithTargets_RespectsCancellation(t *testing.T) {
FILE: pkg/core/workflow_execute.go
constant workflowStepExecutionError (line 16) | workflowStepExecutionError = "[%s] Could not execute workflow step: %s\n"
method executeWorkflow (line 19) | func (e *Engine) executeWorkflow(ctx *scan.ScanContext, w *workflows.Wor...
method runWorkflowStep (line 50) | func (e *Engine) runWorkflowStep(template *workflows.WorkflowTemplate, c...
FILE: pkg/core/workflow_execute_test.go
function TestWorkflowsSimple (line 19) | func TestWorkflowsSimple(t *testing.T) {
function TestWorkflowsSimpleMultiple (line 35) | func TestWorkflowsSimpleMultiple(t *testing.T) {
function TestWorkflowsSubtemplates (line 62) | func TestWorkflowsSubtemplates(t *testing.T) {
function TestWorkflowsSubtemplatesNoMatch (line 90) | func TestWorkflowsSubtemplatesNoMatch(t *testing.T) {
function TestWorkflowsSubtemplatesWithMatcher (line 116) | func TestWorkflowsSubtemplatesWithMatcher(t *testing.T) {
function TestWorkflowsSubtemplatesWithMatcherNoMatch (line 147) | func TestWorkflowsSubtemplatesWithMatcherNoMatch(t *testing.T) {
type mockExecuter (line 178) | type mockExecuter struct
method Compile (line 185) | func (m *mockExecuter) Compile() error {
method Requests (line 190) | func (m *mockExecuter) Requests() int {
method Execute (line 195) | func (m *mockExecuter) Execute(ctx *scan.ScanContext) (bool, error) {
method ExecuteWithResults (line 203) | func (m *mockExecuter) ExecuteWithResults(ctx *scan.ScanContext) ([]*o...
FILE: pkg/core/workpool.go
type WorkPool (line 16) | type WorkPool struct
method Wait (line 47) | func (w *WorkPool) Wait() {
method InputPool (line 53) | func (w *WorkPool) InputPool(templateType types.ProtocolType) *syncuti...
method RefreshWithConfig (line 64) | func (w *WorkPool) RefreshWithConfig(config WorkPoolConfig) {
method Refresh (line 80) | func (w *WorkPool) Refresh(ctx context.Context) {
type WorkPoolConfig (line 23) | type WorkPoolConfig struct
function NewWorkPool (line 35) | func NewWorkPool(config WorkPoolConfig) *WorkPool {
FILE: pkg/external/customtemplates/azure_blob.go
type customTemplateAzureBlob (line 20) | type customTemplateAzureBlob struct
method Download (line 67) | func (bk *customTemplateAzureBlob) Download(ctx context.Context) {
method Update (line 111) | func (bk *customTemplateAzureBlob) Update(ctx context.Context) {
function NewAzureProviders (line 26) | func NewAzureProviders(options *types.Options) ([]*customTemplateAzureBl...
function getAzureBlobClient (line 49) | func getAzureBlobClient(tenantID string, clientID string, clientSecret s...
function downloadTemplate (line 118) | func downloadTemplate(client *azblob.Client, containerName string, path ...
FILE: pkg/external/customtemplates/github.go
type customTemplateGitHubRepo (line 24) | type customTemplateGitHubRepo struct
method Download (line 32) | func (customTemplate *customTemplateGitHubRepo) Download(ctx context.C...
method Update (line 46) | func (customTemplate *customTemplateGitHubRepo) Update(ctx context.Con...
method handlePullChanges (line 61) | func (customTemplate *customTemplateGitHubRepo) handlePullChanges(clon...
method logPullSuccess (line 75) | func (customTemplate *customTemplateGitHubRepo) logPullSuccess() {
method logAlreadyUpToDate (line 80) | func (customTemplate *customTemplateGitHubRepo) logAlreadyUpToDate(err...
method logPullError (line 85) | func (customTemplate *customTemplateGitHubRepo) logPullError(err error) {
method restructureRepoDir (line 122) | func (customTemplateRepo *customTemplateGitHubRepo) restructureRepoDir...
method cloneRepo (line 166) | func (ctr *customTemplateGitHubRepo) cloneRepo(clonePath, githubToken ...
method pullChanges (line 192) | func (ctr *customTemplateGitHubRepo) pullChanges(repoPath, githubToken...
method getLocalRepoClonePath (line 224) | func (ctr *customTemplateGitHubRepo) getLocalRepoClonePath(downloadPat...
function NewGitHubProviders (line 90) | func NewGitHubProviders(options *types.Options) ([]*customTemplateGitHub...
function getOwnerAndRepo (line 135) | func getOwnerAndRepo(reponame string) (owner string, repo string, err er...
function getGitHubRepo (line 147) | func getGitHubRepo(gitHubClient *github.Client, repoOwner, repoName, git...
function getAuth (line 229) | func getAuth(username, password string) *http.BasicAuth {
function getGHClientWithToken (line 236) | func getGHClientWithToken(token string) *github.Client {
function getGHClientIncognito (line 249) | func getGHClientIncognito() *github.Client {
FILE: pkg/external/customtemplates/github_test.go
function TestDownloadCustomTemplatesFromGitHub (line 18) | func TestDownloadCustomTemplatesFromGitHub(t *testing.T) {
FILE: pkg/external/customtemplates/gitlab.go
type customTemplateGitLabRepo (line 18) | type customTemplateGitLabRepo struct
method Download (line 50) | func (bk *customTemplateGitLabRepo) Download(_ context.Context) {
method Update (line 138) | func (bk *customTemplateGitLabRepo) Update(ctx context.Context) {
function NewGitLabProviders (line 25) | func NewGitLabProviders(options *types.Options) ([]*customTemplateGitLab...
function getGitLabClient (line 147) | func getGitLabClient(server string, token string) (*gitlab.Client, error) {
FILE: pkg/external/customtemplates/s3.go
type customTemplateS3Bucket (line 23) | type customTemplateS3Bucket struct
method Download (line 31) | func (bk *customTemplateS3Bucket) Download(ctx context.Context) {
method Update (line 57) | func (bk *customTemplateS3Bucket) Update(ctx context.Context) {
function NewS3Providers (line 62) | func NewS3Providers(options *types.Options) ([]*customTemplateS3Bucket, ...
function downloadToFile (line 85) | func downloadToFile(downloader *manager.Downloader, targetDirectory, buc...
function getS3Client (line 111) | func getS3Client(ctx context.Context, accessKey string, secretKey string...
FILE: pkg/external/customtemplates/templates_provider.go
type Provider (line 10) | type Provider interface
type CustomTemplatesManager (line 16) | type CustomTemplatesManager struct
method Download (line 21) | func (c *CustomTemplatesManager) Download(ctx context.Context) {
method Update (line 28) | func (c *CustomTemplatesManager) Update(ctx context.Context) {
function NewCustomTemplatesManager (line 35) | func NewCustomTemplatesManager(options *types.Options) (*CustomTemplates...
FILE: pkg/fuzz/analyzers/analyzers.go
type Analyzer (line 15) | type Analyzer interface
type AnalyzerTemplate (line 25) | type AnalyzerTemplate struct
function RegisterAnalyzer (line 45) | func RegisterAnalyzer(name string, analyzer Analyzer) {
function GetAnalyzer (line 50) | func GetAnalyzer(name string) Analyzer {
function init (line 54) | func init() {
type Options (line 59) | type Options struct
function ApplyPayloadTransformations (line 74) | func ApplyPayloadTransformations(value string) string {
constant letterBytes (line 83) | letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
function randStringBytesMask (line 85) | func randStringBytesMask(n int) string {
function GetRandomInteger (line 94) | func GetRandomInteger() int {
FILE: pkg/fuzz/analyzers/time/analyzer.go
type Analyzer (line 18) | type Analyzer struct
method Name (line 38) | func (a *Analyzer) Name() string {
method ApplyInitialTransformation (line 50) | func (a *Analyzer) ApplyInitialTransformation(data string, params map[...
method parseAnalyzerParameters (line 72) | func (a *Analyzer) parseAnalyzerParameters(params map[string]interface...
method Analyze (line 101) | func (a *Analyzer) Analyze(options *analyzers.Options) (bool, string, ...
constant DefaultSleepDuration (line 22) | DefaultSleepDuration = int(7)
constant DefaultRequestsLimit (line 23) | DefaultRequestsLimit = int(4)
constant DefaultTimeCorrelationErrorRange (line 24) | DefaultTimeCorrelationErrorRange = float64(0.15)
constant DefaultTimeSlopeErrorRange (line 25) | DefaultTimeSlopeErrorRange = float64(0.30)
constant DefaultLowSleepTimeSeconds (line 26) | DefaultLowSleepTimeSeconds = float64(3)
constant defaultSleepTimeDuration (line 28) | defaultSleepTimeDuration = 7 * time.Second
function init (line 33) | func init() {
function getBaselineDelay (line 158) | func getBaselineDelay(reqSender timeDelayRequestSender) (float64, error) {
function doHTTPRequestWithTimeTracing (line 178) | func doHTTPRequestWithTimeTracing(req *retryablehttp.Request, httpclient...
FILE: pkg/fuzz/analyzers/time/time_delay.go
type timeDelayRequestSender (line 34) | type timeDelayRequestSender
type requestsSentMetadata (line 38) | type requestsSentMetadata struct
function checkTimingDependency (line 47) | func checkTimingDependency(
function sendRequestAndTestConfidence (line 115) | func sendRequestAndTestConfidence(
type simpleLinearRegression (line 138) | type simpleLinearRegression struct
method AddPoint (line 161) | func (o *simpleLinearRegression) AddPoint(x, y float64) {
method Predict (line 203) | func (o *simpleLinearRegression) Predict(x float64) float64 {
method IsWithinConfidence (line 207) | func (o *simpleLinearRegression) IsWithinConfidence(correlationErrorRa...
function newSimpleLinearRegression (line 152) | func newSimpleLinearRegression() *simpleLinearRegression {
FILE: pkg/fuzz/analyzers/time/time_delay_test.go
function perfectLinearSender (line 61) | func perfectLinearSender(baseline float64) func(delay int) (float64, err...
function noCorrelationSender (line 71) | func noCorrelationSender(baseline, noiseAmplitude float64) func(int) (fl...
function noisyLinearSender (line 83) | func noisyLinearSender(baseline float64) func(delay int) (float64, error) {
function TestPerfectLinear (line 92) | func TestPerfectLinear(t *testing.T) {
function TestNoCorrelation (line 117) | func TestNoCorrelation(t *testing.T) {
function TestNoisyLinear (line 142) | func TestNoisyLinear(t *testing.T) {
function TestMinimalData (line 170) | func TestMinimalData(t *testing.T) {
function linearSender (line 201) | func linearSender(baseline, slope, noiseAmplitude float64) func(int) (fl...
function negativeSlopeSender (line 213) | func negativeSlopeSender(baseline float64) func(int) (float64, error) {
function TestPerfectLinearSlopeOne_NoNoise (line 220) | func TestPerfectLinearSlopeOne_NoNoise(t *testing.T) {
function TestPerfectLinearSlopeTwo_NoNoise (line 238) | func TestPerfectLinearSlopeTwo_NoNoise(t *testing.T) {
function TestLinearWithNoise (line 257) | func TestLinearWithNoise(t *testing.T) {
function TestNoCorrelationHighBaseline (line 276) | func TestNoCorrelationHighBaseline(t *testing.T) {
function TestNegativeSlopeScenario (line 295) | func TestNegativeSlopeScenario(t *testing.T) {
function TestLargeNumberOfRequests (line 314) | func TestLargeNumberOfRequests(t *testing.T) {
function TestHighBaselineLowSlope (line 333) | func TestHighBaselineLowSlope(t *testing.T) {
function TestHighNoiseConcealsSlope (line 351) | func TestHighNoiseConcealsSlope(t *testing.T) {
function TestAlternatingSequences (line 372) | func TestAlternatingSequences(t *testing.T) {
function TestNonInjectableQuickFail (line 400) | func TestNonInjectableQuickFail(t *testing.T) {
function TestSlowNonInjectableCase (line 426) | func TestSlowNonInjectableCase(t *testing.T) {
function TestRealWorldNonInjectableCase (line 453) | func TestRealWorldNonInjectableCase(t *testing.T) {
function TestSmallErrorDependence (line 480) | func TestSmallErrorDependence(t *testing.T) {
FILE: pkg/fuzz/component/body.go
type Body (line 17) | type Body struct
method Name (line 31) | func (b *Body) Name() string {
method Parse (line 37) | func (b *Body) Parse(req *retryablehttp.Request) (bool, error) {
method parseBody (line 79) | func (b *Body) parseBody(decoderName string, req *retryablehttp.Reques...
method Iterate (line 96) | func (b *Body) Iterate(callback func(key string, value interface{}) er...
method SetValue (line 111) | func (b *Body) SetValue(key string, value string) error {
method Delete (line 119) | func (b *Body) Delete(key string) error {
method Rebuild (line 128) | func (b *Body) Rebuild() (*retryablehttp.Request, error) {
method Clone (line 142) | func (b *Body) Clone() Component {
function NewBody (line 26) | func NewBody() *Body {
FILE: pkg/fuzz/component/body_test.go
function TestBodyComponent (line 15) | func TestBodyComponent(t *testing.T) {
function TestBodyXMLComponent (line 53) | func TestBodyXMLComponent(t *testing.T) {
function TestBodyFormComponent (line 82) | func TestBodyFormComponent(t *testing.T) {
function TestMultiPartFormComponent (line 124) | func TestMultiPartFormComponent(t *testing.T) {
FILE: pkg/fuzz/component/component.go
function IsErrSetValue (line 14) | func IsErrSetValue(err error) bool {
type Component (line 25) | type Component interface
constant RequestBodyComponent (line 55) | RequestBodyComponent = "body"
constant RequestQueryComponent (line 57) | RequestQueryComponent = "query"
constant RequestPathComponent (line 59) | RequestPathComponent = "path"
constant RequestHeaderComponent (line 61) | RequestHeaderComponent = "header"
constant RequestCookieComponent (line 63) | RequestCookieComponent = "cookie"
function New (line 76) | func New(componentType string) Component {
FILE: pkg/fuzz/component/cookie.go
type Cookie (line 14) | type Cookie struct
method Name (line 28) | func (c *Cookie) Name() string {
method Parse (line 34) | func (c *Cookie) Parse(req *retryablehttp.Request) (bool, error) {
method Iterate (line 53) | func (c *Cookie) Iterate(callback func(key string, value interface{}) ...
method SetValue (line 66) | func (c *Cookie) SetValue(key string, value string) error {
method Delete (line 74) | func (c *Cookie) Delete(key string) error {
method Rebuild (line 83) | func (c *Cookie) Rebuild() (*retryablehttp.Request, error) {
method Clone (line 100) | func (c *Cookie) Clone() Component {
function NewCookie (line 23) | func NewCookie() *Cookie {
FILE: pkg/fuzz/component/cookie_test.go
function TestCookieComponent (line 11) | func TestCookieComponent(t *testing.T) {
FILE: pkg/fuzz/component/headers.go
type Header (line 12) | type Header struct
method Name (line 26) | func (q *Header) Name() string {
method Parse (line 32) | func (q *Header) Parse(req *retryablehttp.Request) (bool, error) {
method Iterate (line 49) | func (q *Header) Iterate(callback func(key string, value interface{}) ...
method SetValue (line 66) | func (q *Header) SetValue(key string, value string) error {
method Delete (line 74) | func (q *Header) Delete(key string) error {
method Rebuild (line 83) | func (q *Header) Rebuild() (*retryablehttp.Request, error) {
method Clone (line 109) | func (q *Header) Clone() Component {
function NewHeader (line 21) | func NewHeader() *Header {
FILE: pkg/fuzz/component/headers_test.go
function TestHeaderComponent (line 11) | func TestHeaderComponent(t *testing.T) {
FILE: pkg/fuzz/component/path.go
type Path (line 14) | type Path struct
method Name (line 29) | func (q *Path) Name() string {
method Parse (line 35) | func (q *Path) Parse(req *retryablehttp.Request) (bool, error) {
method Iterate (line 60) | func (q *Path) Iterate(callback func(key string, value interface{}) er...
method SetValue (line 73) | func (q *Path) SetValue(key string, value string) error {
method Delete (line 82) | func (q *Path) Delete(key string) error {
method Rebuild (line 91) | func (q *Path) Rebuild() (*retryablehttp.Request, error) {
method Clone (line 144) | func (q *Path) Clone() Component {
function NewPath (line 24) | func NewPath() *Path {
FILE: pkg/fuzz/component/path_test.go
function TestURLComponent (line 11) | func TestURLComponent(t *testing.T) {
function TestURLComponent_NestedPaths (line 47) | func TestURLComponent_NestedPaths(t *testing.T) {
function TestPathComponent_RebuildDoesNotMutateOriginal (line 86) | func TestPathComponent_RebuildDoesNotMutateOriginal(t *testing.T) {
function TestPathComponent_SQLInjection (line 126) | func TestPathComponent_SQLInjection(t *testing.T) {
FILE: pkg/fuzz/component/query.go
type Query (line 13) | type Query struct
method Name (line 27) | func (q *Query) Name() string {
method Parse (line 33) | func (q *Query) Parse(req *retryablehttp.Request) (bool, error) {
method Iterate (line 50) | func (q *Query) Iterate(callback func(key string, value interface{}) e...
method SetValue (line 63) | func (q *Query) SetValue(key string, value string) error {
method Delete (line 72) | func (q *Query) Delete(key string) error {
method Rebuild (line 81) | func (q *Query) Rebuild() (*retryablehttp.Request, error) {
method Clone (line 98) | func (q *Query) Clone() Component {
function NewQuery (line 22) | func NewQuery() *Query {
FILE: pkg/fuzz/component/query_test.go
function TestQueryComponent (line 11) | func TestQueryComponent(t *testing.T) {
FILE: pkg/fuzz/component/value.go
type Value (line 18) | type Value struct
method Clone (line 40) | func (v *Value) Clone() *Value {
method String (line 49) | func (v *Value) String() string {
method Parsed (line 54) | func (v *Value) Parsed() dataformat.KV {
method SetParsed (line 59) | func (v *Value) SetParsed(data dataformat.KV, dataFormat string) {
method SetParsedValue (line 76) | func (v *Value) SetParsedValue(key, value string) bool {
method Delete (line 132) | func (v *Value) Delete(key string) bool {
method Encode (line 138) | func (v *Value) Encode() (string, error) {
function NewValue (line 25) | func NewValue(data string) *Value {
function IsTypedSlice (line 168) | func IsTypedSlice(v interface{}) ([]interface{}, bool) {
FILE: pkg/fuzz/component/value_test.go
function TestFlatMap_FlattenUnflatten (line 10) | func TestFlatMap_FlattenUnflatten(t *testing.T) {
function TestAnySlice (line 41) | func TestAnySlice(t *testing.T) {
FILE: pkg/fuzz/dataformat/dataformat.go
constant DefaultKey (line 14) | DefaultKey = "value"
function init (line 17) | func init() {
constant JSONDataFormat (line 30) | JSONDataFormat = "json"
constant XMLDataFormat (line 32) | XMLDataFormat = "xml"
constant RawDataFormat (line 34) | RawDataFormat = "raw"
constant FormDataFormat (line 36) | FormDataFormat = "form"
constant MultiPartFormDataFormat (line 38) | MultiPartFormDataFormat = "multipart/form-data"
function Get (line 42) | func Get(name string) DataFormat {
function RegisterDataFormat (line 47) | func RegisterDataFormat(dataformat DataFormat) {
type DataFormat (line 52) | type DataFormat interface
type Decoded (line 64) | type Decoded struct
function Decode (line 72) | func Decode(data string) (*Decoded, error) {
function Encode (line 90) | func Encode(data KV, dataformat string) (string, error) {
FILE: pkg/fuzz/dataformat/dataformat_test.go
function TestDataformatDecodeEncode_JSON (line 7) | func TestDataformatDecodeEncode_JSON(t *testing.T) {
function TestDataformatDecodeEncode_XML (line 30) | func TestDataformatDecodeEncode_XML(t *testing.T) {
FILE: pkg/fuzz/dataformat/form.go
constant normalizedRegex (line 15) | normalizedRegex = `_(\d+)$`
type Form (line 32) | type Form struct
method IsType (line 44) | func (f *Form) IsType(data string) bool {
method Encode (line 49) | func (f *Form) Encode(data KV) (string, error) {
method Decode (line 132) | func (f *Form) Decode(data string) (KV, error) {
method Name (line 155) | func (f *Form) Name() string {
function NewForm (line 39) | func NewForm() *Form {
FILE: pkg/fuzz/dataformat/json.go
type JSON (line 16) | type JSON struct
method IsType (line 28) | func (j *JSON) IsType(data string) bool {
method Encode (line 33) | func (j *JSON) Encode(data KV) (string, error) {
method Decode (line 39) | func (j *JSON) Decode(data string) (KV, error) {
method Name (line 46) | func (j *JSON) Name() string {
function NewJSON (line 23) | func NewJSON() *JSON {
FILE: pkg/fuzz/dataformat/kv.go
type KV (line 15) | type KV struct
method Clone (line 21) | func (kv *KV) Clone() KV {
method IsNIL (line 33) | func (kv *KV) IsNIL() bool {
method IsOrderedMap (line 38) | func (kv *KV) IsOrderedMap() bool {
method Set (line 43) | func (kv *KV) Set(key string, value any) {
method Get (line 55) | func (kv *KV) Get(key string) interface{} {
method Iterate (line 67) | func (kv *KV) Iterate(f func(key string, value any) bool) {
method Delete (line 82) | func (kv *KV) Delete(key string) bool {
function KVMap (line 100) | func KVMap(data map[string]interface{}) KV {
function KVOrderedMap (line 105) | func KVOrderedMap(data *mapsutil.OrderedMap[string, any]) KV {
function ToMap (line 110) | func ToMap(m *mapsutil.OrderedMap[string, any]) map[string]interface{} {
function ToOrderedMap (line 120) | func ToOrderedMap(data map[string]interface{}) *mapsutil.OrderedMap[stri...
FILE: pkg/fuzz/dataformat/multipart.go
type MultiPartForm (line 14) | type MultiPartForm struct
method SetFileMetadata (line 36) | func (m *MultiPartForm) SetFileMetadata(fieldName string, metadata Fil...
method GetFileMetadata (line 45) | func (m *MultiPartForm) GetFileMetadata(fieldName string) (FileMetadat...
method IsType (line 56) | func (m *MultiPartForm) IsType(data string) bool {
method Encode (line 62) | func (m *MultiPartForm) Encode(data KV) (string, error) {
method ParseBoundary (line 141) | func (m *MultiPartForm) ParseBoundary(contentType string) error {
method Decode (line 161) | func (m *MultiPartForm) Decode(data string) (KV, error) {
method Name (line 229) | func (m *MultiPartForm) Name() string {
type FileMetadata (line 19) | type FileMetadata struct
function NewMultiPartForm (line 29) | func NewMultiPartForm() *MultiPartForm {
FILE: pkg/fuzz/dataformat/multipart_test.go
function TestMultiPartFormEncode (line 11) | func TestMultiPartFormEncode(t *testing.T) {
function TestMultiPartFormRoundTrip (line 142) | func TestMultiPartFormRoundTrip(t *testing.T) {
function TestMultiPartFormFileUpload (line 168) | func TestMultiPartFormFileUpload(t *testing.T) {
function TestMultiPartForm_SetGetFileMetadata (line 244) | func TestMultiPartForm_SetGetFileMetadata(t *testing.T) {
function TestMultiPartForm_FilesMetadataInitialization (line 263) | func TestMultiPartForm_FilesMetadataInitialization(t *testing.T) {
function TestMultiPartForm_BoundaryValidation (line 278) | func TestMultiPartForm_BoundaryValidation(t *testing.T) {
function TestMultiPartForm_DecodeRequiresBoundary (line 302) | func TestMultiPartForm_DecodeRequiresBoundary(t *testing.T) {
function TestMultiPartForm_MultipleFilesMetadata (line 311) | func TestMultiPartForm_MultipleFilesMetadata(t *testing.T) {
function TestMultiPartForm_SetFileMetadataWithNilMap (line 348) | func TestMultiPartForm_SetFileMetadataWithNilMap(t *testing.T) {
function TestMultiPartForm_GetFileMetadataWithNilMap (line 364) | func TestMultiPartForm_GetFileMetadataWithNilMap(t *testing.T) {
FILE: pkg/fuzz/dataformat/raw.go
type Raw (line 3) | type Raw struct
method IsType (line 15) | func (r *Raw) IsType(data string) bool {
method Encode (line 20) | func (r *Raw) Encode(data KV) (string, error) {
method Decode (line 25) | func (r *Raw) Decode(data string) (KV, error) {
method Name (line 32) | func (r *Raw) Name() string {
function NewRaw (line 10) | func NewRaw() *Raw {
FILE: pkg/fuzz/dataformat/xml.go
type XML (line 12) | type XML struct
method IsType (line 20) | func (x *XML) IsType(data string) bool {
method Encode (line 25) | func (x *XML) Encode(data KV) (string, error) {
method Decode (line 44) | func (x *XML) Decode(data string) (KV, error) {
method Name (line 60) | func (x *XML) Name() string {
function NewXML (line 15) | func NewXML() *XML {
FILE: pkg/fuzz/execute.go
function IsErrRuleNotApplicable (line 32) | func IsErrRuleNotApplicable(err error) bool {
type ExecuteRuleInput (line 43) | type ExecuteRuleInput struct
type GeneratedRequest (line 64) | type GeneratedRequest struct
method Execute (line 91) | func (rule *Rule) Execute(input *ExecuteRuleInput) (err error) {
method evaluateVars (line 195) | func (rule *Rule) evaluateVars(input string) (string, error) {
method evaluateVarsWithInteractsh (line 222) | func (rule *Rule) evaluateVarsWithInteractsh(data map[string]interface{}...
method isInputURLValid (line 264) | func (rule *Rule) isInputURLValid(input *contextargs.Context) bool {
method executeRuleValues (line 273) | func (rule *Rule) executeRuleValues(input *ExecuteRuleInput, ruleCompone...
method Compile (line 332) | func (rule *Rule) Compile(generator *generators.PayloadGenerator, option...
FILE: pkg/fuzz/execute_race_test.go
function TestEvaluateVarsWithInteractsh_RaceCondition (line 11) | func TestEvaluateVarsWithInteractsh_RaceCondition(t *testing.T) {
FILE: pkg/fuzz/frequency/tracker.go
type Tracker (line 22) | type Tracker struct
method Close (line 55) | func (t *Tracker) Close() {
method MarkParameter (line 63) | func (t *Tracker) MarkParameter(parameter, target, template string) {
method IsParameterFrequent (line 86) | func (t *Tracker) IsParameterFrequent(parameter, target, template stri...
method UnmarkParameter (line 112) | func (t *Tracker) UnmarkParameter(parameter, target, template string) {
constant DefaultMaxTrackCount (line 30) | DefaultMaxTrackCount = 10000
constant DefaultParamOccurrenceThreshold (line 31) | DefaultParamOccurrenceThreshold = 10
type cacheItem (line 34) | type cacheItem struct
function New (line 41) | func New(maxTrackCount, paramOccurrenceThreshold int) *Tracker {
function getFrequencyKey (line 123) | func getFrequencyKey(parameter, target, template string) string {
function normalizeTarget (line 134) | func normalizeTarget(value string) string {
FILE: pkg/fuzz/fuzz.go
type Rule (line 12) | type Rule struct
method matchKeyOrValue (line 159) | func (rule *Rule) matchKeyOrValue(key, value string) bool {
type ruleType (line 106) | type ruleType
constant replaceRuleType (line 109) | replaceRuleType ruleType = iota + 1
constant prefixRuleType (line 110) | prefixRuleType
constant postfixRuleType (line 111) | postfixRuleType
constant infixRuleType (line 112) | infixRuleType
constant replaceRegexRuleType (line 113) | replaceRegexRuleType
type partType (line 125) | type partType
constant queryPartType (line 128) | queryPartType partType = iota + 1
constant headersPartType (line 129) | headersPartType
constant pathPartType (line 130) | pathPartType
constant bodyPartType (line 131) | bodyPartType
constant cookiePartType (line 132) | cookiePartType
constant requestPartType (line 133) | requestPartType
type modeType (line 146) | type modeType
constant singleModeType (line 149) | singleModeType modeType = iota + 1
constant multipleModeType (line 150) | multipleModeType
FILE: pkg/fuzz/fuzz_test.go
function TestRuleMatchKeyOrValue (line 14) | func TestRuleMatchKeyOrValue(t *testing.T) {
function TestEvaluateVariables (line 46) | func TestEvaluateVariables(t *testing.T) {
FILE: pkg/fuzz/parts.go
method executePartRule (line 17) | func (rule *Rule) executePartRule(input *ExecuteRuleInput, payload Value...
method checkRuleApplicableOnComponent (line 22) | func (rule *Rule) checkRuleApplicableOnComponent(component component.Com...
method executePartComponent (line 38) | func (rule *Rule) executePartComponent(input *ExecuteRuleInput, payload ...
method executePartComponentOnValues (line 52) | func (rule *Rule) executePartComponentOnValues(input *ExecuteRuleInput, ...
method executePartComponentOnKV (line 110) | func (rule *Rule) executePartComponentOnKV(input *ExecuteRuleInput, payl...
method execWithInput (line 154) | func (rule *Rule) execWithInput(input *ExecuteRuleInput, httpReq *retrya...
method executeEvaluate (line 192) | func (rule *Rule) executeEvaluate(input *ExecuteRuleInput, _, value, pay...
method executeRuleTypes (line 206) | func (rule *Rule) executeRuleTypes(_ *ExecuteRuleInput, value, replaceme...
FILE: pkg/fuzz/parts_frequency_test.go
function TestExecWithInputDoesNotUseNumericParameterIndexForFrequency (line 15) | func TestExecWithInputDoesNotUseNumericParameterIndexForFrequency(t *tes...
function TestExecWithInputSkipsWhenActualParameterIsFrequent (line 48) | func TestExecWithInputSkipsWhenActualParameterIsFrequent(t *testing.T) {
FILE: pkg/fuzz/stats/db.go
type StatsDatabase (line 9) | type StatsDatabase interface
FILE: pkg/fuzz/stats/db_test.go
function Test_NewStatsDatabase (line 9) | func Test_NewStatsDatabase(t *testing.T) {
FILE: pkg/fuzz/stats/simple.go
type simpleStats (line 12) | type simpleStats struct
method Close (line 46) | func (s *simpleStats) Close() {}
method InsertComponent (line 48) | func (s *simpleStats) InsertComponent(event ComponentEvent) error {
method InsertMatchedRecord (line 69) | func (s *simpleStats) InsertMatchedRecord(event FuzzingEvent) error {
method InsertError (line 86) | func (s *simpleStats) InsertError(event ErrorEvent) error {
method GetStatistics (line 108) | func (s *simpleStats) GetStatistics() SimpleStatsResponse {
method incrementStatusCode (line 146) | func (s *simpleStats) incrementStatusCode(statusCode int) {
method incrementSeverityCount (line 153) | func (s *simpleStats) incrementSeverityCount(severity string) {
function NewSimpleStats (line 29) | func NewSimpleStats() (*simpleStats, error) {
type SimpleStatsResponse (line 96) | type SimpleStatsResponse struct
function formatStatusCode (line 160) | func formatStatusCode(code int) string {
FILE: pkg/fuzz/stats/stats.go
type Tracker (line 14) | type Tracker struct
method GetStats (line 31) | func (t *Tracker) GetStats() SimpleStatsResponse {
method Close (line 36) | func (t *Tracker) Close() {
method RecordResultEvent (line 56) | func (t *Tracker) RecordResultEvent(event FuzzingEvent) {
method RecordComponentEvent (line 71) | func (t *Tracker) RecordComponentEvent(event ComponentEvent) {
method RecordErrorEvent (line 84) | func (t *Tracker) RecordErrorEvent(event ErrorEvent) {
function NewTracker (line 19) | func NewTracker() (*Tracker, error) {
type FuzzingEvent (line 41) | type FuzzingEvent struct
type ComponentEvent (line 63) | type ComponentEvent struct
type ErrorEvent (line 78) | type ErrorEvent struct
function getCorrectSiteName (line 90) | func getCorrectSiteName(originalURL string) string {
FILE: pkg/fuzz/type.go
type ValueOrKeyValue (line 18) | type ValueOrKeyValue struct
method IsKV (line 25) | func (v *ValueOrKeyValue) IsKV() bool {
type SliceOrMapSlice (line 29) | type SliceOrMapSlice struct
method JSONSchemaExtend (line 34) | func (v SliceOrMapSlice) JSONSchemaExtend(schema *jsonschema.Schema) *...
method JSONSchema (line 53) | func (v SliceOrMapSlice) JSONSchema() *jsonschema.Schema {
method UnmarshalJSON (line 73) | func (v *SliceOrMapSlice) UnmarshalJSON(data []byte) error {
method MarshalJSON (line 86) | func (v SliceOrMapSlice) MarshalJSON() ([]byte, error) {
method UnmarshalYAML (line 94) | func (v *SliceOrMapSlice) UnmarshalYAML(callback func(interface{}) err...
method MarshalYAML (line 115) | func (v SliceOrMapSlice) MarshalYAML() (any, error) {
FILE: pkg/input/formats/burp/burp.go
type BurpFormat (line 16) | type BurpFormat struct
method Name (line 28) | func (j *BurpFormat) Name() string {
method SetOptions (line 32) | func (j *BurpFormat) SetOptions(options formats.InputFormatOptions) {
method Parse (line 38) | func (j *BurpFormat) Parse(input io.Reader, resultsCb formats.ParseReq...
function New (line 21) | func New() *BurpFormat {
FILE: pkg/input/formats/burp/burp_test.go
function TestBurpParse (line 11) | func TestBurpParse(t *testing.T) {
FILE: pkg/input/formats/formats.go
type ParseReqRespCallback (line 16) | type ParseReqRespCallback
type InputFormatOptions (line 21) | type InputFormatOptions struct
type Format (line 41) | type Format interface
type SpecDownloader (line 52) | type SpecDownloader interface
type OpenAPIParamsCfgFile (line 72) | type OpenAPIParamsCfgFile struct
function ReadOpenAPIVarDumpFile (line 78) | func ReadOpenAPIVarDumpFile() (*OpenAPIParamsCfgFile, error) {
function WriteOpenAPIVarDumpFile (line 103) | func WriteOpenAPIVarDumpFile(vars *OpenAPIParamsCfgFile) error {
FILE: pkg/input/formats/json/json.go
type JSONFormat (line 15) | type JSONFormat struct
method Name (line 38) | func (j *JSONFormat) Name() string {
method SetOptions (line 42) | func (j *JSONFormat) SetOptions(options formats.InputFormatOptions) {
method Parse (line 48) | func (j *JSONFormat) Parse(input io.Reader, resultsCb formats.ParseReq...
function New (line 20) | func New() *JSONFormat {
type proxifyRequest (line 27) | type proxifyRequest struct
FILE: pkg/input/formats/json/json_test.go
function TestJSONFormatterParse (line 40) | func TestJSONFormatterParse(t *testing.T) {
FILE: pkg/input/formats/openapi/downloader.go
type OpenAPIDownloader (line 20) | type OpenAPIDownloader struct
method Download (line 28) | func (d *OpenAPIDownloader) Download(urlStr, tmpDir string, httpClient...
method SupportedExtensions (line 134) | func (d *OpenAPIDownloader) SupportedExtensions() []string {
function NewDownloader (line 23) | func NewDownloader() formats.SpecDownloader {
FILE: pkg/input/formats/openapi/downloader_test.go
function TestOpenAPIDownloader_SupportedExtensions (line 13) | func TestOpenAPIDownloader_SupportedExtensions(t *testing.T) {
function TestOpenAPIDownloader_Download_Success (line 29) | func TestOpenAPIDownloader_Download_Success(t *testing.T) {
function TestOpenAPIDownloader_Download_NonJSONURL (line 105) | func TestOpenAPIDownloader_Download_NonJSONURL(t *testing.T) {
function TestOpenAPIDownloader_Download_HTTPError (line 128) | func TestOpenAPIDownloader_Download_HTTPError(t *testing.T) {
function TestOpenAPIDownloader_Download_InvalidJSON (line 153) | func TestOpenAPIDownloader_Download_InvalidJSON(t *testing.T) {
function TestOpenAPIDownloader_Download_Timeout (line 181) | func TestOpenAPIDownloader_Download_Timeout(t *testing.T) {
function TestOpenAPIDownloader_Download_WithExistingServers (line 209) | func TestOpenAPIDownloader_Download_WithExistingServers(t *testing.T) {
function fileExists (line 275) | func fileExists(filename string) bool {
FILE: pkg/input/formats/openapi/examples.go
function getSchemaExample (line 14) | func getSchemaExample(schema *openapi3.Schema) (interface{}, bool) {
function stringFormatExample (line 31) | func stringFormatExample(format string) string {
function excludeFromMode (line 76) | func excludeFromMode(schema *openapi3.Schema) bool {
function isRequired (line 88) | func isRequired(schema *openapi3.Schema, key string) bool {
type cachedSchema (line 92) | type cachedSchema struct
function openAPIExample (line 105) | func openAPIExample(schema *openapi3.Schema, cache map[*openapi3.Schema]...
function generateExampleFromSchema (line 282) | func generateExampleFromSchema(schema *openapi3.Schema) (interface{}, er...
function generateEmptySchemaValue (line 286) | func generateEmptySchemaValue(contentType string) *openapi3.Schema {
FILE: pkg/input/formats/openapi/generator.go
constant globalAuth (line 30) | globalAuth = "globalAuth"
constant DEFAULT_HTTP_SCHEME_HEADER (line 31) | DEFAULT_HTTP_SCHEME_HEADER = "Authorization"
function GenerateRequestsFromSchema (line 35) | func GenerateRequestsFromSchema(schema *openapi3.T, opts formats.InputFo...
type generateReqOptions (line 135) | type generateReqOptions struct
function generateRequestsFromOp (line 166) | func generateRequestsFromOp(opts *generateReqOptions) error {
function GetGlobalParamsForSecurityRequirement (line 395) | func GetGlobalParamsForSecurityRequirement(schema *openapi3.T, requireme...
function GenerateParameterFromSecurityScheme (line 429) | func GenerateParameterFromSecurityScheme(scheme *openapi3.SecurityScheme...
FILE: pkg/input/formats/openapi/openapi.go
type OpenAPIFormat (line 12) | type OpenAPIFormat struct
method Name (line 24) | func (j *OpenAPIFormat) Name() string {
method SetOptions (line 28) | func (j *OpenAPIFormat) SetOptions(options formats.InputFormatOptions) {
method Parse (line 34) | func (j *OpenAPIFormat) Parse(input io.Reader, resultsCb formats.Parse...
function New (line 17) | func New() *OpenAPIFormat {
FILE: pkg/input/formats/openapi/openapi_test.go
constant baseURL (line 12) | baseURL = "http://hackthebox:5000"
function TestOpenAPIParser (line 38) | func TestOpenAPIParser(t *testing.T) {
FILE: pkg/input/formats/swagger/downloader.go
type SwaggerDownloader (line 21) | type SwaggerDownloader struct
method Download (line 29) | func (d *SwaggerDownloader) Download(urlStr, tmpDir string, httpClient...
method SupportedExtensions (line 163) | func (d *SwaggerDownloader) SupportedExtensions() []string {
function NewDownloader (line 24) | func NewDownloader() formats.SpecDownloader {
FILE: pkg/input/formats/swagger/downloader_test.go
function TestSwaggerDownloader_SupportedExtensions (line 15) | func TestSwaggerDownloader_SupportedExtensions(t *testing.T) {
function TestSwaggerDownloader_Download_JSON_Success (line 31) | func TestSwaggerDownloader_Download_JSON_Success(t *testing.T) {
function TestSwaggerDownloader_Download_YAML_Success (line 99) | func TestSwaggerDownloader_Download_YAML_Success(t *testing.T) {
function TestSwaggerDownloader_Download_UnsupportedExtension (line 164) | func TestSwaggerDownloader_Download_UnsupportedExtension(t *testing.T) {
function TestSwaggerDownloader_Download_HTTPError (line 187) | func TestSwaggerDownloader_Download_HTTPError(t *testing.T) {
function TestSwaggerDownloader_Download_InvalidJSON (line 212) | func TestSwaggerDownloader_Download_InvalidJSON(t *testing.T) {
function TestSwaggerDownloader_Download_InvalidYAML (line 240) | func TestSwaggerDownloader_Download_InvalidYAML(t *testing.T) {
function TestSwaggerDownloader_Download_Timeout (line 268) | func TestSwaggerDownloader_Download_Timeout(t *testing.T) {
function TestSwaggerDownloader_Download_WithExistingHost (line 296) | func TestSwaggerDownloader_Download_WithExistingHost(t *testing.T) {
function fileExists (line 356) | func fileExists(filename string) bool {
FILE: pkg/input/formats/swagger/swagger.go
type SwaggerFormat (line 19) | type SwaggerFormat struct
method Name (line 31) | func (j *SwaggerFormat) Name() string {
method SetOptions (line 35) | func (j *SwaggerFormat) SetOptions(options formats.InputFormatOptions) {
method Parse (line 41) | func (j *SwaggerFormat) Parse(input io.Reader, resultsCb formats.Parse...
function New (line 24) | func New() *SwaggerFormat {
FILE: pkg/input/formats/swagger/swagger_test.go
function TestSwaggerAPIParser (line 11) | func TestSwaggerAPIParser(t *testing.T) {
FILE: pkg/input/formats/yaml/multidoc.go
type YamlMultiDocFormat (line 16) | type YamlMultiDocFormat struct
method Name (line 38) | func (j *YamlMultiDocFormat) Name() string {
method SetOptions (line 42) | func (j *YamlMultiDocFormat) SetOptions(options formats.InputFormatOpt...
method Parse (line 48) | func (j *YamlMultiDocFormat) Parse(input io.Reader, resultsCb formats....
function New (line 21) | func New() *YamlMultiDocFormat {
type proxifyRequest (line 28) | type proxifyRequest struct
FILE: pkg/input/formats/yaml/multidoc_test.go
function TestYamlFormatterParse (line 13) | func TestYamlFormatterParse(t *testing.T) {
function TestYamlFormatterParseWithVariables (line 39) | func TestYamlFormatterParseWithVariables(t *testing.T) {
FILE: pkg/input/formats/yaml/ytt.go
function ytt (line 13) | func ytt(tpl, dvs []string, varFiles []string) ([]byte, error) {
function templatesAsInput (line 43) | func templatesAsInput(tpl ...string) (yttcmd.Input, error) {
function mapToKeyValueSlice (line 59) | func mapToKeyValueSlice(m map[string]interface{}) []string {
type noopWriter (line 68) | type noopWriter struct
method Write (line 70) | func (w noopWriter) Write(data []byte) (int, error) { return len(data)...
FILE: pkg/input/provider/chunked.go
type ChunkedInputProvider (line 14) | type ChunkedInputProvider interface
FILE: pkg/input/provider/http/multiformat.go
type HttpMultiFormatOptions (line 22) | type HttpMultiFormatOptions struct
type HttpInputProvider (line 36) | type HttpInputProvider struct
method Count (line 99) | func (i *HttpInputProvider) Count() int64 {
method Iterate (line 104) | func (i *HttpInputProvider) Iterate(callback func(value *contextargs.M...
method Set (line 118) | func (i *HttpInputProvider) Set(_ string, value string) {}
method SetWithProbe (line 122) | func (i *HttpInputProvider) SetWithProbe(_ string, value string, probe...
method SetWithExclusions (line 128) | func (i *HttpInputProvider) SetWithExclusions(_ string, value string) ...
method InputType (line 133) | func (i *HttpInputProvider) InputType() string {
method Close (line 139) | func (i *HttpInputProvider) Close() {}
function NewHttpInputProvider (line 48) | func NewHttpInputProvider(opts *HttpMultiFormatOptions) (*HttpInputProvi...
function SupportedFormats (line 152) | func SupportedFormats() string {
FILE: pkg/input/provider/interface.go
constant MultiFormatInputProvider (line 30) | MultiFormatInputProvider = "MultiFormatInputProvider"
constant ListInputProvider (line 31) | ListInputProvider = "ListInputProvider"
constant SimpleListInputProvider (line 32) | SimpleListInputProvider = "SimpleInputProvider"
function IsErrNotImplemented (line 36) | func IsErrNotImplemented(err error) bool {
type InputProvider (line 60) | type InputProvider interface
type InputOptions (line 78) | type InputOptions struct
function NewInputProvider (line 90) | func NewInputProvider(opts InputOptions) (InputProvider, error) {
function SupportedInputFormats (line 171) | func SupportedInputFormats() string {
FILE: pkg/input/provider/list/hmap.go
constant DefaultMaxDedupeItemsCount (line 37) | DefaultMaxDedupeItemsCount = 10000
type ListInputProvider (line 41) | type ListInputProvider struct
method Count (line 112) | func (i *ListInputProvider) Count() int64 {
method Iterate (line 117) | func (i *ListInputProvider) Iterate(callback func(value *contextargs.M...
method Set (line 143) | func (i *ListInputProvider) Set(executionId string, value string) {
method SetWithProbe (line 242) | func (i *ListInputProvider) SetWithProbe(executionId string, value str...
method SetWithExclusions (line 252) | func (i *ListInputProvider) SetWithExclusions(executionId string, valu...
method InputType (line 266) | func (i *ListInputProvider) InputType() string {
method Close (line 271) | func (i *ListInputProvider) Close() {
method initializeInputSources (line 279) | func (i *ListInputProvider) initializeInputSources(opts *Options) error {
method scanInputFromReader (line 359) | func (i *ListInputProvider) scanInputFromReader(executionId string, re...
method isExcluded (line 377) | func (i *ListInputProvider) isExcluded(URL string) bool {
method Del (line 390) | func (i *ListInputProvider) Del(executionId string, value string) {
method setItem (line 489) | func (i *ListInputProvider) setItem(metaInput *contextargs.MetaInput) {
method delItem (line 510) | func (i *ListInputProvider) delItem(targets ...*contextargs.MetaInput) {
method setHostMapStream (line 561) | func (i *ListInputProvider) setHostMapStream(data string) {
method addTargets (line 568) | func (i *ListInputProvider) addTargets(executionId string, targets []s...
method removeTargets (line 574) | func (i *ListInputProvider) removeTargets(targets []string) {
type Options (line 55) | type Options struct
function New (line 65) | func New(opts *Options) (*ListInputProvider, error) {
constant removeTargetsChunkSize (line 507) | removeTargetsChunkSize = 5000
function matchesCIDR (line 632) | func matchesCIDR(host string, cidrs []*net.IPNet) bool {
FILE: pkg/input/provider/list/hmap_test.go
function Test_expandCIDR (line 20) | func Test_expandCIDR(t *testing.T) {
type mockDnsHandler (line 55) | type mockDnsHandler struct
method ServeDNS (line 57) | func (m *mockDnsHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
function Test_scanallips_normalizeStoreInputValue (line 79) | func Test_scanallips_normalizeStoreInputValue(t *testing.T) {
function Test_expandASNInputValue (line 156) | func Test_expandASNInputValue(t *testing.T) {
FILE: pkg/input/provider/list/utils.go
type ipOptions (line 3) | type ipOptions struct
FILE: pkg/input/provider/simple.go
type SimpleInputProvider (line 10) | type SimpleInputProvider struct
method Count (line 31) | func (s *SimpleInputProvider) Count() int64 {
method Iterate (line 36) | func (s *SimpleInputProvider) Iterate(callback func(value *contextargs...
method Set (line 45) | func (s *SimpleInputProvider) Set(_ string, value string) {
method SetWithProbe (line 52) | func (s *SimpleInputProvider) SetWithProbe(_ string, value string, pro...
method SetWithExclusions (line 64) | func (s *SimpleInputProvider) SetWithExclusions(_ string, value string...
method InputType (line 72) | func (s *SimpleInputProvider) InputType() string {
method Close (line 77) | func (s *SimpleInputProvider) Close() {
function NewSimpleInputProvider (line 15) | func NewSimpleInputProvider() *SimpleInputProvider {
function NewSimpleInputProviderWithUrls (line 22) | func NewSimpleInputProviderWithUrls(executionId string, urls ...string) ...
FILE: pkg/input/transform.go
type Helper (line 17) | type Helper struct
method Close (line 28) | func (h *Helper) Close() error {
method Transform (line 38) | func (h *Helper) Transform(input string, protocol templateTypes.Protoc...
method convertInputToType (line 69) | func (h *Helper) convertInputToType(input string, inputType inputType,...
function NewHelper (line 22) | func NewHelper() *Helper {
type inputType (line 56) | type inputType
constant typeHostOnly (line 59) | typeHostOnly inputType = iota + 1
constant typeHostWithPort (line 60) | typeHostWithPort
constant typeHostWithOptionalPort (line 61) | typeHostWithOptionalPort
constant typeURL (line 62) | typeURL
constant typeFilepath (line 63) | typeFilepath
constant typeWebsocket (line 64) | typeWebsocket
FILE: pkg/input/transform_test.go
function TestConvertInputToType (line 10) | func TestConvertInputToType(t *testing.T) {
FILE: pkg/input/types/http.go
type RequestResponse (line 28) | type RequestResponse struct
method Clone (line 46) | func (rr *RequestResponse) Clone() *RequestResponse {
method BuildRequest (line 60) | func (rr *RequestResponse) BuildRequest() (*retryablehttp.Request, err...
method ID (line 89) | func (rr *RequestResponse) ID() string {
method MarshalJSON (line 103) | func (rr *RequestResponse) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 120) | func (rr *RequestResponse) UnmarshalJSON(data []byte) error {
type HttpRequest (line 160) | type HttpRequest struct
method ID (line 172) | func (hr *HttpRequest) ID() string {
method Clone (line 178) | func (hr *HttpRequest) Clone() *HttpRequest {
type HttpResponse (line 187) | type HttpResponse struct
method ID (line 199) | func (hr *HttpResponse) ID() string {
method Clone (line 205) | func (hr *HttpResponse) Clone() *HttpResponse {
function ParseRawRequest (line 217) | func ParseRawRequest(raw string) (rr *RequestResponse, err error) {
function ParseRawRequestWithURL (line 297) | func ParseRawRequestWithURL(raw, url string) (rr *RequestResponse, err e...
FILE: pkg/input/types/http_test.go
function TestParseHttpRequest (line 14) | func TestParseHttpRequest(t *testing.T) {
function TestUnmarshalJSON (line 69) | func TestUnmarshalJSON(t *testing.T) {
FILE: pkg/input/types/probe.go
type InputLivenessProbe (line 4) | type InputLivenessProbe interface
FILE: pkg/installer/template.go
constant checkSumFilePerm (line 28) | checkSumFilePerm = 0644
type templateUpdateResults (line 38) | type templateUpdateResults struct
method String (line 46) | func (t *templateUpdateResults) String() string {
type TemplateManager (line 70) | type TemplateManager struct
method FreshInstallIfNotExists (line 78) | func (t *TemplateManager) FreshInstallIfNotExists() error {
method UpdateIfOutdated (line 93) | func (t *TemplateManager) UpdateIfOutdated() error {
method installTemplatesAt (line 122) | func (t *TemplateManager) installTemplatesAt(dir string) error {
method updateTemplatesAt (line 147) | func (t *TemplateManager) updateTemplatesAt(dir string) error {
method summarizeChanges (line 226) | func (t *TemplateManager) summarizeChanges(old, new map[string]string)...
method getAbsoluteFilePath (line 248) | func (t *TemplateManager) getAbsoluteFilePath(templateDir, uri string,...
method writeTemplatesToDisk (line 302) | func (t *TemplateManager) writeTemplatesToDisk(ghrd *updateutils.GHRel...
method cleanupOrphanedTemplates (line 413) | func (t *TemplateManager) cleanupOrphanedTemplates(dir string, written...
method regenerateTemplateMetadata (line 516) | func (t *TemplateManager) regenerateTemplateMetadata(dir string) error {
method getChecksumFromDir (line 562) | func (t *TemplateManager) getChecksumFromDir(dir string) (map[string]s...
method writeChecksumFileInDir (line 584) | func (t *TemplateManager) writeChecksumFileInDir(dir string) error {
method calculateChecksumMap (line 600) | func (t *TemplateManager) calculateChecksumMap(dir string) (map[string...
FILE: pkg/installer/template_test.go
function TestTemplateInstallation (line 15) | func TestTemplateInstallation(t *testing.T) {
function TestIsOutdatedVersion (line 65) | func TestIsOutdatedVersion(t *testing.T) {
function TestCleanupOrphanedTemplates (line 104) | func TestCleanupOrphanedTemplates(t *testing.T) {
function TestRegenerateTemplateMetadata (line 380) | func TestRegenerateTemplateMetadata(t *testing.T) {
FILE: pkg/installer/util.go
function GetNewTemplatesInVersions (line 22) | func GetNewTemplatesInVersions(versions ...string) []string {
function getNewAdditionsFileFromGitHub (line 49) | func getNewAdditionsFileFromGitHub(version string) ([]string, error) {
function PurgeEmptyDirectories (line 75) | func PurgeEmptyDirectories(dir string) {
function isEmptyDir (line 95) | func isEmptyDir(dir string) bool {
FILE: pkg/installer/versioncheck.go
constant pdtmNucleiVersionEndpoint (line 17) | pdtmNucleiVersionEndpoint = "https://api.pdtm.sh/api/v1/tools/nuclei"
constant pdtmNucleiIgnoreFileEndpoint (line 18) | pdtmNucleiIgnoreFileEndpoint = "https://api.pdtm.sh/api/v1/tools/nuclei/...
type PdtmAPIResponse (line 26) | type PdtmAPIResponse struct
function NucleiVersionCheck (line 37) | func NucleiVersionCheck() error {
type sdkUpdateCheck (line 42) | type sdkUpdateCheck struct
function NucleiSDKVersionCheck (line 50) | func NucleiSDKVersionCheck() {
function getpdtmParams (line 57) | func getpdtmParams(isSDK bool) string {
function UpdateIgnoreFile (line 70) | func UpdateIgnoreFile() error {
function doVersionCheck (line 85) | func doVersionCheck(isSDK bool) error {
FILE: pkg/installer/versioncheck_test.go
function TestVersionCheck (line 11) | func TestVersionCheck(t *testing.T) {
FILE: pkg/installer/zipslip_unix_test.go
type tempFileInfo (line 16) | type tempFileInfo struct
method Name (line 20) | func (t *tempFileInfo) Name() string {
method ModTime (line 24) | func (t *tempFileInfo) ModTime() time.Time {
method Mode (line 28) | func (t *tempFileInfo) Mode() fs.FileMode {
method IsDir (line 32) | func (t tempFileInfo) IsDir() bool {
method Size (line 36) | func (t *tempFileInfo) Size() int64 {
method Sys (line 40) | func (t *tempFileInfo) Sys() any {
function TestZipSlip (line 44) | func TestZipSlip(t *testing.T) {
FILE: pkg/js/compiler/compiler.go
type Compiler (line 26) | type Compiler struct
method ExecuteWithOptions (line 104) | func (c *Compiler) ExecuteWithOptions(program *goja.Program, args *Exe...
function New (line 29) | func New() *Compiler {
type ExecuteOptions (line 34) | type ExecuteOptions struct
type ExecuteArgs (line 57) | type ExecuteArgs struct
method Map (line 63) | func (e *ExecuteArgs) Map() map[string]interface{} {
function NewExecuteArgs (line 68) | func NewExecuteArgs() *ExecuteArgs {
type ExecuteResult (line 76) | type ExecuteResult
method Map (line 79) | func (e ExecuteResult) Map() map[string]interface{} {
method GetSuccess (line 92) | func (e ExecuteResult) GetSuccess() bool {
function NewExecuteResult (line 87) | func NewExecuteResult() ExecuteResult {
function CanRunAsIIFE (line 164) | func CanRunAsIIFE(script string) bool {
function SourceIIFEMode (line 170) | func SourceIIFEMode(script string, strict bool) (*goja.Program, error) {
function SourceAutoMode (line 181) | func SourceAutoMode(script string, strict bool) (*goja.Program, error) {
FILE: pkg/js/compiler/compiler_test.go
function TestNewCompilerConsoleDebug (line 14) | func TestNewCompilerConsoleDebug(t *testing.T) {
type noopWriter (line 40) | type noopWriter struct
method Write (line 44) | func (n *noopWriter) Write(data []byte, level levels.Level) {
FILE: pkg/js/compiler/init.go
function Init (line 18) | func Init(opts *types.Options) error {
FILE: pkg/js/compiler/non-pool.go
function executeWithoutPooling (line 17) | func executeWithoutPooling(p *goja.Program, args *ExecuteArgs, opts *Exe...
FILE: pkg/js/compiler/pool.go
constant exportToken (line 45) | exportToken = "Export"
constant exportAsToken (line 46) | exportAsToken = "ExportAs"
function executeWithRuntime (line 76) | func executeWithRuntime(runtime *goja.Runtime, p *goja.Program, args *Ex...
function ExecuteProgram (line 123) | func ExecuteProgram(p *goja.Program, args *ExecuteArgs, opts *ExecuteOpt...
function executeWithPoolingProgram (line 136) | func executeWithPoolingProgram(p *goja.Program, args *ExecuteArgs, opts ...
function InternalGetGeneratorRuntime (line 201) | func InternalGetGeneratorRuntime() *goja.Runtime {
function getRegistry (line 206) | func getRegistry() *require.Registry {
function createNewRuntime (line 211) | func createNewRuntime() *goja.Runtime {
function stringify (line 226) | func stringify(gojaValue goja.Value, runtime *goja.Runtime) string {
FILE: pkg/js/devtools/bindgen/cmd/bindgen/main.go
function main (line 21) | func main() {
function process (line 35) | func process() error {
FILE: pkg/js/devtools/bindgen/generator.go
type TemplateData (line 30) | type TemplateData struct
method InitNativeScripts (line 179) | func (d *TemplateData) InitNativeScripts() {
method gatherPackageData (line 196) | func (d *TemplateData) gatherPackageData(astNode ast.Node, data *Templ...
method extractReturns (line 330) | func (d *TemplateData) extractReturns(fn *ast.FuncDecl) []string {
method extractReturnType (line 344) | func (d *TemplateData) extractReturnType(ret *ast.Field) string {
method handleStarExpr (line 361) | func (d *TemplateData) handleStarExpr(v *ast.StarExpr) string {
method collectTypeFromExternal (line 374) | func (d *TemplateData) collectTypeFromExternal(pkg *types.Package, pkg...
method collectFuncDecl (line 419) | func (d *TemplateData) collectFuncDecl(decl *ast.FuncDecl) (extra Pack...
type PackageTypeExtra (line 52) | type PackageTypeExtra struct
type PackageFuncExtra (line 57) | type PackageFuncExtra struct
type PackageFunctionExtra (line 63) | type PackageFunctionExtra struct
function newTemplateData (line 71) | func newTemplateData(packagePrefix, pkgName string) *TemplateData {
function GetLibraryModules (line 88) | func GetLibraryModules(directory string) ([]string, error) {
function CreateTemplateData (line 104) | func CreateTemplateData(directory string, packagePrefix string) (*Templa...
function identifyGenDecl (line 251) | func identifyGenDecl(node ast.Node, decl *ast.GenDecl, data *TemplateDat...
function collectStructFuncsFromAST (line 289) | func collectStructFuncsFromAST(node ast.Node, spec *ast.TypeSpec, data *...
function processFunc (line 298) | func processFunc(fn *ast.FuncDecl, spec *ast.TypeSpec, data *TemplateDat...
function processFunctionDetails (line 310) | func processFunctionDetails(fn *ast.FuncDecl, ident *ast.Ident, data *Te...
function extractArgs (line 320) | func extractArgs(fn *ast.FuncDecl) []string {
function convertCommentsToJavascript (line 449) | func convertCommentsToJavascript(comments string) string {
function exprToString (line 455) | func exprToString(expr ast.Expr) string {
FILE: pkg/js/devtools/bindgen/output.go
method WriteGoTemplate (line 21) | func (d *TemplateData) WriteGoTemplate(outputDirectory string, pkgName s...
method WriteJSTemplate (line 54) | func (d *TemplateData) WriteJSTemplate(outputDirectory string, pkgName s...
method WriteMarkdownIndexTemplate (line 86) | func (d *TemplateData) WriteMarkdownIndexTemplate(outputDirectory string...
method WriteMarkdownLibraryDocumentation (line 117) | func (d *TemplateData) WriteMarkdownLibraryDocumentation(outputDirectory...
function templateFuncs (line 145) | func templateFuncs() map[string]interface{} {
FILE: pkg/js/devtools/scrapefuncs/main.go
type DSLHelperFunc (line 22) | type DSLHelperFunc struct
function main (line 38) | func main() {
FILE: pkg/js/devtools/tsgen/astutil.go
function isExported (line 10) | func isExported(name string) bool {
function exprToString (line 15) | func exprToString(expr ast.Expr) string {
function toTsTypes (line 36) | func toTsTypes(t string) string {
function TsDefaultValue (line 68) | func TsDefaultValue(t string) string {
function Ternary (line 91) | func Ternary(condition bool, trueVal, falseVal string) string {
function checkCanFail (line 99) | func checkCanFail(fn *ast.FuncDecl) bool {
FILE: pkg/js/devtools/tsgen/cmd/tsgen/main.go
function main (line 29) | func main() {
function sortEntities (line 107) | func sortEntities(entities []tsgen.Entity) []tsgen.Entity {
FILE: pkg/js/devtools/tsgen/parser.go
type EntityParser (line 19) | type EntityParser struct
method GetEntities (line 58) | func (p *EntityParser) GetEntities() []Entity {
method Parse (line 63) | func (p *EntityParser) Parse() error {
method extractClassProperties (line 256) | func (p *EntityParser) extractClassProperties(node *ast.StructType) []...
method extractFunctionFromNode (line 306) | func (p *EntityParser) extractFunctionFromNode(fn *ast.FuncDecl) (Enti...
method extractReturnType (line 341) | func (p *EntityParser) extractReturnType(fn *ast.FuncDecl) (out string) {
method extractParameters (line 398) | func (p *EntityParser) extractParameters(fn *ast.FuncDecl) []Parameter {
method handleExternalStruct (line 422) | func (p *EntityParser) handleExternalStruct(typeName string) string {
method extractStructTypes (line 453) | func (p *EntityParser) extractStructTypes() {
method extractVarsNConstants (line 477) | func (p *EntityParser) extractVarsNConstants() {
method loadImportedPackages (line 511) | func (p *EntityParser) loadImportedPackages() error {
function NewEntityParser (line 29) | func NewEntityParser(dir string) (*EntityParser, error) {
function convertMaptoRecord (line 389) | func convertMaptoRecord(input string) (out string) {
function loadPackage (line 544) | func loadPackage(pkgPath string) (*packages.Package, error) {
function updateFuncWithConstructorSig (line 557) | func updateFuncWithConstructorSig(sig string, f Function) Function {
FILE: pkg/js/devtools/tsgen/scrape.go
method scrapeAndCreate (line 14) | func (p *EntityParser) scrapeAndCreate(typeName string) error {
type ExtObject (line 75) | type ExtObject struct
function recursiveScrapeType (line 80) | func recursiveScrapeType(parentType types.Type, fieldName string, fieldT...
function ConvertExtObjectToEntities (line 142) | func ConvertExtObjectToEntities(extObj *ExtObject, nestedTypes map[strin...
FILE: pkg/js/devtools/tsgen/types.go
type Entity (line 4) | type Entity struct
type Class (line 17) | type Class struct
type Function (line 26) | type Function struct
type Interface (line 33) | type Interface struct
type Method (line 40) | type Method struct
type Property (line 50) | type Property struct
type Parameter (line 57) | type Parameter struct
FILE: pkg/js/generated/go/libbytes/bytes.go
function init (line 14) | func init() {
function Enable (line 28) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libfs/fs.go
function init (line 14) | func init() {
function Enable (line 31) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libgoconsole/goconsole.go
function init (line 14) | func init() {
function Enable (line 28) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libikev2/ikev2.go
function init (line 14) | func init() {
function Enable (line 37) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libkerberos/kerberos.go
function init (line 14) | func init() {
function Enable (line 36) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libldap/ldap.go
function init (line 14) | func init() {
function Enable (line 66) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libmssql/mssql.go
function init (line 14) | func init() {
function Enable (line 27) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libmysql/mysql.go
function init (line 14) | func init() {
function Enable (line 30) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libnet/net.go
function init (line 14) | func init() {
function Enable (line 29) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/liboracle/oracle.go
function init (line 14) | func init() {
function Enable (line 28) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libpop3/pop3.go
function init (line 14) | func init() {
function Enable (line 28) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libpostgres/postgres.go
function init (line 14) | func init() {
function Enable (line 27) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/librdp/rdp.go
function init (line 14) | func init() {
function Enable (line 32) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libredis/redis.go
function init (line 14) | func init() {
function Enable (line 32) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/librsync/rsync.go
function init (line 14) | func init() {
function Enable (line 29) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libsmb/smb.go
function init (line 14) | func init() {
function Enable (line 27) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libsmtp/smtp.go
function init (line 14) | func init() {
function Enable (line 30) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libssh/ssh.go
function init (line 14) | func init() {
function Enable (line 27) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libstructs/structs.go
function init (line 14) | func init() {
function Enable (line 30) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libtelnet/telnet.go
function init (line 15) | func init() {
function Enable (line 32) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/go/libvnc/vnc.go
function init (line 14) | func init() {
function Enable (line 29) | func Enable(runtime *goja.Runtime) {
FILE: pkg/js/generated/ts/bytes.ts
class Buffer (line 17) | class Buffer {
method constructor (line 21) | constructor() {}
method Write (line 31) | public Write(data: Uint8Array): Buffer {
method WriteString (line 45) | public WriteString(data: string): Buffer {
method Bytes (line 60) | public Bytes(): Uint8Array {
method String (line 75) | public String(): string {
method Len (line 90) | public Len(): number {
method Hex (line 105) | public Hex(): string {
method Hexdump (line 120) | public Hexdump(): string {
method Pack (line 135) | public Pack(formatStr: string, msg: any): void {
FILE: pkg/js/generated/ts/fs.ts
function ListDir (line 26) | function ListDir(path: string, itemType: string): string[] | null {
function ReadFile (line 42) | function ReadFile(path: string): Uint8Array | null {
function ReadFileAsString (line 58) | function ReadFileAsString(path: string): string | null {
function ReadFilesFromDir (line 75) | function ReadFilesFromDir(dir: string): string[] | null {
FILE: pkg/js/generated/ts/goconsole.ts
function NewGoConsolePrinter (line 6) | function NewGoConsolePrinter(): GoConsolePrinter {
class GoConsolePrinter (line 14) | class GoConsolePrinter {
method constructor (line 18) | constructor() {}
method Log (line 22) | public Log(msg: string): void {
method Warn (line 30) | public Warn(msg: string): void {
method Error (line 38) | public Error(msg: string): void {
FILE: pkg/js/generated/ts/ikev2.ts
constant IKE_EXCHANGE_AUTH (line 4) | const IKE_EXCHANGE_AUTH = 35;
constant IKE_EXCHANGE_CREATE_CHILD_SA (line 7) | const IKE_EXCHANGE_CREATE_CHILD_SA = 36;
constant IKE_EXCHANGE_INFORMATIONAL (line 10) | const IKE_EXCHANGE_INFORMATIONAL = 37;
constant IKE_EXCHANGE_SA_INIT (line 13) | const IKE_EXCHANGE_SA_INIT = 34;
constant IKE_NOTIFY_NO_PROPOSAL_CHOSEN (line 19) | const IKE_NOTIFY_NO_PROPOSAL_CHOSEN = 14;
constant IKE_NOTIFY_USE_TRANSPORT_MODE (line 22) | const IKE_NOTIFY_USE_TRANSPORT_MODE = 16391;
constant IKE_VERSION_2 (line 25) | const IKE_VERSION_2 = 0x20;
class IKEMessage (line 32) | class IKEMessage {
method constructor (line 52) | constructor() {}
method AppendPayload (line 65) | public AppendPayload(payload: any): void {
method Encode (line 82) | public Encode(): Uint8Array | null {
type IKENonce (line 101) | interface IKENonce {
type IKENotification (line 119) | interface IKENotification {
FILE: pkg/js/generated/ts/kerberos.ts
function ASRepToHashcat (line 6) | function ASRepToHashcat(asrep: any): string | null {
function CheckKrbError (line 15) | function CheckKrbError(b: Uint8Array): Uint8Array | null {
function NewKerberosClientFromString (line 34) | function NewKerberosClientFromString(cfg: string): Client | null {
function SendToKDC (line 51) | function SendToKDC(kclient: Client, msg: string): string | null {
function TGStoHashcat (line 60) | function TGStoHashcat(tgs: any, username: string): string | null {
class Client (line 78) | class Client {
method constructor (line 90) | constructor(public domain: string, public controller?: string ) {}
method SetConfig (line 107) | public SetConfig(cfg: Config): void {
method EnumerateUser (line 122) | public EnumerateUser(username: string): EnumerateUserResponse | null {
method GetServiceTicket (line 137) | public GetServiceTicket(User: string): TGS | null {
class Config (line 149) | class Config {
method constructor (line 153) | constructor() {}
method SetIPAddress (line 163) | public SetIPAddress(ip: string): Config | null {
method SetTimeout (line 177) | public SetTimeout(timeout: number): Config | null {
type AuthorizationDataEntry (line 189) | interface AuthorizationDataEntry {
type BitString (line 201) | interface BitString {
type BitString (line 213) | interface BitString {
type Config (line 225) | interface Config {
method constructor (line 153) | constructor() {}
method SetIPAddress (line 163) | public SetIPAddress(ip: string): Config | null {
method SetTimeout (line 177) | public SetTimeout(timeout: number): Config | null {
type EncTicketPart (line 237) | interface EncTicketPart {
type EncryptedData (line 267) | interface EncryptedData {
type EncryptionKey (line 281) | interface EncryptionKey {
type EnumerateUserResponse (line 293) | interface EnumerateUserResponse {
type HostAddress (line 307) | interface HostAddress {
type LibDefaults (line 319) | interface LibDefaults {
type PrincipalName (line 405) | interface PrincipalName {
type Realm (line 417) | interface Realm {
type TGS (line 437) | interface TGS {
type Ticket (line 451) | interface Ticket {
type TransitedEncoding (line 469) | interface TransitedEncoding {
FILE: pkg/js/generated/ts/ldap.ts
function DecodeADTimestamp (line 96) | function DecodeADTimestamp(timestamp: string): string {
function DecodeSID (line 111) | function DecodeSID(s: string): string {
function DecodeZuluTimestamp (line 126) | function DecodeZuluTimestamp(timestamp: string): string {
function JoinFilters (line 140) | function JoinFilters(filters: any): string {
function NegativeFilter (line 154) | function NegativeFilter(filter: string): string {
class Client (line 178) | class Client {
method constructor (line 198) | constructor(public ldapUrl: string, public realm: string, public confi...
method FindADObjects (line 212) | public FindADObjects(filter: string): SearchResult | null {
method GetADUsers (line 228) | public GetADUsers(): SearchResult | null {
method GetADActiveUsers (line 244) | public GetADActiveUsers(): SearchResult | null {
method GetADUserWithNeverExpiringPasswords (line 260) | public GetADUserWithNeverExpiringPasswords(): SearchResult | null {
method GetADUserTrustedForDelegation (line 276) | public GetADUserTrustedForDelegation(): SearchResult | null {
method GetADUserWithPasswordNotRequired (line 292) | public GetADUserWithPasswordNotRequired(): SearchResult | null {
method GetADGroups (line 308) | public GetADGroups(): SearchResult | null {
method GetADDCList (line 324) | public GetADDCList(): SearchResult | null {
method GetADAdmins (line 340) | public GetADAdmins(): SearchResult | null {
method GetADUserKerberoastable (line 356) | public GetADUserKerberoastable(): SearchResult | null {
method GetADUserAsRepRoastable (line 372) | public GetADUserAsRepRoastable(): SearchResult | null {
method GetADDomainSID (line 387) | public GetADDomainSID(): string {
method Authenticate (line 402) | public Authenticate(username: string): void {
method AuthenticateWithNTLMHash (line 416) | public AuthenticateWithNTLMHash(username: string): void {
method Search (line 431) | public Search(filter: string, attributes: any): SearchResult | null {
method AdvancedSearch (line 446) | public AdvancedSearch(Scope: number, TypesOnly: boolean, Filter: strin...
method CollectMetadata (line 461) | public CollectMetadata(): Metadata | null {
method Close (line 475) | public Close(): void {
type Config (line 495) | interface Config {
type LdapAttributes (line 514) | interface LdapAttributes {
type LdapEntry (line 678) | interface LdapEntry {
type Metadata (line 699) | interface Metadata {
type SearchResult (line 727) | interface SearchResult {
FILE: pkg/js/generated/ts/mssql.ts
class MSSQLClient (line 12) | class MSSQLClient {
method constructor (line 16) | constructor() {}
method Connect (line 29) | public Connect(host: string, port: number, username: string): boolean ...
method ConnectWithDB (line 46) | public ConnectWithDB(host: string, port: number, username: string): bo...
method IsMssql (line 61) | public IsMssql(host: string, port: number): boolean | null {
method ExecuteQuery (line 77) | public ExecuteQuery(host: string, port: number, username: string): SQL...
type SQLResult (line 89) | interface SQLResult {
FILE: pkg/js/generated/ts/mysql.ts
function BuildDSN (line 14) | function BuildDSN(opts: MySQLOptions): string | null {
class MySQLClient (line 29) | class MySQLClient {
method constructor (line 33) | constructor() {}
method IsMySQL (line 44) | public IsMySQL(host: string, port: number): boolean | null {
method Connect (line 61) | public Connect(host: string, port: number, username: string): boolean ...
method FingerprintMySQL (line 75) | public FingerprintMySQL(host: string, port: number): MySQLInfo | null {
method ConnectWithDSN (line 91) | public ConnectWithDSN(dsn: string): boolean | null {
method ExecuteQueryWithOpts (line 109) | public ExecuteQueryWithOpts(opts: MySQLOptions, query: string): SQLRes...
method ExecuteQuery (line 124) | public ExecuteQuery(host: string, port: number, username: string): SQL...
method ExecuteQueryOnDB (line 139) | public ExecuteQueryOnDB(host: string, port: number, username: string):...
type MySQLInfo (line 152) | interface MySQLInfo {
type MySQLOptions (line 186) | interface MySQLOptions {
type SQLResult (line 210) | interface SQLResult {
type ServiceMySQL (line 222) | interface ServiceMySQL {
FILE: pkg/js/generated/ts/net.ts
function Open (line 12) | function Open(protocol: string): NetConn | null {
function OpenTLS (line 27) | function OpenTLS(protocol: string): NetConn | null {
class NetConn (line 42) | class NetConn {
method constructor (line 46) | constructor() {}
method Close (line 56) | public Close(): void {
method SetTimeout (line 70) | public SetTimeout(value: number): void {
method SendArray (line 84) | public SendArray(data: any): void {
method SendHex (line 98) | public SendHex(data: string): void {
method Send (line 112) | public Send(data: string): void {
method RecvFull (line 128) | public RecvFull(N: number): Uint8Array | null {
method Recv (line 146) | public Recv(N: number): Uint8Array | null {
method RecvFullString (line 162) | public RecvFullString(N: number): string | null {
method RecvString (line 179) | public RecvString(N: number): string | null {
method RecvFullHex (line 196) | public RecvFullHex(N: number): string | null {
method RecvHex (line 213) | public RecvHex(N: number): string | null {
FILE: pkg/js/generated/ts/oracle.ts
type IsOracleResponse (line 13) | interface IsOracleResponse {
class OracleClient (line 27) | class OracleClient {
method constructor (line 29) | constructor() {}
method Connect (line 40) | public Connect(host: string, port: number, serviceName: string, userna...
method ConnectWithDSN (line 53) | public ConnectWithDSN(dsn: string): boolean | null {
method IsOracle (line 65) | public IsOracle(host: string, port: number): IsOracleResponse | null {
method ExecuteQuery (line 80) | public ExecuteQuery(host: string, port: number, username: string, pass...
method ExecuteQueryWithDSN (line 94) | public ExecuteQueryWithDSN(dsn: string, query: string): SQLResult | nu...
type SQLResult (line 102) | interface SQLResult {
FILE: pkg/js/generated/ts/pop3.ts
function IsPOP3 (line 12) | function IsPOP3(host: string, port: number): IsPOP3Response | null {
type IsPOP3Response (line 28) | interface IsPOP3Response {
FILE: pkg/js/generated/ts/postgres.ts
class PGClient (line 12) | class PGClient {
method constructor (line 16) | constructor() {}
method IsPostgres (line 27) | public IsPostgres(host: string, port: number): boolean | null {
method Connect (line 44) | public Connect(host: string, port: number, username: string): boolean ...
method ExecuteQuery (line 61) | public ExecuteQuery(host: string, port: number, username: string): SQL...
method ConnectWithDB (line 78) | public ConnectWithDB(host: string, port: number, username: string): bo...
type SQLResult (line 90) | interface SQLResult {
FILE: pkg/js/generated/ts/rdp.ts
function CheckRDPAuth (line 12) | function CheckRDPAuth(host: string, port: number): CheckRDPAuthResponse ...
function CheckRDPEncryption (line 26) | function CheckRDPEncryption(host: string, port: number): RDPEncryptionRe...
function IsRDP (line 42) | function IsRDP(host: string, port: number): IsRDPResponse | null {
type CheckRDPAuthResponse (line 56) | interface CheckRDPAuthResponse {
type RDPEncryptionResponse (line 73) | interface RDPEncryptionResponse {
type IsRDPResponse (line 98) | interface IsRDPResponse {
type ServiceRDP (line 108) | interface ServiceRDP {
FILE: pkg/js/generated/ts/redis.ts
function Connect (line 11) | function Connect(host: string, port: number, password: string): boolean ...
function GetServerInfo (line 25) | function GetServerInfo(host: string, port: number): string | null {
function GetServerInfoAuth (line 39) | function GetServerInfoAuth(host: string, port: number, password: string)...
function IsAuthenticated (line 53) | function IsAuthenticated(host: string, port: number): boolean | null {
function RunLuaScript (line 67) | function RunLuaScript(host: string, port: number, password: string, scri...
FILE: pkg/js/generated/ts/rsync.ts
function IsRsync (line 12) | function IsRsync(host: string, port: number): IsRsyncResponse | null {
class RsyncClient (line 25) | class RsyncClient {
method constructor (line 28) | constructor() {}
method Connect (line 39) | public Connect(host: string, port: number, username: string, password:...
method ListModules (line 53) | public ListModules(host: string, port: number, username: string, passw...
method ListFilesInModule (line 67) | public ListFilesInModule(host: string, port: number, username: string,...
type IsRsyncResponse (line 82) | interface IsRsyncResponse {
FILE: pkg/js/generated/ts/smb.ts
class SMBClient (line 13) | class SMBClient {
method constructor (line 17) | constructor() {}
method ConnectSMBInfoMode (line 31) | public ConnectSMBInfoMode(host: string, port: number): SMBLog | null |...
method ListSMBv2Metadata (line 49) | public ListSMBv2Metadata(host: string, port: number): ServiceSMB | nul...
method ListShares (line 69) | public ListShares(host: string, port: number, user: string): string[] ...
method DetectSMBGhost (line 84) | public DetectSMBGhost(host: string, port: number): boolean | null {
type HeaderLog (line 96) | interface HeaderLog {
type NegotiationLog (line 114) | interface NegotiationLog {
type SMBCapabilities (line 138) | interface SMBCapabilities {
type SMBLog (line 160) | interface SMBLog {
type SMBVersions (line 186) | interface SMBVersions {
type ServiceSMB (line 202) | interface ServiceSMB {
type SessionSetupLog (line 226) | interface SessionSetupLog {
FILE: pkg/js/generated/ts/smtp.ts
class Client (line 11) | class Client {
method constructor (line 15) | constructor(public host: string, public port: string ) {}
method IsSMTP (line 28) | public IsSMTP(): SMTPResponse | null {
method IsOpenRelay (line 47) | public IsOpenRelay(msg: SMTPMessage): boolean | null {
method SendMail (line 67) | public SendMail(msg: SMTPMessage): boolean | null {
class SMTPMessage (line 85) | class SMTPMessage {
method constructor (line 89) | constructor() {}
method From (line 99) | public From(email: string): SMTPMessage {
method To (line 113) | public To(email: string): SMTPMessage {
method Subject (line 127) | public Subject(sub: string): SMTPMessage {
method Body (line 141) | public Body(msg: Uint8Array): SMTPMessage {
method Auth (line 155) | public Auth(username: string): SMTPMessage {
method String (line 173) | public String(): string {
type SMTPResponse (line 192) | interface SMTPResponse {
FILE: pkg/js/generated/ts/ssh.ts
class SSHClient (line 12) | class SSHClient {
method constructor (line 16) | constructor() {}
method SetTimeout (line 26) | public SetTimeout(sec: number): void {
method Connect (line 43) | public Connect(host: string, port: number, username: string): boolean ...
method ConnectWithKey (line 61) | public ConnectWithKey(host: string, port: number, username: string): b...
method ConnectSSHInfoMode (line 81) | public ConnectSSHInfoMode(host: string, port: number): HandshakeLog | ...
method Run (line 101) | public Run(cmd: string): string | null {
method Close (line 118) | public Close(): boolean | null {
type Algorithms (line 130) | interface Algorithms {
type DirectionAlgorithms (line 146) | interface DirectionAlgorithms {
type EndpointId (line 160) | interface EndpointId {
type HandshakeLog (line 176) | interface HandshakeLog {
type KexInitMsg (line 198) | interface KexInitMsg {
FILE: pkg/js/generated/ts/structs.ts
function Pack (line 13) | function Pack(formatStr: string, msg: any): Uint8Array | null {
function StructsCalcSize (line 28) | function StructsCalcSize(format: string): number | null {
function Unpack (line 46) | function Unpack(format: string, msg: Uint8Array): any | null {
FILE: pkg/js/generated/ts/telnet.ts
function IsTelnet (line 12) | function IsTelnet(host: string, port: number): IsTelnetResponse | null {
class TelnetClient (line 24) | class TelnetClient {
method Connect (line 38) | public Connect(host: string, port: number, username: string, password:...
method Info (line 54) | public Info(host: string, port: number): TelnetInfoResponse | null {
method GetTelnetNTLMInfo (line 71) | public GetTelnetNTLMInfo(host: string, port: number): NTLMInfoResponse...
type IsTelnetResponse (line 86) | interface IsTelnetResponse {
type TelnetInfoResponse (line 103) | interface TelnetInfoResponse {
type NTLMInfoResponse (line 123) | interface NTLMInfoResponse {
FILE: pkg/js/generated/ts/vnc.ts
function IsVNC (line 14) | function IsVNC(host: string, port: number): IsVNCResponse | null {
type IsVNCResponse (line 29) | interface IsVNCResponse {
class VNCClient (line 44) | class VNCClient {
method constructor (line 48) | constructor() {}
method Connect (line 62) | public Connect(host: string, port: number, password: string): boolean ...
FILE: pkg/js/global/helpers.go
function registerAdditionalHelpers (line 10) | func registerAdditionalHelpers(runtime *goja.Runtime) {
function init (line 42) | func init() {
FILE: pkg/js/global/js/active_directory.js
function getDomainControllerName (line 7) | function getDomainControllerName(name, host) {
function getDomainControllerNameBySMB (line 34) | function getDomainControllerNameBySMB(host) {
function getDomainControllerNameByLDAP (line 47) | function getDomainControllerNameByLDAP(host) {
FILE: pkg/js/global/js/dump.js
function dump_json (line 3) | function dump_json(data) {
function to_json (line 8) | function to_json(data) {
function to_array (line 13) | function to_array(data) {
function hex_to_ascii (line 18) | function hex_to_ascii(str1) {
FILE: pkg/js/global/scripts.go
function initBuiltInFunc (line 45) | func initBuiltInFunc(runtime *goja.Runtime) {
function RegisterNativeScripts (line 233) | func RegisterNativeScripts(runtime *goja.Runtime) error {
FILE: pkg/js/global/scripts_test.go
function TestScriptsRuntime (line 11) | func TestScriptsRuntime(t *testing.T) {
FILE: pkg/js/gojs/gojs.go
type Objects (line 14) | type Objects
type Runtime (line 16) | type Runtime interface
type Object (line 20) | type Object interface
type Module (line 25) | type Module interface
type GojaModule (line 32) | type GojaModule struct
method String (line 45) | func (p *GojaModule) String() string {
method Name (line 49) | func (p *GojaModule) Name() string {
method Set (line 106) | func (p *GojaModule) Set(objects Objects) Module {
method Require (line 111) | func (p *GojaModule) Require(runtime *goja.Runtime, module *goja.Objec...
method Enable (line 119) | func (p *GojaModule) Enable(runtime Runtime) {
method Register (line 123) | func (p *GojaModule) Register() Module {
function NewGojaModule (line 38) | func NewGojaModule(name string) Module {
function wrapModuleFunc (line 55) | func wrapModuleFunc(runtime *goja.Runtime, fn interface{}) interface{} {
function GetClassConstructor (line 132) | func GetClassConstructor[T any](instance *T) func(call goja.ConstructorC...
FILE: pkg/js/gojs/set.go
type FuncOpts (line 16) | type FuncOpts struct
method valid (line 24) | func (f *FuncOpts) valid() bool {
function wrapWithContext (line 30) | func wrapWithContext(runtime *goja.Runtime, fn interface{}) interface{} {
function RegisterFuncWithSignature (line 81) | func RegisterFuncWithSignature(runtime *goja.Runtime, opts FuncOpts) err...
FILE: pkg/js/libs/bytes/buffer.go
type Buffer (line 24) | type Buffer struct
method Write (line 48) | func (b *Buffer) Write(data []byte) *Buffer {
method WriteString (line 60) | func (b *Buffer) WriteString(data string) *Buffer {
method Bytes (line 73) | func (b *Buffer) Bytes() []byte {
method String (line 85) | func (b *Buffer) String() string {
method Len (line 97) | func (b *Buffer) Len() int {
method Hex (line 109) | func (b *Buffer) Hex() string {
method Hexdump (line 121) | func (b *Buffer) Hexdump() string {
method Pack (line 133) | func (b *Buffer) Pack(formatStr string, msg any) error {
function NewBuffer (line 30) | func NewBuffer(call goja.ConstructorCall, runtime *goja.Runtime) *goja.O...
FILE: pkg/js/libs/fs/fs.go
function ListDir (line 31) | func ListDir(ctx context.Context, path string, itemType string) ([]strin...
function ReadFile (line 62) | func ReadFile(ctx context.Context, path string) ([]byte, error) {
function ReadFileAsString (line 80) | func ReadFileAsString(ctx context.Context, path string) (string, error) {
function ReadFilesFromDir (line 97) | func ReadFilesFromDir(ctx context.Context, dir string) ([]string, error) {
FILE: pkg/js/libs/goconsole/log.go
type GoConsolePrinter (line 11) | type GoConsolePrinter struct
method Log (line 21) | func (p *GoConsolePrinter) Log(msg string) {
method Warn (line 25) | func (p *GoConsolePrinter) Warn(msg string) {
method Error (line 29) | func (p *GoConsolePrinter) Error(msg string) {
function NewGoConsolePrinter (line 15) | func NewGoConsolePrinter() *GoConsolePrinter {
FILE: pkg/js/libs/ikev2/ikev2.go
function init (line 11) | func init() {
type IKEMessage (line 20) | type IKEMessage struct
method AppendPayload (line 39) | func (m *IKEMessage) AppendPayload(payload any) error {
method Encode (line 57) | func (m *IKEMessage) Encode() ([]byte, error) {
type IKEPayload (line 81) | type IKEPayload interface
type IKENotification (line 95) | type IKENotification struct
method encode (line 102) | func (i *IKENotification) encode() (message.IKEPayload, error) {
constant IKE_NOTIFY_NO_PROPOSAL_CHOSEN (line 112) | IKE_NOTIFY_NO_PROPOSAL_CHOSEN = 14
constant IKE_NOTIFY_USE_TRANSPORT_MODE (line 113) | IKE_NOTIFY_USE_TRANSPORT_MODE = 16391
constant IKE_VERSION_2 (line 115) | IKE_VERSION_2 = 0x20
constant IKE_EXCHANGE_SA_INIT (line 118) | IKE_EXCHANGE_SA_INIT = 34
constant IKE_EXCHANGE_AUTH (line 119) | IKE_EXCHANGE_AUTH = 35
constant IKE_EXCHANGE_CREATE_CHILD_SA (line 120) | IKE_EXCHANGE_CREATE_CHILD_SA = 36
constant IKE_EXCHANGE_INFORMATIONAL (line 121) | IKE_EXCHANGE_INFORMATIONAL = 37
constant IKE_FLAGS_InitiatorBitCheck (line 124) | IKE_FLAGS_InitiatorBitCheck = 0x08
type IKENonce (line 136) | type IKENonce struct
method encode (line 142) | func (i *IKENonce) encode() (message.IKEPayload, error) {
FILE: pkg/js/libs/kerberos/kerberosx.go
type EnumerateUserResponse (line 18) | type EnumerateUserResponse struct
type TGS (line 27) | type TGS struct
type Config (line 36) | type Config struct
method SetIPAddress (line 49) | func (c *Config) SetIPAddress(ip string) *Config {
method SetTimeout (line 61) | func (c *Config) SetTimeout(timeout int) *Config {
type Client (line 83) | type Client struct
method SetConfig (line 176) | func (c *Client) SetConfig(cfg *Config) {
method EnumerateUser (line 191) | func (c *Client) EnumerateUser(username string) (EnumerateUserResponse...
method GetServiceTicket (line 244) | func (c *Client) GetServiceTicket(User, Pass, SPN string) (TGS, error) {
function NewKerberosClient (line 95) | func NewKerberosClient(call goja.ConstructorCall, runtime *goja.Runtime)...
function NewKerberosClientFromString (line 156) | func NewKerberosClientFromString(cfg string) (*Client, error) {
FILE: pkg/js/libs/kerberos/sendtokdc.go
function SendToKDC (line 30) | func SendToKDC(kclient *Client, msg string) (string, error) {
function sendToKDCTcp (line 66) | func sendToKDCTcp(kclient *Client, msg string) ([]byte, error) {
function sendToKDCUdp (line 107) | func sendToKDCUdp(kclient *Client, msg string) ([]byte, error) {
function sendUDP (line 148) | func sendUDP(conn *net.UDPConn, b []byte) ([]byte, error) {
function sendTCP (line 170) | func sendTCP(conn *net.TCPConn, b []byte) ([]byte, error) {
function CheckKrbError (line 204) | func CheckKrbError(b []byte) ([]byte, error) {
function TGStoHashcat (line 213) | func TGStoHashcat(tgs messages.Ticket, username string) (string, error) {
function ASRepToHashcat (line 225) | func ASRepToHashcat(asrep messages.ASRep) (string, error) {
FILE: pkg/js/libs/ldap/adenum.go
constant FilterIsPerson (line 20) | FilterIsPerson = "(objectCategory=person)"
constant FilterIsGroup (line 21) | FilterIsGroup = "(objectCategory=group)"
constant FilterIsComputer (line 22) | FilterIsComputer = "(objectCategory=computer)"
constant FilterIsAdmin (line 23) | FilterIsAdmin = "(adminCount=1)"
constant FilterHasServicePrincipalName (line 24) | FilterHasServicePrincipalName = "(servicePrincipalName=*)"
constant FilterLogonScript (line 25) | FilterLogonScript = "(userAccountControl:1.2.840.113556.1...
constant FilterAccountDisabled (line 26) | FilterAccountDisabled = "(userAccountControl:1.2.840.113556.1...
constant FilterAccountEnabled (line 27) | FilterAccountEnabled = "(!(userAccountControl:1.2.840.113556...
constant FilterHomedirRequired (line 28) | FilterHomedirRequired = "(userAccountControl:1.2.840.113556.1...
constant FilterLockout (line 29) | FilterLockout = "(userAccountControl:1.2.840.113556.1...
constant FilterPasswordNotRequired (line 30) | FilterPasswordNotRequired = "(userAccountControl:1.2.840.113556.1...
constant FilterPasswordCantChange (line 31) | FilterPasswordCantChange = "(userAccountControl:1.2.840.113556.1...
constant FilterCanSendEncryptedPassword (line 32) | FilterCanSendEncryptedPassword = "(userAccountControl:1.2.840.113556.1...
constant FilterIsDuplicateAccount (line 33) | FilterIsDuplicateAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterIsNormalAccount (line 34) | FilterIsNormalAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterInterdomainTrustAccount (line 35) | FilterInterdomainTrustAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterWorkstationTrustAccount (line 36) | FilterWorkstationTrustAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterServerTrustAccount (line 37) | FilterServerTrustAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterDontExpirePassword (line 38) | FilterDontExpirePassword = "(userAccountControl:1.2.840.113556.1...
constant FilterMnsLogonAccount (line 39) | FilterMnsLogonAccount = "(userAccountControl:1.2.840.113556.1...
constant FilterSmartCardRequired (line 40) | FilterSmartCardRequired = "(userAccountControl:1.2.840.113556.1...
constant FilterTrustedForDelegation (line 41) | FilterTrustedForDelegation = "(userAccountControl:1.2.840.113556.1...
constant FilterNotDelegated (line 42) | FilterNotDelegated = "(userAccountControl:1.2.840.113556.1...
constant FilterUseDesKeyOnly (line 43) | FilterUseDesKeyOnly = "(userAccountControl:1.2.840.113556.1...
constant FilterDontRequirePreauth (line 44) | FilterDontRequirePreauth = "(userAccountControl:1.2.840.113556.1...
constant FilterPasswordExpired (line 45) | FilterPasswordExpired = "(userAccountControl:1.2.840.113556.1...
constant FilterTrustedToAuthForDelegation (line 46) | FilterTrustedToAuthForDelegation = "(userAccountControl:1.2.840.113556.1...
constant FilterPartialSecretsAccount (line 47) | FilterPartialSecretsAccount = "(userAccountControl:1.2.840.113556.1...
function JoinFilters (line 57) | func JoinFilters(filters ...string) string {
function NegativeFilter (line 73) | func NegativeFilter(filter string) string {
method FindADObjects (line 86) | func (c *Client) FindADObjects(filter string) SearchResult {
method GetADUsers (line 117) | func (c *Client) GetADUsers() SearchResult {
method GetADActiveUsers (line 130) | func (c *Client) GetADActiveUsers() SearchResult {
method GetADUserWithNeverExpiringPasswords (line 143) | func (c *Client) GetADUserWithNeverExpiringPasswords() SearchResult {
method GetADUserTrustedForDelegation (line 156) | func (c *Client) GetADUserTrustedForDelegation() SearchResult {
method GetADUserWithPasswordNotRequired (line 169) | func (c *Client) GetADUserWithPasswordNotRequired() SearchResult {
method GetADGroups (line 182) | func (c *Client) GetADGroups() SearchResult {
method GetADDCList (line 195) | func (c *Client) GetADDCList() SearchResult {
method GetADAdmins (line 208) | func (c *Client) GetADAdmins() SearchResult {
method GetADUserKerberoastable (line 221) | func (c *Client) GetADUserKerberoastable() SearchResult {
method GetADUserAsRepRoastable (line 234) | func (c *Client) GetADUserAsRepRoastable() SearchResult {
method GetADDomainSID (line 246) | func (c *Client) GetADDomainSID() string {
FILE: pkg/js/libs/ldap/ldap.go
type Client (line 34) | type Client struct
method Authenticate (line 164) | func (c *Client) Authenticate(username, password string) bool {
method AuthenticateWithNTLMHash (line 196) | func (c *Client) AuthenticateWithNTLMHash(username, hash string) bool {
method Search (line 216) | func (c *Client) Search(filter string, attributes ...string) SearchRes...
method AdvancedSearch (line 244) | func (c *Client) AdvancedSearch(
method CollectMetadata (line 283) | func (c *Client) CollectMetadata() Metadata {
method GetVersion (line 338) | func (c *Client) GetVersion() []string {
method Close (line 368) | func (c *Client) Close() {
type Config (line 57) | type Config struct
function NewClient (line 70) | func NewClient(call goja.ConstructorCall, runtime *goja.Runtime) *goja.O...
type Metadata (line 264) | type Metadata struct
FILE: pkg/js/libs/ldap/utils.go
type SearchResult (line 20) | type SearchResult struct
type LdapEntry (line 30) | type LdapEntry struct
type LdapAttributes (line 39) | type LdapAttributes struct
function getSearchResult (line 96) | func getSearchResult(sr *ldap.SearchResult) *SearchResult {
function parseLdapEntry (line 115) | func parseLdapEntry(entry *ldap.Entry) LdapEntry {
function decodeTimestamps (line 183) | func decodeTimestamps(timestamps []string) []string {
function DecodeSID (line 198) | func DecodeSID(s string) string {
function DecodeADTimestamp (line 237) | func DecodeADTimestamp(timestamp string) string {
function DecodeZuluTimestamp (line 254) | func DecodeZuluTimestamp(timestamp string) string {
FILE: pkg/js/libs/mssql/memo.mssql.go
function memoizedconnect (line 13) | func memoizedconnect(executionId string, host string, port int, username...
function memoizedisMssql (line 29) | func memoizedisMssql(executionId string, host string, port int) (bool, e...
FILE: pkg/js/libs/mssql/mssql.go
type MSSQLClient (line 26) | type MSSQLClient struct
method Connect (line 39) | func (c *MSSQLClient) Connect(ctx context.Context, host string, port i...
method ConnectWithDB (line 54) | func (c *MSSQLClient) ConnectWithDB(ctx context.Context, host string, ...
method IsMssql (line 112) | func (c *MSSQLClient) IsMssql(ctx context.Context, host string, port i...
method ExecuteQuery (line 158) | func (c *MSSQLClient) ExecuteQuery(ctx context.Context, host string, p...
function connect (line 60) | func connect(executionId string, host string, port int, username string,...
function isMssql (line 118) | func isMssql(executionId string, host string, port int) (bool, error) {
FILE: pkg/js/libs/mysql/memo.mysql.go
function memoizedisMySQL (line 11) | func memoizedisMySQL(executionId string, host string, port int) (bool, e...
function memoizedfingerprintMySQL (line 27) | func memoizedfingerprintMySQL(executionId string, host string, port int)...
FILE: pkg/js/libs/mysql/memo.mysql_private.go
function memoizedconnectWithDSN (line 11) | func memoizedconnectWithDSN(executionId string, dsn string) (bool, error) {
FILE: pkg/js/libs/mysql/mysql.go
type MySQLClient (line 27) | type MySQLClient struct
method IsMySQL (line 38) | func (c *MySQLClient) IsMySQL(ctx context.Context, host string, port i...
method Connect (line 84) | func (c *MySQLClient) Connect(ctx context.Context, host string, port i...
method FingerprintMySQL (line 137) | func (c *MySQLClient) FingerprintMySQL(ctx context.Context, host strin...
method ConnectWithDSN (line 193) | func (c *MySQLClient) ConnectWithDSN(ctx context.Context, dsn string) ...
method ExecuteQueryWithOpts (line 209) | func (c *MySQLClient) ExecuteQueryWithOpts(ctx context.Context, opts M...
method ExecuteQuery (line 264) | func (c *MySQLClient) ExecuteQuery(ctx context.Context, host string, p...
method ExecuteQueryOnDB (line 291) | func (c *MySQLClient) ExecuteQueryOnDB(ctx context.Context, host strin...
function isMySQL (line 45) | func isMySQL(executionId string, host string, port int) (bool, error) {
type MySQLInfo (line 117) | type MySQLInfo struct
function fingerprintMySQL (line 143) | func fingerprintMySQL(executionId string, host string, port int) (MySQLI...
function init (line 302) | func init() {
FILE: pkg/js/libs/mysql/mysql_private.go
type MySQLOptions (line 22) | type MySQLOptions struct
function BuildDSN (line 43) | func BuildDSN(opts MySQLOptions) (string, error) {
function connectWithDSN (line 76) | func connectWithDSN(executionId string, dsn string) (bool, error) {
FILE: pkg/js/libs/net/net.go
function Open (line 28) | func Open(ctx context.Context, protocol, address string) (*NetConn, erro...
function OpenTLS (line 48) | func OpenTLS(ctx context.Context, protocol, address string) (*NetConn, e...
type NetConn (line 77) | type NetConn struct
method Close (line 90) | func (c *NetConn) Close() error {
method SetTimeout (line 102) | func (c *NetConn) SetTimeout(value int) {
method setDeadLine (line 108) | func (c *NetConn) setDeadLine() {
method unsetDeadLine (line 116) | func (c *NetConn) unsetDeadLine() {
method SendArray (line 127) | func (c *NetConn) SendArray(data []interface{}) error {
method SendHex (line 148) | func (c *NetConn) SendHex(data string) error {
method Send (line 172) | func (c *NetConn) Send(data string) error {
method RecvFull (line 195) | func (c *NetConn) RecvFull(N int) ([]byte, error) {
method Recv (line 220) | func (c *NetConn) Recv(N int) ([]byte, error) {
method RecvFullString (line 243) | func (c *NetConn) RecvFullString(N int) (string, error) {
method RecvString (line 261) | func (c *NetConn) RecvString(N int) (string, error) {
method RecvFullHex (line 279) | func (c *NetConn) RecvFullHex(N int) (string, error) {
method RecvHex (line 297) | func (c *NetConn) RecvHex(N int) (string, error) {
FILE: pkg/js/libs/oracle/memo.oracle.go
function memoizedisOracle (line 11) | func memoizedisOracle(executionId string, host string, port int) (IsOrac...
FILE: pkg/js/libs/oracle/oracle.go
type IsOracleResponse (line 26) | type IsOracleResponse struct
type OracleClient (line 37) | type OracleClient struct
method IsOracle (line 49) | func (c *OracleClient) IsOracle(ctx context.Context, host string, port...
method oracleDbInstance (line 86) | func (c *OracleClient) oracleDbInstance(connStr string, executionId st...
method Connect (line 116) | func (c *OracleClient) Connect(ctx context.Context, host string, port ...
method ConnectWithDSN (line 122) | func (c *OracleClient) ConnectWithDSN(ctx context.Context, dsn string)...
method ExecuteQuery (line 156) | func (c *OracleClient) ExecuteQuery(ctx context.Context, host string, ...
method ExecuteQueryWithDSN (line 182) | func (c *OracleClient) ExecuteQueryWithDSN(ctx context.Context, dsn st...
function isOracle (line 55) | func isOracle(executionId string, host string, port int) (IsOracleRespon...
FILE: pkg/js/libs/oracle/oracledialer.go
type oracleCustomDialer (line 13) | type oracleCustomDialer struct
method dialWithCtx (line 17) | func (o *oracleCustomDialer) dialWithCtx(ctx context.Context, network,...
method Dial (line 29) | func (o *oracleCustomDialer) Dial(network, address string) (net.Conn, ...
method DialTimeout (line 33) | func (o *oracleCustomDialer) DialTimeout(network, address string, time...
method DialContext (line 40) | func (o *oracleCustomDialer) DialContext(ctx context.Context, network,...
FILE: pkg/js/libs/pop3/memo.pop3.go
function memoizedisPoP3 (line 11) | func memoizedisPoP3(executionId string, host string, port int) (IsPOP3Re...
FILE: pkg/js/libs/pop3/pop3.go
type IsPOP3Response (line 24) | type IsPOP3Response struct
function IsPOP3 (line 37) | func IsPOP3(ctx context.Context, host string, port int) (IsPOP3Response,...
function isPoP3 (line 43) | func isPoP3(executionId string, host string, port int) (IsPOP3Response, ...
FILE: pkg/js/libs/postgres/memo.postgres.go
function memoizedisPostgres (line 15) | func memoizedisPostgres(executionId string, host string, port int) (bool...
function memoizedexecuteQuery (line 31) | func memoizedexecuteQuery(executionId string, host string, port int, use...
function memoizedconnect (line 47) | func memoizedconnect(executionId string, host string, port int, username...
FILE: pkg/js/libs/postgres/postgres.go
type PGClient (line 28) | type PGClient struct
method IsPostgres (line 39) | func (c *PGClient) IsPostgres(ctx context.Context, host string, port i...
method Connect (line 85) | func (c *PGClient) Connect(ctx context.Context, host string, port int,...
method ExecuteQuery (line 107) | func (c *PGClient) ExecuteQuery(ctx context.Context, host string, port...
method ConnectWithDB (line 160) | func (c *PGClient) ConnectWithDB(ctx context.Context, host string, por...
function isPostgres (line 46) | func isPostgres(executionId string, host string, port int) (bool, error) {
function executeQuery (line 122) | func executeQuery(executionId string, host string, port int, username st...
function connect (line 175) | func connect(executionId string, host string, port int, username string,...
FILE: pkg/js/libs/rdp/memo.rdp.go
function memoizedisRDP (line 11) | func memoizedisRDP(executionId string, host string, port int) (IsRDPResp...
function memoizedcheckRDPAuth (line 27) | func memoizedcheckRDPAuth(executionId string, host string, port int) (Ch...
function memoizedcheckRDPEncryption (line 43) | func memoizedcheckRDPEncryption(executionId string, host string, port in...
FILE: pkg/js/libs/rdp/rdp.go
type IsRDPResponse (line 24) | type IsRDPResponse struct
function IsRDP (line 40) | func IsRDP(ctx context.Context, host string, port int) (IsRDPResponse, e...
function isRDP (line 46) | func isRDP(executionId string, host string, port int) (IsRDPResponse, er...
type CheckRDPAuthResponse (line 84) | type CheckRDPAuthResponse struct
function CheckRDPAuth (line 99) | func CheckRDPAuth(ctx context.Context, host string, port int) (CheckRDPA...
function checkRDPAuth (line 105) | func checkRDPAuth(executionId string, host string, port int) (CheckRDPAu...
type SecurityLayer (line 134) | type SecurityLayer
constant SecurityLayerNativeRDP (line 138) | SecurityLayerNativeRDP = "NativeRDP"
constant SecurityLayerSSL (line 139) | SecurityLayerSSL = "SSL"
constant SecurityLayerCredSSP (line 140) | SecurityLayerCredSSP = "CredSSP"
constant SecurityLayerRDSTLS (line 141) | SecurityLayerRDSTLS = "RDSTLS"
constant SecurityLayerCredSSPWithEarlyUserAuth (line 142) | SecurityLayerCredSSPWithEarlyUserAuth = "CredSSPWithEarlyUserAuth"
type EncryptionLevel (line 146) | type EncryptionLevel
constant EncryptionLevelRC4_40bit (line 150) | EncryptionLevelRC4_40bit = "RC4_40bit"
constant EncryptionLevelRC4_56bit (line 151) | EncryptionLevelRC4_56bit = "RC4_56bit"
constant EncryptionLevelRC4_128bit (line 152) | EncryptionLevelRC4_128bit = "RC4_128bit"
constant EncryptionLevelFIPS140_1 (line 153) | EncryptionLevelFIPS140_1 = "FIPS140_1"
type RDPEncryptionResponse (line 165) | type RDPEncryptionResponse struct
function CheckRDPEncryption (line 189) | func CheckRDPEncryption(ctx context.Context, host string, port int) (RDP...
function checkRDPEncryption (line 195) | func checkRDPEncryption(executionId string, host string, port int) (RDPE...
function testRDPProtocol (line 280) | func testRDPProtocol(conn net.Conn, protocol int) (bool, error) {
function testRDPCipher (line 313) | func testRDPCipher(conn net.Conn, cipher int) (bool, error) {
FILE: pkg/js/libs/redis/memo.redis.go
function memoizedgetServerInfo (line 11) | func memoizedgetServerInfo(executionId string, host string, port int) (s...
function memoizedconnect (line 27) | func memoizedconnect(executionId string, host string, port int, password...
function memoizedgetServerInfoAuth (line 43) | func memoizedgetServerInfoAuth(executionId string, host string, port int...
function memoizedisAuthenticated (line 59) | func memoizedisAuthenticated(executionId string, host string, port int) ...
FILE: pkg/js/libs/redis/redis.go
function GetServerInfo (line 21) | func GetServerInfo(ctx context.Context, host string, port int) (string, ...
function getServerInfo (line 27) | func getServerInfo(executionId string, host string, port int) (string, e...
function Connect (line 63) | func Connect(ctx context.Context, host string, port int, password string...
function connect (line 69) | func connect(executionId string, host string, port int, password string)...
function GetServerInfoAuth (line 103) | func GetServerInfoAuth(ctx context.Context, host string, port int, passw...
function getServerInfoAuth (line 109) | func getServerInfoAuth(executionId string, host string, port int, passwo...
function IsAuthenticated (line 145) | func IsAuthenticated(ctx context.Context, host string, port int) (bool, ...
function isAuthenticated (line 151) | func isAuthenticated(executionId string, host string, port int) (bool, e...
function RunLuaScript (line 180) | func RunLuaScript(ctx
Condensed preview — 1011 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,856K chars).
[
{
"path": ".github/DISCUSSION_TEMPLATE.md",
"chars": 3341,
"preview": "# Nuclei Discussion Guidelines\n\n## Before Creating a Discussion\n\n1. **Search existing discussions and issues** to avoid "
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 3954,
"preview": "name: Bug Report\ndescription: Create a report to help us to improve the Nuclei.\ntitle: \"[BUG] ...\"\nlabels: [\"Type: Bug\"]"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 889,
"preview": "blank_issues_enabled: false\n\ncontact_links:\n\n - name: 💡 Request a Feature (Start with Discussion)\n url: https://gith"
},
{
"path": ".github/ISSUE_TEMPLATE/reference-templates/README.md",
"chars": 2163,
"preview": "# Issue Template References\n\n## Overview\n\nThis folder contains the preserved issue templates that are **not** directly a"
},
{
"path": ".github/ISSUE_TEMPLATE/reference-templates/feature-request-reference.yml",
"chars": 1611,
"preview": "name: Feature Request\ndescription: Request feature to implement in the Nuclei.\ntitle: \"[FEATURE] ...\"\nlabels: [\"Type: En"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 936,
"preview": "## Proposed changes\n\n<!-- Describe the overall picture of your modifications to help maintainers understand the pull req"
},
{
"path": ".github/auto_assign.yml",
"chars": 131,
"preview": "addReviewers: true\nreviewers:\n - dogancanbakir\n - dwisiswant0\n - mzack9999\n\nnumberOfReviewers: 1\nskipKeywords:\n - '@"
},
{
"path": ".github/dependabot.yml",
"chars": 1133,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"gomod\"\n directory: \"/\"\n schedule:\n interval: \"weekly\"\n target-"
},
{
"path": ".github/release.yml",
"chars": 328,
"preview": "changelog:\n exclude:\n authors:\n - dependabot\n categories:\n - title: 🎉 New Features\n labels:\n - "
},
{
"path": ".github/workflows/auto-merge.yaml",
"chars": 570,
"preview": "name: 🔀 Auto merge PR\n\non:\n # pull_request:\n # types: [opened, synchronize, reopened, ready_for_review]\n # pull_req"
},
{
"path": ".github/workflows/compat-checks.yaml",
"chars": 433,
"preview": "name: ♾️ Compatibility Checks\n\non:\n pull_request:\n types: [opened, synchronize]\n branches:\n - dev\n\njobs:\n c"
},
{
"path": ".github/workflows/flamegraph.yaml",
"chars": 2337,
"preview": "name: 📊 Flamegraph\n\non:\n workflow_call: {}\n\njobs:\n flamegraph:\n name: \"Flamegraph\"\n env:\n GITHUB_TOKEN: \"${"
},
{
"path": ".github/workflows/generate-docs.yaml",
"chars": 755,
"preview": "name: ⏰ Generate Docs\n\non:\n push:\n branches:\n - dev\n workflow_dispatch: {}\n\njobs:\n publish-docs:\n if: ${{ "
},
{
"path": ".github/workflows/generate-pgo.yaml",
"chars": 1610,
"preview": "name: 👤 Generate PGO\n\non:\n workflow_dispatch: {}\n workflow_call: {}\n\njobs:\n pgo:\n runs-on: ubuntu-latest\n if: g"
},
{
"path": ".github/workflows/govulncheck.yaml",
"chars": 791,
"preview": "name: 🐛 govulncheck\n\non:\n schedule:\n - cron: '0 0 * * 0' # Weekly\n workflow_dispatch: {}\n\njobs:\n govulncheck:\n "
},
{
"path": ".github/workflows/memogen.yaml",
"chars": 817,
"preview": "name: 💾 Memoize Functions\n\non:\n push:\n branches:\n - dev\n paths:\n - 'pkg/js/libs/**'\n - 'cmd/memoge"
},
{
"path": ".github/workflows/perf-regression.yaml",
"chars": 1290,
"preview": "name: 🔨 Performance Regression\n\non:\n workflow_call: {}\n workflow_dispatch: {}\n\njobs:\n perf-regression:\n runs-on: u"
},
{
"path": ".github/workflows/release.yaml",
"chars": 1053,
"preview": "name: 🎉 Release\n\non:\n push:\n tags:\n - '*'\n workflow_dispatch: {}\n\njobs:\n pgo:\n name: \"Generate PGO\"\n us"
},
{
"path": ".github/workflows/stale.yaml",
"chars": 1586,
"preview": "name: 💤 Stale\n\non:\n schedule:\n - cron: '0 0 * * 0' # Weekly\n\njobs:\n stale:\n runs-on: ubuntu-latest\n permissio"
},
{
"path": ".github/workflows/tests.yaml",
"chars": 5012,
"preview": "name: 🔨 Tests\n\non:\n push:\n branches: [\"dev\"]\n paths:\n - '**.go'\n - '**.mod'\n pull_request:\n paths:\n"
},
{
"path": ".github/workflows/typos.yaml",
"chars": 394,
"preview": "name: 🔤 Typos\r\n\r\non:\r\n push:\r\n branches: [\"dev\"]\r\n pull_request:\r\n workflow_dispatch:\r\n\r\nconcurrency:\r\n group: ${"
},
{
"path": ".goreleaser.yml",
"chars": 4315,
"preview": "version: 2\n\nbefore:\n hooks:\n - go mod download\n - go mod verify\n\nbuilds:\n - main: cmd/nuclei/main.go\n binary:"
},
{
"path": ".run/DSLFunctionsIT.run.xml",
"chars": 673,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"DSLFunctionsIT\" type=\"GoApplica"
},
{
"path": ".run/IntegrationTests.run.xml",
"chars": 920,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"IntegrationTests\" type=\"ShConfi"
},
{
"path": ".run/RegressionTests.run.xml",
"chars": 923,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"RegressionTests\" type=\"ShConfig"
},
{
"path": ".run/UnitTests.run.xml",
"chars": 462,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"UnitTests\" type=\"GoTestRunConfi"
},
{
"path": "CLAUDE.md",
"chars": 3854,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "CONTRIBUTING.md",
"chars": 1628,
"preview": "# Contributing to ProjectDiscovery/Nuclei\n\nWe appreciate your interest in contributing to the projectdiscovery/nuclei! T"
},
{
"path": "DEBUG.md",
"chars": 2272,
"preview": "## Debugging Nuclei\n\nWhile Adding new features or fixing bugs or writing new templates to properly understand the behavi"
},
{
"path": "DESIGN.md",
"chars": 25435,
"preview": "# Nuclei Architecture Document\n\nA brief overview of Nuclei Engine architecture. This document will be kept updated as th"
},
{
"path": "Dockerfile",
"chars": 288,
"preview": "# Build\nFROM golang:1.24-alpine AS builder\n\nRUN apk add build-base\nWORKDIR /app\nCOPY . /app\nRUN make verify\nRUN make bui"
},
{
"path": "Dockerfile.goreleaser",
"chars": 715,
"preview": "FROM alpine:latest\n\nLABEL org.opencontainers.image.authors=\"ProjectDiscovery\"\nLABEL org.opencontainers.image.description"
},
{
"path": "LICENSE.md",
"chars": 1079,
"preview": "MIT License\n\nCopyright (c) 2025 ProjectDiscovery, Inc.\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "Makefile",
"chars": 4530,
"preview": "# Go parameters\nGOCMD := go\nGOBUILD := $(GOCMD) build\nGOBUILD_OUTPUT := \nGOBUILD_PACKAGES := \nGOBUILD_ADDITIONAL_ARGS :="
},
{
"path": "README.md",
"chars": 59181,
"preview": "\n\n<div align=\"center\">\n \n <a href=\"https://github.com/projectdiscovery/nuclei"
},
{
"path": "README_CN.md",
"chars": 18738,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_ES.md",
"chars": 26019,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_ID.md",
"chars": 27677,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_JP.md",
"chars": 7982,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_KR.md",
"chars": 20698,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_PT-BR.md",
"chars": 25546,
"preview": "<h1 align=\"center\">\n <br>\n <a href=\"https://nuclei.projectdiscovery.io\"><img src=\"static/nuclei-logo.png\" width=\"200px"
},
{
"path": "README_TR.md",
"chars": 18337,
"preview": "\n\n<div align=\"center\">\n \n <a href=\"https://github.com/projectdiscovery/nuclei"
},
{
"path": "SYNTAX-REFERENCE.md",
"chars": 64912,
"preview": "\n\n\n\n## Template\nTemplate is a YAML input file which defines all the requests and\n other metadata for a template.\n\n\n\n\n\n\n<"
},
{
"path": "THANKS.md",
"chars": 1206,
"preview": "\n### Thanks\n\nMany people have contributed to **nuclei** making it a wonderful tool either by making a pull request fixin"
},
{
"path": "_typos.toml",
"chars": 1499,
"preview": "[files]\r\nextend-exclude = [\r\n # Non-English translations\r\n \"README_CN.md\",\r\n \"README_ES.md\",\r\n \"README_ID.md"
},
{
"path": "cmd/docgen/docgen.go",
"chars": 1475,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\n\t\"github.com/invopop/jsonschema\"\n\t\"github.com/project"
},
{
"path": "cmd/functional-test/main.go",
"chars": 3090,
"preview": "package main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/kitabisa/go-ci\"\n\t\"github.com/logrus"
},
{
"path": "cmd/functional-test/run.sh",
"chars": 1206,
"preview": "#!/bin/bash\n\nif [ \"${RUNNER_OS}\" == \"Windows\" ]; then\n EXT=\".exe\"\nelif [ \"${RUNNER_OS}\" == \"macOS\" ]; then\n if [ \""
},
{
"path": "cmd/functional-test/targets-1000.txt",
"chars": 24893,
"preview": "https://scanme.sh/?a=1\nhttps://scanme.sh/?a=2\nhttps://scanme.sh/?a=3\nhttps://scanme.sh/?a=4\nhttps://scanme.sh/?a=5\nhttps"
},
{
"path": "cmd/functional-test/targets-150.txt",
"chars": 3641,
"preview": "https://scanme.sh/?a=1\nhttps://scanme.sh/?a=2\nhttps://scanme.sh/?a=3\nhttps://scanme.sh/?a=4\nhttps://scanme.sh/?a=5\nhttps"
},
{
"path": "cmd/functional-test/targets-250.txt",
"chars": 6142,
"preview": "https://scanme.sh/?a=1\nhttps://scanme.sh/?a=2\nhttps://scanme.sh/?a=3\nhttps://scanme.sh/?a=4\nhttps://scanme.sh/?a=5\nhttps"
},
{
"path": "cmd/functional-test/targets.txt",
"chars": 51,
"preview": "scanme.sh\nscanme.sh?a=1\nscanme.sh?a=2\nscanme.sh?a=3"
},
{
"path": "cmd/functional-test/testcases.txt",
"chars": 4199,
"preview": "# Simple binary invocation\n{{binary}}\n\n# Template tags filter\n{{binary}} -tags cve -ntv 8.8.8,8.8.9\n{{binary}} -tags cve"
},
{
"path": "cmd/generate-checksum/main.go",
"chars": 1218,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"io/fs\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)"
},
{
"path": "cmd/integration-test/code.go",
"chars": 5308,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tosutils \"github.com/projectdiscovery/utils/os\"\n\n\t\"githu"
},
{
"path": "cmd/integration-test/custom-dir.go",
"chars": 988,
"preview": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\ntype customConfigDirTest struct{"
},
{
"path": "cmd/integration-test/dns.go",
"chars": 3299,
"preview": "package main\n\nimport (\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar dnsTestCases = []TestCaseInfo{\n\t{Pa"
},
{
"path": "cmd/integration-test/dsl.go",
"chars": 1501,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\n\t\"github.com/julienschmidt/httprouter\"\n\t\"github.com/proj"
},
{
"path": "cmd/integration-test/exporters.go",
"chars": 2950,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/output\"\n\t\"github.co"
},
{
"path": "cmd/integration-test/file.go",
"chars": 1473,
"preview": "package main\n\nimport (\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar fileTestcases = []TestCaseInfo{\n\t{P"
},
{
"path": "cmd/integration-test/flow.go",
"chars": 3098,
"preview": "package main\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\n\t\"github.com/julienschmidt/httprouter"
},
{
"path": "cmd/integration-test/fuzz.go",
"chars": 7281,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\n\t\"github.com/julienschmidt/httprouter\"\n\t\"gith"
},
{
"path": "cmd/integration-test/generic.go",
"chars": 4749,
"preview": "package main\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\n\t\"github.com/juliensc"
},
{
"path": "cmd/integration-test/headless.go",
"chars": 7853,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\n\t\"github.com/julienschmidt/httprouter\"\n\n\t\"github.c"
},
{
"path": "cmd/integration-test/http.go",
"chars": 56154,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/http/httputil\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\""
},
{
"path": "cmd/integration-test/integration-test.go",
"chars": 8630,
"preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/kitabisa/go-ci\"\n\t\"gi"
},
{
"path": "cmd/integration-test/interactsh.go",
"chars": 876,
"preview": "package main\n\nimport osutils \"github.com/projectdiscovery/utils/os\"\n\n// All Interactsh related testcases\nvar interactshT"
},
{
"path": "cmd/integration-test/javascript.go",
"chars": 14723,
"preview": "package main\n\nimport (\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/ory/dockertest/v3\"\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testu"
},
{
"path": "cmd/integration-test/library.go",
"chars": 4864,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"git"
},
{
"path": "cmd/integration-test/loader.go",
"chars": 7143,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/julienschmidt/httprouter\"\n"
},
{
"path": "cmd/integration-test/matcher-status.go",
"chars": 4781,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strings\"\n\n\t\"github.com/julienschmidt/httprouter\"\n\t\"gith"
},
{
"path": "cmd/integration-test/multi.go",
"chars": 767,
"preview": "package main\n\nimport (\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar multiProtoTestcases = []TestCaseInf"
},
{
"path": "cmd/integration-test/network.go",
"chars": 6277,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n\to"
},
{
"path": "cmd/integration-test/offline-http.go",
"chars": 1531,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar offlineHttpTestcases = []Te"
},
{
"path": "cmd/integration-test/profile-loader.go",
"chars": 1662,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n\t\"github.com/projectdiscovery/util"
},
{
"path": "cmd/integration-test/ssl.go",
"chars": 3987,
"preview": "package main\n\nimport (\n\t\"crypto/tls\"\n\t\"net\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar sslTestcases "
},
{
"path": "cmd/integration-test/template-dir.go",
"chars": 812,
"preview": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n\t\"github.com/projectdiscovery/utils"
},
{
"path": "cmd/integration-test/template-path.go",
"chars": 2199,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/catalog/config\"\n\t\"github.com/proje"
},
{
"path": "cmd/integration-test/templates-dir-env.go",
"chars": 7291,
"preview": "package main\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\tosutils \"github.com/projectdiscovery/utils/os\"\n\n\t\"github.com/projectdisc"
},
{
"path": "cmd/integration-test/websocket.go",
"chars": 2856,
"preview": "package main\n\nimport (\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/gobwas/ws/wsutil\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/te"
},
{
"path": "cmd/integration-test/whois.go",
"chars": 502,
"preview": "package main\n\nimport (\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/testutils\"\n)\n\nvar whoisTestCases = []TestCaseInfo{\n\t{"
},
{
"path": "cmd/integration-test/workflow.go",
"chars": 10740,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strings\"\n\n\t\"github.com/julienschmidt/httpr"
},
{
"path": "cmd/memogen/function.tpl",
"chars": 793,
"preview": "// Warning - This is generated code\npackage {{.SourcePackage}}\n\nimport (\n \"github.com/projectdiscovery/utils/memoize\""
},
{
"path": "cmd/memogen/memogen.go",
"chars": 1574,
"preview": "// this small cli tool is specific for those functions with arbitrary parameters and with result-error tuple as return v"
},
{
"path": "cmd/nuclei/issue-tracker-config.yaml",
"chars": 8605,
"preview": "# global allow/deny list. this will affect both exporters\n# as well as issue trackers. you can filter trackers with\n# a "
},
{
"path": "cmd/nuclei/main.go",
"chars": 46219,
"preview": "package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"runtim"
},
{
"path": "cmd/nuclei/main_benchmark_test.go",
"chars": 5292,
"preview": "package main_test\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"strings\"\n\t\"testi"
},
{
"path": "cmd/nuclei/testdata/benchmark/multiproto/basic-template-multiproto-mixed.yaml",
"chars": 6053,
"preview": "id: basic-template-multiproto-mixed\n\ninfo:\n name: Test Template Multiple Protocols (Mixed)\n author: pdteam\n severity:"
},
{
"path": "cmd/nuclei/testdata/benchmark/multiproto/basic-template-multiproto-raw.yaml",
"chars": 8930,
"preview": "id: basic-template-multiproto-raw\n\ninfo:\n name: Test Template Multiple Protocols RAW\n author: pdteam\n severity: info\n"
},
{
"path": "cmd/nuclei/testdata/benchmark/multiproto/basic-template-multiproto.yaml",
"chars": 2670,
"preview": "id: basic-template-multiproto\n\ninfo:\n name: Test Template Multiple Protocols\n author: pdteam\n severity: info\n\nhttp:\n "
},
{
"path": "cmd/scan-charts/main.go",
"chars": 665,
"preview": "package main\n\nimport (\n\t\"flag\"\n\n\t\"github.com/projectdiscovery/nuclei/v3/pkg/scan/charts\"\n)\n\nvar (\n\tdir string\n\taddre"
},
{
"path": "cmd/tmc/main.go",
"chars": 14295,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.c"
},
{
"path": "cmd/tmc/types.go",
"chars": 3058,
"preview": "package main\n\ntype Mark struct {\n\tName string `json:\"name,omitempty\"`\n\tPosition int `json:\"position,omitempty\"`\n\t"
},
{
"path": "cmd/tools/fuzzplayground/main.go",
"chars": 561,
"preview": "package main\n\nimport (\n\t\"flag\"\n\n\t_ \"github.com/mattn/go-sqlite3\"\n\t\"github.com/projectdiscovery/gologger\"\n\t\"github.com/pr"
},
{
"path": "cmd/tools/signer/main.go",
"chars": 3798,
"preview": "package main\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/projectdiscovery/go"
},
{
"path": "examples/advanced/advanced.go",
"chars": 1560,
"preview": "package main\n\nimport (\n\t\"context\"\n\n\tnuclei \"github.com/projectdiscovery/nuclei/v3/lib\"\n\t\"github.com/projectdiscovery/nuc"
},
{
"path": "examples/simple/simple.go",
"chars": 622,
"preview": "package main\n\nimport (\n\t\"context\"\n\n\tnuclei \"github.com/projectdiscovery/nuclei/v3/lib\"\n)\n\nfunc main() {\n\tne, err := nucl"
},
{
"path": "examples/with_speed_control/main.go",
"chars": 3239,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\tnuclei \"github.com/projectdiscovery/nuclei/v3/lib\"\n\t\"github.c"
},
{
"path": "gh_retry.sh",
"chars": 2996,
"preview": "#!/bin/bash\n\n# This script is used to retry failed workflows in github actions.\n# It uses gh cli to fetch the failed wor"
},
{
"path": "go.mod",
"chars": 21433,
"preview": "module github.com/projectdiscovery/nuclei/v3\n\ngo 1.25.7\n\nrequire (\n\tgithub.com/Knetic/govaluate v3.0.1-0.20171022003610-"
},
{
"path": "go.sum",
"chars": 158043,
"preview": "aead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9TbuSxchxwhpA9zEb9YXcVGoE8JakuiGaIQ=\naead.dev/minisign v0.3.0 h1:8Xafzy5PEVZq"
},
{
"path": "helm/Chart.yaml",
"chars": 118,
"preview": "apiVersion: v2\nname: nuclei\ndescription: A Helm chart for Nuclei\ntype: application\nversion: 0.1.0\nappVersion: \"2.5.7\"\n"
},
{
"path": "helm/templates/NOTES.txt",
"chars": 1820,
"preview": "1. Get the application URL by running these commands:\n{{- if .Values.interactsh.ingress.enabled }}\n{{- range $host := .V"
},
{
"path": "helm/templates/_helpers.tpl",
"chars": 1772,
"preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"nuclei.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trun"
},
{
"path": "helm/templates/hpa.yaml",
"chars": 924,
"preview": "{{- if .Values.autoscaling.enabled }}\napiVersion: autoscaling/v2beta1\nkind: HorizontalPodAutoscaler\nmetadata:\n name: {{"
},
{
"path": "helm/templates/interactsh-deployment.yaml",
"chars": 1988,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"nuclei.fullname\" . }}-interactsh\n labels:\n {{- in"
},
{
"path": "helm/templates/interactsh-ingress.yaml",
"chars": 2259,
"preview": "{{- if .Values.interactsh.ingress.enabled -}}\n{{- $fullName := include \"nuclei.fullname\" . -}}\n{{- $svcPort := .Values.i"
},
{
"path": "helm/templates/interactsh-service.yaml",
"chars": 384,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: {{ .Values.interactsh.service.name }}\n labels:\n {{- include \"nuclei.l"
},
{
"path": "helm/templates/nuclei-configmap.yaml",
"chars": 273,
"preview": "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: nuclei-conf\ndata:\n nuclei.conf: |-\n{{ .Values.nuclei.config | inde"
},
{
"path": "helm/templates/nuclei-cron.yaml",
"chars": 1079,
"preview": "{{- if .Values.nuclei.enabled -}}\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n name: {{ .Chart.Name }}-nuclei-cron\nspe"
},
{
"path": "helm/templates/serviceaccount.yaml",
"chars": 318,
"preview": "{{- if .Values.serviceAccount.create -}}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: {{ include \"nuclei.servic"
},
{
"path": "helm/values.yaml",
"chars": 2906,
"preview": "# Default values for nuclei.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your templates.\n\nrep"
},
{
"path": "integration_tests/debug.sh",
"chars": 1254,
"preview": "#!/bin/bash\n\nif [ $1 = \"-h\" ]; then\n echo \"Help for ./debug.sh\"\n printf \"\\n1. To run all integration tests of 'x' protoc"
},
{
"path": "integration_tests/dsl/hide-version-warning.yaml",
"chars": 322,
"preview": "id: basic-example\n\ninfo:\n name: Test HTTP Template\n author: pdteam\n severity: info\n reference: |\n test case for d"
},
{
"path": "integration_tests/dsl/show-version-warning.yaml",
"chars": 331,
"preview": "id: basic-example\n\ninfo:\n name: Test HTTP Template\n author: pdteam\n severity: info\n reference: |\n test case where"
},
{
"path": "integration_tests/flow/conditional-flow-negative.yaml",
"chars": 382,
"preview": "id: ghost-blog-detection\ninfo:\n name: Ghost blog detection\n author: pdteam\n severity: info\n\n\nflow: dns() && http()\n\nd"
},
{
"path": "integration_tests/flow/conditional-flow.yaml",
"chars": 386,
"preview": "id: ghost-blog-detection\ninfo:\n name: Ghost blog detection\n author: pdteam\n severity: info\n\n\nflow: dns() && http()\n\nd"
},
{
"path": "integration_tests/flow/dns-ns-probe.yaml",
"chars": 770,
"preview": "id: dns-ns-probe\n\ninfo:\n name: Nuclei flow dns ns probe\n author: pdteam\n severity: info\n description: Description of"
},
{
"path": "integration_tests/flow/flow-hide-matcher.yaml",
"chars": 483,
"preview": "id: flow-hide-matcher\n\ninfo:\n name: Test Flow Hide Matcher\n author: pdteam\n severity: info\n description: In Template"
},
{
"path": "integration_tests/flow/iterate-one-value-flow.yaml",
"chars": 781,
"preview": "id: flow-iterate-one-value-flow\n\ninfo:\n name: Test Flow Iterate One Value Flow\n author: pdteam\n severity: info\n desc"
},
{
"path": "integration_tests/flow/iterate-values-flow.yaml",
"chars": 648,
"preview": "id: extract-emails\n\ninfo:\n name: Extract Email IDs from Response\n author: pdteam\n severity: info\n\n\nflow: |\n http(1)\n"
},
{
"path": "integration_tests/fuzz/fuzz-body-generic-sqli.yaml",
"chars": 905,
"preview": "id: fuzz-body-generic\n\ninfo:\n name: fuzzing error sqli payloads in http req body\n author: pdteam\n severity: info\n de"
},
{
"path": "integration_tests/fuzz/fuzz-body-json-sqli.yaml",
"chars": 1005,
"preview": "id: json-body-error-sqli\n\ninfo:\n name: fuzzing error sqli payloads in json body\n author: pdteam\n severity: info\n des"
},
{
"path": "integration_tests/fuzz/fuzz-body-multipart-form-sqli.yaml",
"chars": 1164,
"preview": "id: body-multipart-error-sqli\n\ninfo:\n name: fuzzing error sqli payloads in body of multipart form data\n author: pdteam"
},
{
"path": "integration_tests/fuzz/fuzz-body-params-sqli.yaml",
"chars": 1146,
"preview": "id: body-params-error-sqli\n\ninfo:\n name: fuzzing error sqli payloads in body with params\n author: pdteam\n severity: i"
},
{
"path": "integration_tests/fuzz/fuzz-body-xml-sqli.yaml",
"chars": 1000,
"preview": "id: xml-body-error-sqli\n\ninfo:\n name: fuzzing error sqli payloads in xml body\n author: pdteam\n severity: info\n descr"
},
{
"path": "integration_tests/fuzz/fuzz-body.yaml",
"chars": 829,
"preview": "id: fuzz-body\n\ninfo:\n name: fuzzing error sqli payloads in http req body\n author: pdteam\n severity: info\n descriptio"
},
{
"path": "integration_tests/fuzz/fuzz-cookie-error-sqli.yaml",
"chars": 1304,
"preview": "id: cookie-fuzzing-error-sqli\n\ninfo:\n name: fuzzing error sqli payloads in cookie\n author: pdteam\n severity: info\n d"
},
{
"path": "integration_tests/fuzz/fuzz-headless.yaml",
"chars": 509,
"preview": "id: headless-query-fuzzing\n\ninfo:\n name: Example Query Fuzzing\n author: pdteam\n severity: info\n\nheadless:\n - steps:\n"
},
{
"path": "integration_tests/fuzz/fuzz-host-header-injection.yaml",
"chars": 983,
"preview": "id: host-header-injection\n\ninfo:\n name: Host Header Injection\n author: pdteam\n severity: info\n description: Host hea"
},
{
"path": "integration_tests/fuzz/fuzz-mode.yaml",
"chars": 473,
"preview": "id: fuzz-query\n\ninfo:\n name: Basic Fuzz URL Query\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n path:\n "
},
{
"path": "integration_tests/fuzz/fuzz-multi-mode.yaml",
"chars": 468,
"preview": "id: fuzz-multi-mode-test\n\ninfo:\n name: multi-mode fuzzing test\n author: pdteam\n severity: info\n\nhttp:\n - payloads:\n "
},
{
"path": "integration_tests/fuzz/fuzz-path-sqli.yaml",
"chars": 955,
"preview": "id: path-based-sqli\n\ninfo:\n name: Path Based SQLi\n author: pdteam\n severity: info\n description: |\n This template "
},
{
"path": "integration_tests/fuzz/fuzz-query-num-replace.yaml",
"chars": 718,
"preview": "id: fuzz-query-num\n\ninfo:\n name: Fuzz Query Param For IDOR\n author: pdteam\n severity: info\n description: Query Value"
},
{
"path": "integration_tests/fuzz/fuzz-query.yaml",
"chars": 464,
"preview": "id: fuzz-query\n\ninfo:\n name: Basic Fuzz URL Query\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n path:\n "
},
{
"path": "integration_tests/fuzz/fuzz-type.yaml",
"chars": 463,
"preview": "id: fuzz-type\n\ninfo:\n name: Basic Fuzz URL Query\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n path:\n "
},
{
"path": "integration_tests/fuzz/testData/ginandjuice.proxify.yaml",
"chars": 25572,
"preview": "timestamp: 2024-02-20T19:24:13+05:30\nurl: http://127.0.0.1:8082/blog/post?postId=3&source=proxify\nrequest:\n header:\n "
},
{
"path": "integration_tests/generic/auth/certificate/assets/client.crt",
"chars": 1127,
"preview": "-----BEGIN CERTIFICATE-----\nMIIDEzCCAfsCFBDZsFEIb3QwKLzXLoqR/oaDwakYMA0GCSqGSIb3DQEBCwUAMEUx\nCzAJBgNVBAYTAkFVMRMwEQYDVQQ"
},
{
"path": "integration_tests/generic/auth/certificate/assets/client.key",
"chars": 1704,
"preview": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCp8/P9JAyE90Zr\nE1LZcJ/B24f79aazY8S/eeRRZsT"
},
{
"path": "integration_tests/generic/auth/certificate/assets/server.crt",
"chars": 1127,
"preview": "-----BEGIN CERTIFICATE-----\nMIIDEzCCAfsCFC21Zw7U0tGDyLyMalwfo9cWbL6dMA0GCSqGSIb3DQEBCwUAMEUx\nCzAJBgNVBAYTAkFVMRMwEQYDVQQ"
},
{
"path": "integration_tests/generic/auth/certificate/http-get.yaml",
"chars": 215,
"preview": "id: basic-get-with-cert\n\ninfo:\n name: Basic GET with Cert\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n "
},
{
"path": "integration_tests/library/test.json",
"chars": 449,
"preview": "{\n \"id\": \"go-integration-test\",\n \"info\": {\n \"name\": \"Basic Go Integration Test\",\n \"author\": \"pdteam\",\n \"sever"
},
{
"path": "integration_tests/library/test.yaml",
"chars": 281,
"preview": "id: go-integration-test\n\ninfo:\n name: Basic Go Integration Test\n author: pdteam\n severity: info\n\nhttp:\n - method: GE"
},
{
"path": "integration_tests/loader/basic.yaml",
"chars": 176,
"preview": "id: workflow-example\n\ninfo:\n name: Test Workflow Template\n author: pdteam\n severity: info\n\nworkflows:\n - template: w"
},
{
"path": "integration_tests/loader/condition-matched.yaml",
"chars": 212,
"preview": "id: condition-matched-workflow\n\ninfo:\n name: Condition Matched Workflow\n author: pdteam\n severity: info\n\nworkflows:\n "
},
{
"path": "integration_tests/loader/excluded-template.yaml",
"chars": 250,
"preview": "id: excluded-template\n\ninfo:\n name: Basic Excluded Template\n author: pdteam\n severity: info\n tags: fuzz\n\nhttp:\n - m"
},
{
"path": "integration_tests/loader/get-headers.yaml",
"chars": 279,
"preview": "id: basic-get-headers\n\ninfo:\n name: Basic GET Headers Request\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n"
},
{
"path": "integration_tests/loader/get.yaml",
"chars": 223,
"preview": "id: basic-get\n\ninfo:\n name: Basic GET Request\n author: pdteam\n severity: info\n\nhttp:\n - method: GET\n path:\n "
},
{
"path": "integration_tests/loader/template-list.yaml",
"chars": 40,
"preview": "loader/get.yaml\nloader/get-headers.yaml\n"
},
{
"path": "integration_tests/loader/workflow-list.yaml",
"chars": 48,
"preview": "loader/basic.yaml\nloader/condition-matched.yaml\n"
},
{
"path": "integration_tests/profile-loader/basic.yml",
"chars": 13,
"preview": "tags:\n - kev"
},
{
"path": "integration_tests/protocols/code/pre-condition.yaml",
"chars": 530,
"preview": "id: pre-condition-code\n\ninfo:\n name: example code template\n author: pdteam\n severity: info\n\n\nself-contained: true\n\nva"
},
{
"path": "integration_tests/protocols/code/ps1-snippet.yaml",
"chars": 478,
"preview": "id: ps1-code-snippet\n\ninfo:\n name: ps1-code-snippet\n author: pdteam\n severity: info\n tags: code\n description: |\n "
},
{
"path": "integration_tests/protocols/code/pwsh-echo.yaml",
"chars": 486,
"preview": "id: pw-echo\n\ninfo:\n name: PowerShell Echo Test\n author: pdteam\n severity: info\n description: Tests PowerShell execut"
},
{
"path": "integration_tests/protocols/code/py-env-var.yaml",
"chars": 569,
"preview": "id: py-code-snippet\n\ninfo:\n name: py-code-snippet\n author: pdteam\n severity: info\n tags: code\n description: |\n p"
},
{
"path": "integration_tests/protocols/code/py-file.yaml",
"chars": 471,
"preview": "id: py-file\n\ninfo:\n name: py-file\n author: pdteam\n severity: info\n tags: code\n description: |\n py-file\n\ncode:\n "
},
{
"path": "integration_tests/protocols/code/py-interactsh.yaml",
"chars": 646,
"preview": "id: testcode\n\ninfo:\n name: testcode\n author: testcode\n severity: info\n tags: code\n description: |\n testcode\n\nvar"
},
{
"path": "integration_tests/protocols/code/py-nosig.yaml",
"chars": 310,
"preview": "id: py-nosig\n\ninfo:\n name: py-nosig\n author: pdteam\n severity: info\n tags: code\n description: |\n Python code wit"
},
{
"path": "integration_tests/protocols/code/py-snippet.yaml",
"chars": 552,
"preview": "id: py-code-snippet\n\ninfo:\n name: py-code-snippet\n author: pdteam\n severity: info\n tags: code\n description: |\n p"
},
{
"path": "integration_tests/protocols/code/py-virtual.yaml",
"chars": 513,
"preview": "id: signed-python-code-in-virtual-env\n\ninfo:\n name: signed-python-code-in-virtual-env\n author: pdteam\n severity: info"
},
{
"path": "integration_tests/protocols/code/pyfile.py",
"chars": 50,
"preview": "import sys\nprint(\"hello from \" + sys.stdin.read())"
},
{
"path": "integration_tests/protocols/code/sh-virtual.yaml",
"chars": 624,
"preview": "id: signed-code-in-virtual-env\n\ninfo:\n name: signed-code-in-virtual-env\n author: pdteam\n severity: info\n tags: code\n"
},
{
"path": "integration_tests/protocols/code/unsigned.yaml",
"chars": 322,
"preview": "id: unsigned-code-snippet\n\ninfo:\n name: unsigned-code-snippet\n author: pdteam\n severity: info\n tags: code\n descript"
},
{
"path": "integration_tests/protocols/dns/a.yaml",
"chars": 259,
"preview": "id: dns-a-query-example\n\ninfo:\n name: Test DNS A Query Template\n author: pdteam\n severity: info\n\ndns:\n - name: \"{{FQ"
},
{
"path": "integration_tests/protocols/dns/aaaa.yaml",
"chars": 281,
"preview": "id: dns-aaaa-query-example\n\ninfo:\n name: Test DNS AAAA Query Template\n author: pdteam\n severity: info\n\ndns:\n - name:"
},
{
"path": "integration_tests/protocols/dns/caa.yaml",
"chars": 312,
"preview": "id: caa-fingerprinting\n\ninfo:\n name: CAA Fingerprint\n author: pdteam\n severity: info\n tags: dns,caa\n\ndns:\n - name: "
},
{
"path": "integration_tests/protocols/dns/cname-fingerprint.yaml",
"chars": 319,
"preview": "id: cname-fingerprint\n\ninfo:\n name: CNAME Fingerprint\n author: pdteam\n severity: info\n tags: dns,cname\n\ndns:\n - nam"
},
{
"path": "integration_tests/protocols/dns/cname.yaml",
"chars": 287,
"preview": "id: dns-cname-query-example\n\ninfo:\n name: Test DNS CNAME Query Template\n author: pdteam\n severity: info\n\ndns:\n - nam"
},
{
"path": "integration_tests/protocols/dns/dsl-matcher-variable.yaml",
"chars": 313,
"preview": "id: dns-template\n\ninfo:\n name: basic dns template\n author: pdteam\n severity: info\n\ndns:\n - name: \"{{FQDN}}\"\n type"
},
{
"path": "integration_tests/protocols/dns/ns.yaml",
"chars": 275,
"preview": "id: dns-ns-query-example\n\ninfo:\n name: Test DNS NS Query Template\n author: pdteam\n severity: info\n\ndns:\n - name: \"{{"
},
{
"path": "integration_tests/protocols/dns/payload.yaml",
"chars": 420,
"preview": "id: dns-attack\n\ninfo:\n name: basic dns template\n author: pdteam\n severity: info\n\n\ndns:\n - name: \"{{subdomain_wordlis"
},
{
"path": "integration_tests/protocols/dns/ptr.yaml",
"chars": 309,
"preview": "id: ptr-fingerprint\n\ninfo:\n name: PTR Fingerprint\n author: pdteam\n severity: info\n tags: dns,ptr\n\ndns:\n - name: \"{{"
},
{
"path": "integration_tests/protocols/dns/srv.yaml",
"chars": 277,
"preview": "id: dns-a-query-example\n\ninfo:\n name: Test DNS SRV Query Template\n author: pdteam\n severity: info\n\ndns:\n - name: \"{{"
},
{
"path": "integration_tests/protocols/dns/tlsa.yaml",
"chars": 318,
"preview": "id: tlsa-fingerprinting\n\ninfo:\n name: TLSA Fingerprint\n author: pdteam\n severity: info\n tags: dns,tlsa\n\ndns:\n - nam"
},
{
"path": "integration_tests/protocols/dns/txt.yaml",
"chars": 279,
"preview": "id: dns-txt-query-example\n\ninfo:\n name: Test DNS TXT Query Template\n author: pdteam\n severity: info\n\ndns:\n - name: \""
},
{
"path": "integration_tests/protocols/dns/variables.yaml",
"chars": 270,
"preview": "id: variables-example\n\ninfo:\n name: Variables Example\n author: pdteam\n severity: info\n\nvariables:\n a1: \"IN\"\n\ndns:\n "
},
{
"path": "integration_tests/protocols/file/data/test1.txt",
"chars": 7,
"preview": "AAA\nBBB"
},
{
"path": "integration_tests/protocols/file/data/test2.txt",
"chars": 7,
"preview": "CCC\nDDD"
},
{
"path": "integration_tests/protocols/file/data/test3.txt",
"chars": 17,
"preview": "11 EE 11\n11 FF 11"
},
{
"path": "integration_tests/protocols/file/extract.yaml",
"chars": 221,
"preview": "id: file-extract\n\ninfo:\n name: File with Extractor\n author: pdteam\n severity: info\n tags: file\n\nfile:\n - extensions"
},
{
"path": "integration_tests/protocols/file/matcher-with-and.yaml",
"chars": 291,
"preview": "id: file-matcher-with-and\n\ninfo:\n name: File Matcher With AND\n author: pdteam\n severity: info\n tags: file\n\nfile:\n -"
},
{
"path": "integration_tests/protocols/file/matcher-with-nested-and.yaml",
"chars": 266,
"preview": "id: file-matcher-with-nested-and\n\ninfo:\n name: File Matcher With nested AND\n author: pdteam\n severity: info\n tags: f"
},
{
"path": "integration_tests/protocols/file/matcher-with-or.yaml",
"chars": 259,
"preview": "id: file-matcher-with-or\n\ninfo:\n name: File Matcher With OR\n author: pdteam\n severity: info\n tags: file\n\nfile:\n - e"
},
{
"path": "integration_tests/protocols/headless/file-upload-negative.yaml",
"chars": 589,
"preview": "id: file-upload\n# template for testing when file upload is disabled\ninfo:\n name: Basic File Upload\n author: pdteam\n s"
},
{
"path": "integration_tests/protocols/headless/file-upload.yaml",
"chars": 548,
"preview": "id: file-upload\n\ninfo:\n name: Basic File Upload\n author: pdteam\n severity: info\n\nheadless:\n - steps:\n - action: n"
},
{
"path": "integration_tests/protocols/headless/headless-basic.yaml",
"chars": 292,
"preview": "id: headless-basic\ninfo:\n name: Headless Basic\n author: pdteam\n severity: info\n tags: headless\n\nheadless:\n - steps:"
},
{
"path": "integration_tests/protocols/headless/headless-dsl.yaml",
"chars": 329,
"preview": "id: headless-dsl\n\ninfo:\n name: Headless DSL\n author: dwisiswant0\n severity: info\n tags: headless\n\nheadless:\n - step"
},
{
"path": "integration_tests/protocols/headless/headless-extract-values.yaml",
"chars": 703,
"preview": "\nid: headless-extract-values\ninfo:\n name: Headless Extract Value\n author: pdteam\n severity: info\n tags: headless\n\nhe"
},
{
"path": "integration_tests/protocols/headless/headless-header-action.yaml",
"chars": 407,
"preview": "id: headless-header-action\ninfo:\n name: Headless Header Action\n author: pdteam\n severity: info\n tags: headless\n\nhead"
},
{
"path": "integration_tests/protocols/headless/headless-header-status-test.yaml",
"chars": 401,
"preview": "id: headless-header-status-test\n\ninfo:\n name: headless header + status test\n author: pdteam\n severity: info\n\nheadless"
},
{
"path": "integration_tests/protocols/headless/headless-local.yaml",
"chars": 210,
"preview": "id: nuclei-headless-local\n\ninfo:\n name: Nuclei Headless Local\n author: pdteam\n severity: high\n\nheadless:\n - steps: \n"
},
{
"path": "integration_tests/protocols/headless/headless-payloads.yaml",
"chars": 425,
"preview": "id: headless-payloads\n\ninfo:\n name: headless payloads example\n author: pdteam\n severity: info\n tags: headless\n\nheadl"
},
{
"path": "integration_tests/protocols/headless/headless-self-contained.yaml",
"chars": 367,
"preview": "id: headless-self-contained\ninfo:\n name: Headless Self Contained\n author: pdteam\n severity: info\n tags: headless\n\nse"
},
{
"path": "integration_tests/protocols/headless/headless-waitevent.yaml",
"chars": 454,
"preview": "id: headless-waitevent\n\ninfo:\n name: WaitEvent\n severity: info\n author: pdteam\n\nheadless:\n - steps:\n # no"
},
{
"path": "integration_tests/protocols/headless/variables.yaml",
"chars": 312,
"preview": "id: variables-example\n\ninfo:\n name: Variables Example\n author: pdteam\n severity: info\n\nvariables:\n a1: \"{{base64('he"
},
{
"path": "integration_tests/protocols/http/annotation-timeout.yaml",
"chars": 290,
"preview": "id: annotation-timeout\n\ninfo:\n name: Basic Annotation Timeout\n author: pdteam\n severity: info\n\nhttp:\n - raw:\n -"
},
{
"path": "integration_tests/protocols/http/cl-body-with-header.yaml",
"chars": 259,
"preview": "id: cl-body-with-header\n\ninfo:\n name: CL Get Request - Body with header\n author: pdteam\n severity: info\n\nhttp:\n - me"
},
{
"path": "integration_tests/protocols/http/cl-body-without-header.yaml",
"chars": 245,
"preview": "id: cl-body-without-header\n\ninfo:\n name: CL Get Request - Body without header\n author: pdteam\n severity: info\n\nhttp:\n"
},
{
"path": "integration_tests/protocols/http/cli-with-constants.yaml",
"chars": 276,
"preview": "id: cli-with-constants\n\ninfo:\n name: Cli Var with Constants\n author: pdteam\n severity: info\n\nconstants:\n test: test-"
},
{
"path": "integration_tests/protocols/http/constants-with-threads.yaml",
"chars": 505,
"preview": "id: constants-with-threads\n\ninfo:\n name: Constants with Threads\n author: pdteam\n severity: info\n description: |\n "
}
]
// ... and 811 more files (download for full content)
About this extraction
This page contains the full source code of the projectdiscovery/nuclei GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1011 files (4.2 MB), approximately 1.2M tokens, and a symbol index with 4633 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.