Git Product home page Git Product logo

hackmanit / web-cache-vulnerability-scanner Goto Github PK

View Code? Open in Web Editor NEW
803.0 16.0 129.0 24.84 MB

Web Cache Vulnerability Scanner is a Go-based CLI tool for testing for web cache poisoning. It is developed by Hackmanit GmbH (http://hackmanit.de/).

License: Other

Go 98.62% Shell 1.20% Dockerfile 0.17%
vulnerability-scanners web-cache security-tools security-scanner security security-audit pentesting penetration-testing-tools penetration-testing bugbounty

web-cache-vulnerability-scanner's Introduction

Release Go Report Card GitHub go.mod Go version License

Web Cache Vulnerability Scanner (WCVS) is a fast and versatile CLI scanner for web cache poisoning and web cache deception developed by Hackmanit and Maximilian Hildebrand.

The scanner supports many different web cache poisoning and web cache deception techniques, includes a crawler to identify further URLs to test, and can adapt to a specific web cache for more efficient testing. It is highly customizable and can be easily integrated into existing CI/CD pipelines.

Features

  • Support for 9 web cache poisoning techniques:
    1. Unkeyed header poisoning
    2. Unkeyed parameter poisoning
    3. Parameter cloaking
    4. Fat GET
    5. HTTP response splitting
    6. HTTP request smuggling
    7. HTTP header oversize (HHO)
    8. HTTP meta character (HMC)
    9. HTTP method override (HMO)
  • Support for 3 web cache deception techniques:
    1. Path Parameter
    2. Path Traversal
    3. Appended Newline, Null Byte, Semicolon, Pound, Question Mark or Ampersand
  • Analyzing a web cache before testing and adapting to it for more efficient testing
  • Generating a report in JSON format
  • Crawling websites for further URLs to scan
  • Routing traffic through a proxy (e.g., Burp Suite)
  • Limiting requests per second to bypass rate limiting

Installation

Option 1: Pre-built Binary (Recommended)

Prebuilt binaries of WCVS are provided on the releases page. These releases include 2 default wordlists, as well.

Option 2: Install Using Go

The repository can be installed using Go.

go1.21 and higher

go install -v github.com/Hackmanit/Web-Cache-Vulnerability-Scanner@latest

Option 3: Docker

1. Clone repository or download the latest source code release

2. Build image (the wordlists folder will also be copied)

$ docker build .
Sending build context to Docker daemon  29.54MB
Step 1/10 : FROM golang:latest AS builder
 ---> 05c8f6d2538a
Step 2/10 : WORKDIR /go/src/app
 ---> Using cache
 ---> f591f24be8cf
Step 3/10 : COPY . .
 ---> 38b358dd3472
Step 4/10 : RUN go get -d -v ./...
 ---> Running in 41f53de436c5
....
Removing intermediate container 9e2e84d14ff3
 ---> 1668edcf6ee3
Successfully built 1668edcf6ee3

3. Run wcvs

$ docker run -it 1668edcf6ee3 /wcvs --help
https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner
version 1.0.0

Usage

WCVS is highly customizable using its flags. Many of the flags can either contain a value directly or the path to a file.

The only mandatory flag is -u/--url to provide the target URL which should be tested for web cache poisoning/deception. The target URL can be provided in different formats,

WCVS needs two wordlists in order to test for the first 5 techniques - one wordlist with header names and one with parameter names. The wordlists can either be present in the same directory WCVS is executed from or specified using the --headerwordlist/-hw and --parameterwordlist/-pw flags.

Examples:

wcvs -u 127.0.0.1
wcvs -u http://127.0.0.1
wcvs -u https://example.com
wcvs -u file:path/to/url_list

wcvs -u https://example.com -hw "file:/home/user/Documents/wordlist-header.txt"
wcvs -u https://example.com -pw "file:/home/user/Documents/wordlist-parameter.txt"
wcvs -u https://example.com -hw "file:/home/user/Documents/wordlist-header.txt" -pw "file:/home/user/Documents/wordlist-parameter.txt"

Specify Headers, Parameters, Cookies, and More

  • --cacheheader/-ch specifies a custom cache header which will be checked for cache hits and misses
  • --setcookies/-sc specifies cookies which shall be added to the request
  • --setheaders/-sh specifies headers which shall be added to the request
  • --setparameters/-sp specifies parameters which shall be added to the request. While it is also possible to simply add them to the URL, it might be more useful in some cases to add them via this flag.
  • --post/-post changes the HTTP method from GET to POST
  • --setbody/-sb specifies the body which shall be added to the request
  • --contenttype/-ct specifies the value of the Content-Type header
  • --useragentchrome/-uac changes the User-Agent from WebCacheVulnerabilityScanner v{Version-Number} to Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36. While the same can be achieved with e.g. -sh "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..., this flag provides a quicker way.
  • --cacheheader/-ch specify a custom cache header (case-insensitive)

If you want to specify more than 1 cookie, parameter or header you need to specify a file which contains them. Take a look at the available templates.

Examples:

wcvs -u https://example.com -ch "X-Custom-Header-ABC"

wcvs -u https://example.com -sc "PHPSESSID=123"
wcvs -u https://example.com -sc "file:/home/user/Documents/cookies.txt"

wcvs -u https://example.com -sh "Referer: localhost"
wcvs -u https://example.com -sh "file:/home/user/Documents/headers.txt"

wcvs -u https://example.com -sp "admin=true"
wcvs -u https://example.com -sp "file:/home/user/Documents/parameters.txt"

wcvs -u https://example.com -post -sb "admin=true"
wcvs -u https://example.com -post -sb "file:/home/user/Documents/body.txt"

wcvs -u https://example.com -post -sb "{}" -ct "application/json"

wcvs -u https://example.com -uac

wcvs -u https://example.com -ch "X-Custom-Cache-Header"

Generate a JSON Report

A JSON report is generated and updated after each scanned URL if the flag --generatereport/-gr is set. The report is written, just like a log file, into the same directory WCVS is executed from. In order to change the directory for all output files use --generatepath/-gp. If HTML special chars shall be encoded in the report, use --escapejson/-ej.

Examples:

wcvs -u https://example.com -gr
wcvs -u https://example.com -gr -ej
wcvs -u https://example.com -gr -gp /home/user/Documents
wcvs -u https://example.com -gr -gp /home/user/Documents -ej

Crawl for URLs

In order to crawl for URLs, --recursivity/-r needs to be set. It specifies how deep the crawler shall go recursion-wise. By default WCVS only crawls for URLs of the same domain. To also crawl for other domains, --recdomains/red can be used. To only crawl URLs which inherit a specific string, --recinclude/-rin can be used. --reclimit/-rl limits how many URLs are crawled for each recursion depth. Also, a list with URLs which shall not be crawled can be specified with --recexclude/-rex. --generatecompleted/-gc can, for example, be used to generate a list with all already tested URLs. If a scan is repeated, but WCVS shall not crawl and test again the same URLs, this list can be used for --recexclude/-rex.

Examples:

wcvs -u https://example.com -r 5
wcvs -u https://example.com -r 5 -red /home/user/Documents/mydomains.txt
wcvs -u https://example.com -r 5 -rl 2
wcvs -u https://example.com -r 5 -rex /home/user/Documents/donttest.txt

Use a Proxy

To use a proxy, a CA certificate of the proxy in PEM format is needed. Burp Suite certificates are provided in DER format, for example. To convert them, the following command can be used: openssl x509 -inform DER -outform PEM -text -in cacert.der -out cacert.pem. The path to the certificate can be specified with --proxycertpath/-ppath. The default URL for the proxy is http://127.0.0.1:8080. In order to change it, use --proxyurl/-purl.

Examples:

wcvs -u https://example.com -ppath /home/user/Documents/cacert.pem
wcvs -u https://example.com -ppath /home/user/Documents/cacert.pem -purl http://127.0.0.1:8081

Throttle or Accelerate

The number of maximum allowed requests per second can be set with --reqrate/-rr. By default, this number is unrestricted. Contrary, the number of requests per second can be increased potentially, if --threads/-t is used to increase the number of concurrent threads WCVS utilizes. The default value is 20.

Examples:

wcvs -u https://example.com -rr 10
wcvs -u https://example.com -rr 1
wcvs -u https://example.com -rr 0.5
wcvs -u https://example.com -t 50

Further Flags

WCVS provides even more than the beforehand mentioned flags and options. --help/-h provides a list of each flag, its meaning, and how to use it.

Example:

wcvs -h

Background Information

A short series of blog posts giving more information about web cache poisoning and WCVS can be found here:

  1. Is Your Application Vulnerable to Web Cache Poisoning?
  2. Web Cache Vulnerability Scanner (WCVS) - Free, Customizable, Easy-To-Use

The Web Cache Vulnerability Scanner (WCVS) was developed as a part of a bachelor's thesis by Maximilian Hildebrand.

License

WCVS is developed by Hackmanit and Maximilian Hildebrand and licensed under the Apache License, Version 2.0.

web-cache-vulnerability-scanner's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

web-cache-vulnerability-scanner's Issues

false positives occur, if the scanned website changes

There is an insufficient verification of findings, which occur if a website or resource changes during a scan.
Potential changes which trigger these false positives are e.g. if the content changes or the status code.
One other identified reason for false positives is, that one test uses the short number "12345" in an HTTP request as port number and checks if this number exists in the HTTP response. Because the number is that short, there is a not so unlikely possibility, that this number already was present beforehand. For example in the URL of an image.

Solutions for these two problems were already found and will be implemented in the near future.

Add Cache Hit Headers Manually

Would it be possible to implement a feature that would allow detection of a non-standard cache hit header? I'm testing on a website that uses X-Cache-Status: HIT as the header, but this header isn't included in the code.

Installation failed

Hi,

$ go get -u "https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner"
go get: malformed module path "https:/github.com/Hackmanit/Web-Cache-Vulnerability-Scanner": invalid char ':'

This is seems a little bit not usual.

go version
go version go1.17.2 linux/amd64 (Linux Mint)

Thank you for help in advance.

Malware detection. Binary and compiled hashes do not match

Hello,

When running the binary contained in web-cache-vulnerability-scanner_1.2.0_windows_amd64.zip , it is detected as malware by Windows Defender as well as other engines on Virus Total. Also, when compiling directly from source, the hash value does not match the hash value of the binary. The source was compiled on a Windows 10 machine. The compiled executable does not raise any detections. Please provide some insight on this.

Binary hash SHA256 value: e2978db859ebcc0d8634deeb92a376a40d0d07c5ac386e678e9aed11fd906663
Compiled hash SHA256 value: fed1d256cbc2645bddbe17d8771f2c304ca270ee5c219b4312775e32aa94cd91

Malware Detection of Binary:
https://www.virustotal.com/gui/file/e2978db859ebcc0d8634deeb92a376a40d0d07c5ac386e678e9aed11fd906663

Clean (Compiled from source)
https://www.virustotal.com/gui/file/fed1d256cbc2645bddbe17d8771f2c304ca270ee5c219b4312775e32aa94cd91

Thanks,

Dave

runtime error: invalid memory address or nil pointer dereference

Thank you for your contribution, it is an awesome tool !!!
The program throws an exception when I try to run the following command.

Bash:

./wcvs -gp ./log -gr -gc -uac -r 2 -rl 3 -red templates/recdomains_list -st parameter -u https://6o4xu.vk.com

Error Message:

GetWebsite: Get "https://6o4xu.vk.com": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x559fa0]

