ZAP Fuzzer

ZAP's Fuzzer is called (ZAP Fuzzer). It can be very powerful for fuzzing various web endpoints, though it is missing some of the features provided by Burp Intruder. ZAP Fuzzer, however, does not throttle the fuzzing speed, which makes it much more useful than Burp's free Intruder.

Fuzz

As we will be fuzzing for directories, let's visit <http://SERVER_IP:PORT/test/> to place our fuzzing location on test later on. Once we locate our request in the proxy history, we will right-click on it and select (Attack>Fuzz), which will open the Fuzzer window:

Pasted image 20251006160357.png
Pasted image 20251006160449.png|500

The main options we need to configure for our Fuzzer attack are:

Let's try to configure them for our web directory fuzzing attack.

Locations

The Fuzz Location is very similar to Intruder Payload Position, where our payloads will be placed.

Payloads

The attack payloads in ZAP's Fuzzer are similar in concept to Intruder's Payloads, though they are not as advanced as Intruder's. We can click on the Add button to add our payloads and select from 8 different payload types. The following are some of them:

Processors

Options

Finally, we can set a few options for our fuzzers, similar to what we did with Burp Intruder.

Start

With all of our options configured, we can finally click on the Start Fuzzer button to start our attack. Once our attack is started, we can sort the results by the Response code, as we are only interested in responses with code 200:

Table showing task IDs, message types, HTTP codes, reasons, round-trip times, response sizes, states, and payloads. Example: Task ID 908, 200 OK, 109 ms, 246 bytes, state 'skills'.

As we can see, we got one hit with code 200 with the skills payload, meaning that the /skills/ directory exists on the server and is accessible. We can click on the request in the results window to view its details:

Request and response details. Request: HTTP GET to /skills/. Response: 200 OK, includes Set-Cookie header, HTML content with 'Welcome' title.

We can see from the response that this page is indeed accessible by us. There are other fields that may indicate a successful hit depending on the attack scenario, like Size Resp. Body which may indicate that we got a different page if its size was different than other responses, or RTT for attacks like time-based SQL injections, which are detected by a time delay in the server response.


Exercise

Target: 94.237.56.254:51506

The directory we found above sets the cookie to the md5 hash of the username, as we can see the md5 cookie in the request for the (guest) user. Visit '/skills/' to get a request with a cookie, then try to use ZAP Fuzzer to fuzz the cookie for different md5 hashed usernames to get the flag. Use the "top-usernames-shortlist.txt" wordlist from Seclists.

First look at the response from visiting '/skills/' and find the cookie value:
Pasted image 20251006162858.png

Cookie:

...
Set-Cookie: cookie=084e0343a0486ff05530df6c705c8bb4
...

So after refreshing the page we can see a request that looks like:
Pasted image 20251006163528.png|500

First select the hash value of the cookie and click Add:
Pasted image 20251006163625.png|500

Then, once on the Payloads screen, click Add to add a payload

Pasted image 20251006164616.png|500

Now to actually look up for the hashes of that list of usernames we need a Payload Processor. Go to Processors... and click on Add.

Pasted image 20251006164917.png|300 Pasted image 20251006164944.png|300

Take a close look at the size of the content of each fuzzed object:
Pasted image 20251006165921.png|600

flag: HTB