Fuzzing with AFL++

Make sure to understand the system requirements before running fuzzing campaigns.


All fuzzamoto scenarios can be fuzzed with AFL++'s nyx mode, except for the IR scenario (scenario-ir).

The Dockerfile at the root of the repository contains an example setup for running fuzzamoto fuzzing campaigns with AFL++.

Build the container image:

docker build -t fuzzamoto .

And then create a new container from it:

docker run --privileged -it fuzzamoto bash

--privileged is required to enable the use of kvm by Nyx.

Example: http-server

All commands in this example are supposed to be run inside the docker container.

AFL++ can't start from an empty corpus, so unless you already have a seed corpus available, you'll need to create or find at least one seed input (ideally this is a useful seed not just "AAA"):

mkdir /tmp/in && echo "AAA" > /tmp/in/A

Once the seed corpus is ready, you'll be able to start the fuzzing campaign:

/AFLplusplus/afl-fuzz -X -i /tmp/in -o /tmp/out -- /tmp/fuzzamoto_scenario-http-server

Multi-core campaigns

Running a multi-core campaign is best practice to make use of all available cores. This can be done with AFL_Runner (installed in the Dockerfile).

Example: http-server

aflr run --nyx-mode --target /tmp/fuzzamoto_scenario-http-server/ \
    --input-dir /tmp/http_in/ --output-dir /tmp/http_out/ \
    --runners 16