This part will be executed before parsing request input with the signature for generate variation request base on the original request. Generator only available in type: fuzz
signature.
API Generator | Description | Example |
---|---|---|
Method | Gen request based on method | Method("PUT") , Method() |
Query | Gen request based on Query String | Query("[[.original]]{{.payload}}") , Query("[[.original]]{{.payload}}", "new") |
Path | Gen request based on Path of URL | Path("{{.payload}}", "ext") |
Body | Gen request based on Request Body | Body("[[.original]]{{.payload}}") |
Header | Gen request based on Request Header | Header("[[.original]]{{.payload}}", "X-Sample") |
Cookie | Gen request based on Cookie Header | Cookie("{{.payload}}", "sample") , Cookie("[[.original]]{{.payload}}") |
id: sqli-01-01
info:
name: SQL Injection Error based
risk: Critical
type: fuzz
payloads:
- '''"'
- '`}'
requests:
- generators:
- Query("{{.payload}}")
detections:
- StringSearch("response", "mysql_fetch_array")
- generators:
- Query("[[.original]]{{.payload}}")
detections:
- StringSearch("response", "mysql_fetch_array")
If you want to generate single request with many generator do like this - Query("{{.payload}}"); Method("PUT")
.
Method()
will generate "GET", "POST", "PUT", "HEAD", "PATCH"
based on request input.
If parameter specified Method("PUT")
only one request with PUT method generated.
Query("[[.original]]{{.payload}}")
will generate number of based on number of query string in URL of the request input.
For example with signature sqli-01-01 and our URL is http://example.com/?q=123
. We gonna get two new requests with URL http://example.com/?q=123'"
and http://example.com/?q=123%60}
.
If we use Query("[[.original]]{{.payload}}","new")
generator then we gonna get http://example.com/?q=123&new='"
.
Header()
and Body()
have same usage of Query()
generator.
For example.
Body("[[.original]]{{.payload}}")
generate number of based on number of request body parameter of the request input.
Header("[[.original]] \ {{.payload}}", "X-Command")
will generate a new request with X-Command
header with our payload.
First of all, Jaeles split path of URL like this
URL: http://example.com/rest/products/6/reviews.php?q=123
Path: => /rest/products/6/reviews
0 1 2 3 -1
and have some special parameter last
, 0/1/2
and *
.
For example our URL is http://example.com/a/b/reviews.php?q=123
.
Path Generator | Desc | E.g our payload is .json . |
---|---|---|
Path("{{.payload}}", "last") |
Last position of the Path | http://example.com/a/b/.json?q=123 |
Path("[[.original]]{{.payload}}", "last") |
Last position of the Path | http://example.com/a/b/reviews.php.json?q=123 |
Path("{{.payload}}", "*") |
Loop for all positions | http://example.com/a.json/b/reviews?q=123 http://example.com/a/b.json/reviews?q=123 http://example.com/a/b/reviews.json?q=123 |
If you don’t specified position parameter like this Path("{{.payload}}")
, by default it’s equal to Path("{{.payload}}", "last")
.
With Replace()
or Replace('FUZZ')
, the word FUZZ in request will be replace by your payloads.
http://example.com/FUZZ/sample --> http://example.com/PAYLOAD/sample
Fuzz('{{.payload}}')
is same with Replace()
but replace with template engine.
http://example.com/{{.FUZZ}}/sample --> http://example.com/PAYLOAD/sample