A blazing fast web directory scanner written in Rust. It's like dirsearch but faster and with less features. It is designed to be fast in recursive scans and to be able to handle large wordlists.
Unlike other tools, rwalk does not provide advanced fuzzing features such as parameter fuzzing, header discovery, etc.
Features
- Multi-threaded
- Recursive directory scanning
- Save progress to resume later
- Cherry-pick responses (filter by status code, length, etc.)
- Custom wordlists (merge multiple wordlists, filter out words, etc.)
- Write results to file (JSON, CSV, etc.)
- Configurable request parameters (headers, cookies, etc.)
- Request throttling
- Proxy support
From crates.io
Installation
Running
From source
Installation
Running
With just
With cargo
Usage
You can run rwalk --help or read the help file for more information.
Passing parameters as environment variables
You can pass parameters as environment variables. For example, to set the number of threads to 10:
THREADS=10
is equivalent to:
The env file located at ~/.config/rwalk/.env will be loaded automatically.
Inputting ranges
In some cases , you may want to input a <RANGE> of values.
You can use the following formats:
| Format | Description |
|---|---|
5 |
Exactly 5 |
5-10 |
Between 5 and 10 (inclusive) |
5,10 |
Exactly 5 or 10 |
>5 |
Greater than 5 |
<5 |
Less than 5 |
5,10,15 |
Exactly 5, 10, or 15 |
>5,10,15 |
Greater than 5, or exactly 10 or 15 |
5-10,15-20 |
Between 5 and 10 or between 15 and 20 (inclusive) |
Response Filtering
To cherry-pick the responses, you can use the --filter (-f) flags to filter specific responses. For example, to only show responses that contain admin:
or only requests that took more than 1 second:
Available filters:
starts:<STRING>ends:<STRING>contains:<STRING>regex:<REGEX>length:<RANGE>status:<RANGE>time:<RANGE>hash:<STRING>(MD5)
Wordlists
You can pass multiple wordlists to rwalk. For example:
rwalk will merge the wordlists and remove duplicates. You can also apply filters and transformations to the wordlists (see below).
You can also pass wordlists from stdin:
|
[!NOTE] A checksum is computed for the wordlists and stored in case you abort the scan. If you resume the scan,
rwalkwill only load the wordlists if the checksums match. See Saving progress for more information.
Wordlist Filters
You can filter words from the wordlist by using the --wordlist-filter (-w) flag. For example, to only use words that start with admin:
Available filters:
starts:<STRING>ends:<STRING>contains:<STRING>regex:<REGEX>length:<RANGE>
Wordlist Transformations
To quickly modify the wordlist, you can use the --transform flag. For example, to add a suffix to all words in the wordlist:
To replace all occurrences of admin with administrator:
Available transformations:
prefix:<STRING>suffix:<SUFFIX>remove:<STRING>replace:<OLD=NEW>upperlowercapitalizereverse
Additional response details
If you need more details about the matched responses, you can use the --show flag. For example, to show the body hash and length:
Available details:
lengthhashheadersbodyheaders_lengthheaders_hash
Interactive mode
You can use the --interactive (-i) flag to enter interactive mode. In this mode, you can set parameters one by one and run the scan when you're ready.
Available commands:
set <PARAM> <VALUE>: Set a parameterunset <PARAM>: Unset a parameterlist: Show the current parametersrun: Run the scanexit: Exit interactive modehelp: Show helpclear: Clear the screen
Output
By default, rwalk will print the results to the terminal. You can also save the results to a file with the --output (-o) flag:
Available output formats:
*.json*.csv*.md*.txt
Throttling
The throttling value will be multiplied by the number of threads. For example, if you have 10 threads and a throttling value of 5, the total number of requests per second will be 50.
Saving and resuming scans
By default, if you abort the scan with Ctrl + C, rwalk will save the progress to a file called .rwalk.json. You can resume the scan by running with --resume:
If you want to save the progress to a different file, you can use the --save-file flag:
The auto-saving behavior can be disabled with --no-save.
Proxy support
You can pass a proxy URL with the --proxy flag:
Authentication is also supported with --proxy-auth:
Examples
Basic scan
Recursive scan
Warning: Recursive scans can take a long time and generate a lot of traffic. Use with caution.
Custom headers/cookies
Follow redirects
Custom request body
FAQ
Where can I find wordlists?
How do I get support?
Open an issue or ask in the Discord server.
Is rwalk stable?
rwalk is stable but it's still in the early stages of development. It should work for most use cases but there may be bugs.
Benchmarks
The following benchmarks were run on a 2023 MacBook Pro with an M3 Pro chip on a 10 Gbps connection via WiFi. The target was http://ffuf.me/cd/basic and the wordlist was common.txt.
Each tool was run 10 times with 100 threads. The results are below:
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|---|---|---|---|---|
rwalk |
6.068 ± 0.146 | 5.869 | 6.318 | 1.15 ± 0.03 |
dirsearch |
14.263 ± 0.250 | 13.861 | 14.719 | 2.70 ± 0.07 |
ffuf |
5.285 ± 0.090 | 5.154 | 5.358 | 1.00 |
License
Licensed under the MIT License.