goroutine 1272 [running]:
net/url.(*URL).String(0x0)
        /usr/local/go/src/net/url/url.go:813 +0x40
github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.getStatusCode()
        /home/max/Documents/git/Web-Cache-Vulnerability-Scanner/pkg/recon.go:1284 +0x35
github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.checkPoisoningIndicators(0xc000242050, {{0xc000016300, 0x14}, {0x0, 0x0}, {0xc0000ece00, 0xd7}, {0xc000c2e340, 0x192}}, {0xc000328a00, ...}, ...)
        /home/max/Documents/git/Web-Cache-Vulnerability-Scanner/pkg/requests.go:96 +0xb49
github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.checkPoisoningIndicators(0xc000242050, {{0xc000016300, 0x14}, {0x0, 0x0}, {0xc0000ece00, 0xd7}, {0xc000c2e340, 0x192}}, {0xc000328a00, ...}, ...)
        /home/max/Documents/git/Web-Cache-Vulnerability-Scanner/pkg/requests.go:88 +0x4a9
github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.issueRequest({0xc000242050, {0xc000630110, 0x1, 0x1}, {0xc000630120, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...})
        /home/max/Documents/git/Web-Cache-Vulnerability-Scanner/pkg/requests.go:367 +0x658
github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.ScanHeaders.func1(0x14, {0xc00037c0d0, 0x9})
        /home/max/Documents/git/Web-Cache-Vulnerability-Scanner/pkg/techniques.go:254 +0x438
created by github.com/Hackmanit/Web-Cache-Vulnerability-Scanner/pkg.ScanHeaders

[Feature] Use custom user agent

I see that --uac exists as an option, but I think it's very important that we're able to select a custom user-agent.
Great tool btw!

-bash: wcvs: command not found.

Hi,
go install -v github.com/Hackmanit/Web-Cache-Vulnerability-Scanner@latest -> installs all packages but does not work.

Prevent reporting 401/429 responses

Hey there,

Is there any way to configure it in a way it doesn't report as valid cases these kind examples:

Reason: Status Code 403 differed from 200

or

Reason: Status Code 200 differed from 429

A lot of sites start giving code 429 or 403 when you make a lot of requests, and it makes a looot of noise of "valid" alerts of the scanner. Would be absolutely awesome to prevent reporting these cases.

Cannot Specify "Host" Header while scanning

Hello,
I was trying to run a tests against my CDN. the caching is working in a way that it looks for the "Host" header that should be the origin of the files, for example to fetch the file a.js from the cache it'll ask for the Host Header with the origin name.
so If I run the following :
curl -H 'Host: origin-server.com' http://my-cache-cdn-url.com/a.js
I'll get the content from the server. however if the same command is run without the Host Header, the cdn will respond with 404 not found.
I've tried to run wvcs by running ./wcvs -url http://my-cache-cdn-url.com/a.js -sh "Host: origin-server.com", however it seems like wvcs is ignoring specifically the "host" header since I intercepted the traffic and saw that the header is not present on the request.
also I was checking if I might be doing it wrong but once I changed "host" to "host1" it worked.
image

question about alerts

This is just a small doubt I have, and then I will close the issue.

All valid cases will contain [+] in the output, right? Because I found out that it is present in most cases of vulns found. Because maybe in fatget or dos tests it would be in a different output but didn't find a test environment to check it.

Can't run binary in MacOS

Hello

I downloaded the latest version of binary for Mac but I can't run it.

go: no packages loaded from wcvs
zsh: exec format error: ./wcvs

MacOS Monterey
12.6
go version go1.19.2 darwin/amd64

Can anyone tell me what and how to do it? Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.