You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: templates/protocols/http/fuzzing-overview.mdx
+73-2Lines changed: 73 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ sidebarTitle: "Overview"
6
6
7
7
Nuclei supports fuzzing of HTTP requests based on rules defined in the `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**.
8
8
9
-
## pre-condition
9
+
###pre-condition
10
10
11
11
More often than not, we want to only attempt fuzzing on those requests where it makes sense. For example,
12
12
@@ -75,6 +75,26 @@ fuzzing:
75
75
- part: body # fuzz parameters in body
76
76
```
77
77
78
+
#### Special Part
79
+
80
+
**request** - fuzz the entire request (all parts mentioned above)
81
+
82
+
```yaml
83
+
fuzzing:
84
+
- part: request # fuzz entire request
85
+
```
86
+
87
+
#### Multiple selective parts
88
+
89
+
Multiple parts can be selected for fuzzing by defining a `parts` field which is the plural of above allowing selected multiple parts to be fuzzed.
90
+
91
+
```yaml
92
+
fuzzing:
93
+
- parts:
94
+
- query
95
+
- body
96
+
- header
97
+
```
78
98
79
99
### Type
80
100
@@ -281,7 +301,58 @@ http:
281
301
- "{{reflection}}"
282
302
```
283
303
284
-
## Example **Fuzzing** template
304
+
### Analyzer
305
+
306
+
Analyzers is a new concept introduced in nuclei fuzzing which allow the engine to make additional verification requests based on a certain logic to verify the vulnerability.
307
+
308
+
#### time_delay
309
+
310
+
The `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
311
+
312
+
```yaml
313
+
# Create a new time delay analyzer
314
+
analyzer:
315
+
name: time_delay
316
+
# Optionally, you can define parameters for the
317
+
# analyzer like below.
318
+
#
319
+
# the defaults are good enough for most use cases.
320
+
parameters:
321
+
sleep_duration: 10 # sleep for 10 seconds (default: 5)
322
+
requests_limit: 6 # make 6 verification requests (default: 4)
323
+
time_correlation_error_range: 0.30 # error range for time correlation (default: 0.15)
324
+
time_slope_error_range: 0.40 # error range for time slope (default: 0.30)
325
+
```
326
+
327
+
The following dynamic placeholders are available in payloads with `time_delay` analyzer.
328
+
329
+
- `[SLEEPTIME]`- The sleep time in seconds for the time delay analyzer.
330
+
- `[INFERENCE]`- The inference condition (%d=%d) for the time delay analyzer.
331
+
332
+
These values are substituted at runtime with the actual values for the analyzer. The following is how a usual verification process looks.
333
+
334
+
1. Send the request with the payload to the target with 5 second delay.
335
+
2. If the response time is less than 5, do nothing.
336
+
3. Send the request to the analyzer which queues ith with 5 seconds delay.
337
+
4. Next a 1 second delay
338
+
5. Next a 5 second delay
339
+
6. Finally, the last 1 second delay.
340
+
341
+
If the response time is controllable, the analyzer will report the vulnerability.
342
+
343
+
Matching for the analyzer matches is pretty straightforward as well. Simiar to interactsh, you can use `part: analyzer` to match the analyzer response.
344
+
345
+
```yaml
346
+
matchers:
347
+
- type: word
348
+
part: analyzer
349
+
words:
350
+
- "true"
351
+
```
352
+
353
+
Optionally, you can also extract the `analyzer_details` from the analyzer for matches.
354
+
355
+
### Example **Fuzzing** template
285
356
286
357
An example sample template for fuzzing XSS vulnerabilities is provided below.
0 commit comments