CRLFuzz is a fast tool to scan CRLF vulnerability written in Go.
Installation
- From Binary
The installation is easy. You can download a prebuilt binary from releases page, unpack and run! or with
curl -sSfL https://git.io/crlfuzz | sh -s — -b /usr/local/bin
- From Source
If you have go1.13+ compiler installed and configured:
GO111MODULE=on go get -v github.com/dwisiswant0/crlfuzz/cmd/crlfuzz
In order to update the tool, you can use -u
flag with go get command.
- From GitHub
git clone https://github.com/dwisiswant0/crlfuzz
cd crlfuzz/cmd/crlfuzz
go build .
mv crlfuzz /usr/local/bin
Usage
- Basic Usage
- Simply, CRLFuzz can be run with:
crlfuzz -u “http://target”
- Flags
crlfuzz -h
This will display help for the tool. Here are all the switches it supports.
Flag | Description |
---|---|
-u, –url | Define single URL to fuzz |
-l, –list | Fuzz URLs within file |
-X, –method | Specify request method to use (default: GET) |
-o, –output | File to save results |
-d, –data | Define request data |
-H, –header | Pass custom header to target |
-x, –proxy | Use specified proxy to fuzz |
-c, –concurrent | Set the concurrency level (default: 25) |
-s, –silent | Silent mode |
-v, –verbose | Verbose mode |
-V, –version | Show current CRLFuzz version |
-h, –help | Display its help |
- Target
You can define a target in 3 ways:
- Single URL
crlfuzz -u “http://target”
- URLs from list
crlfuzz -l /path/to/urls.txt
- From Stdin
In case you want to chained with other tools.
subfinder -d target -silent | httpx -silent | crlfuzz
- Method
By default, CRLFuzz makes requests with GET
method. If you want to change it, you can use the -X
flag.
crlfuzz -u “http://target” -X “GET”
- Output
You can also save fuzzing results to a file with -o
flag.
crlfuzz -l /path/to/urls.txt -o /path/to/results.txt
- Data
If you want to send a data request using POST, DELETE. PATCH or other methods, you just need to use -d
flag.
crlfuzz -u “http://target” -X “POST” -d “data=body”
- Adding Headers
May you want to use custom headers to add cookies or other header parts.
crlfuzz -u “http://target” -H “Cookie: …” -H “User-Agent: …”
- Using Proxy
Using a proxy, proxy string can be specified with a protocol://
prefix to specify alternative proxy protocols.
crlfuzz -u “http://target” -x http://127.0.0.1:8080
Concurrency
Concurrency is the number of fuzzing at the same time. Default value CRLFuzz provide is 25
, you can change it by using -c
flag.
crlfuzz -l /path/to/urls.txt -c 50
- Silent
If you activate this silent mode with the -s
flag, you will only see vulnerable targets.
crlfuzz -l /path/to/urls.txt -s | tee vuln-urls.txt
- Verbose
Unlike silent mode, it will display error details if there is an error with the -v
flag.
crlfuzz -l /path/to/urls.txt -v
- Version
To display the current version of CRLFuzz with the -V
flag.
crlfuzz -V
- Library
You can use CRLFuzz as a library.
package main
import (
“fmt”
“github.com/dwisiswant0/crlfuzz/pkg/crlfuzz”
)
func main() {
target := “http://target”
method := “GET”
// Generates a potentially CRLF vulnerable URLs
for _, url := range crlfuzz.GenerateURL(target) {
// Scan against target
vuln, err := crlfuzz.Scan(url, method, “”, []string{}, “”)
if err != nil {
panic(err)
}
if vuln {
fmt.Printf(“VULN! %s\n”, url)
}
}
}