Nuclei

Notes from my practice but also from XSSrat course

Nuclei is an open source and community powered vulnerability scanner.

Installation

Nuclei requires the latest version of GO

The easy way

  • sudo apt update

  • sudo apt install nuclei

Or you can install Go first and then nuclei as follows as per the official documentation.

Official way

Install Go

  • $ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz

  • export PATH=$PATH:/usr/local/go/bin (put this in $HOME/.profile or /etc/profile)

  • More info here

  • go env -w GOPATH=$HOME/go

  • More info here

Install go with snapd

  • sudo systemctl start snapd

  • sudo snap install go --classic

Install Nuclei

  • go install -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest

Install with Brew

Install brew

  • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  • Add Homebrew to your PATH

    • (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/gabrielle/.profile

    • eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

  • Install gcc (recommended by brew)

    • brew install gcc

Install nuclei

  • brew install nuclei

Run nuclei

  • nuclei -u https://example.com/ (it can be an url or an host)

Cheat Sheet

  • Update templates nuclei -ut

  • Launch scan on 10.10.2.4 nuclei -v -t ssh-pass-auth.yaml 10.10.2.4

  • Validate your template will work nuclei -t template.yaml -validate

  • Launch a specific template against a target nuclei -v -t ssh-auth-methods.yaml -u <target-ip_or_file-with-target-list>

Nuclei Templates

Anatomy of a template

  • ID

  • Metadata

    • Name author description tag

  • Requests

    • Method

    • Path

    • Redirects:TRUE

    • MAX-REDIRECTS:3

Dynamic variables

  • GE{{BASEURL}} Replaced on runtime with the input url (target file)

  • {{ROOTURL}} Replaced on runtime by root url (target file)

  • {{HOSTNAME}} Replaced on runtime by hostname including port of the target

  • {{HOST}} Replaced on runtime in the request by host (target file)

  • {{PORT}} Replaced on runtime by input port (target file)

  • {{PATH}} Replaced on runtime by input path (target file)

Last updated