Learn about fuzzing HTTP requests with Nuclei
fuzzing
section of the HTTP request. This allows creating templates for generic Web Application vulnerabilities like SQLi, SSRF, CMDi, etc without any information of the target like a classic web fuzzer. We call this concept as Fuzzing for Unknown Vulnerabilities.
pre-condition
section which contains conditions when the fuzzing template should be executed.
pre-condition can be considered a twin of matchers in nuclei. They support all matcher types, including DSL, and the only difference is that this serves a different purpose.
For example, to only execute template on POST request with some body, you can use the following filter.
default
) - fuzz query parameters for URL
parts
field which is the plural of above allowing selected multiple parts to be fuzzed.
default
) - replace the value with payloadkey
and value
pairs. This allows users to fuzz based on the key or value of the request part.
For example, Below sample HTTP request can be abstracted as key-value pairs as shown below.
part: Query
key | value |
---|---|
token | x0x0x0 |
source | app |
part: Path
key | value |
---|---|
value | /reset-password |
part: Header
key | value |
---|---|
Host | 127.0.0.1:8082 |
User-Agent | Go-http-client/1.1 |
Content-Length | 23 |
Content-Type | application/json |
Accept-Encoding | gzip |
Connection | close |
part: Cookie
key | value |
---|---|
PHPSESSID | 1234567890 |
part: Body
key | value |
---|---|
password | 12345678 |
value
and value as the entire Body.
key | value |
---|---|
value | ”\x08\x96\x01\x12\x07\x74” |
default
) - replace all values at onceNote: default values are set/used when other options are not defined.
type
for a parameter. It supports payloads, DSL functions, etc and allows users to fully utilize the existing nuclei feature-set for fuzzing purposes.
time_delay
analyzer verifies that the response time of the request is controllable by the fuzzed payload. It uses a Linear Regression algorithm ported from ZAP with alternating requests to determine the server time is actually controllable rather than just noise. You can configure it like so
time_delay
analyzer.
[SLEEPTIME]
- The sleep time in seconds for the time delay analyzer.[INFERENCE]
- The inference condition (%d=%d) for the time delay analyzer.part: analyzer
to match the analyzer response.
analyzer_details
from the analyzer for matches.