mirror of
https://github.com/epi052/feroxbuster.git
synced 2026-04-18 22:21:16 -03:00
* added headers to regex filtering * added regex header test * added pipeline for mac arm * bumped version; updated deps; updated .cargo/config to .toml * -b more robust * fixed overall prog bar showing 0 eta too early * fixed ssl error test * added time estimate to SMM
131 lines
9.6 KiB
Plaintext
131 lines
9.6 KiB
Plaintext
#compdef feroxbuster
|
|
|
|
autoload -U is-at-least
|
|
|
|
_feroxbuster() {
|
|
typeset -A opt_args
|
|
typeset -a _arguments_options
|
|
local ret=1
|
|
|
|
if is-at-least 5.2; then
|
|
_arguments_options=(-s -S -C)
|
|
else
|
|
_arguments_options=(-s -C)
|
|
fi
|
|
|
|
local context curcontext="$curcontext" state line
|
|
_arguments "${_arguments_options[@]}" : \
|
|
'-u+[The target URL (required, unless \[--stdin || --resume-from\] used)]:URL:_urls' \
|
|
'--url=[The target URL (required, unless \[--stdin || --resume-from\] used)]:URL:_urls' \
|
|
'(-u --url)--resume-from=[State file from which to resume a partially complete scan (ex. --resume-from ferox-1606586780.state)]:STATE_FILE:_files' \
|
|
'-p+[Proxy to use for requests (ex\: http(s)\://host\:port, socks5(h)\://host\:port)]:PROXY:_urls' \
|
|
'--proxy=[Proxy to use for requests (ex\: http(s)\://host\:port, socks5(h)\://host\:port)]:PROXY:_urls' \
|
|
'-P+[Send only unfiltered requests through a Replay Proxy, instead of all requests]:REPLAY_PROXY:_urls' \
|
|
'--replay-proxy=[Send only unfiltered requests through a Replay Proxy, instead of all requests]:REPLAY_PROXY:_urls' \
|
|
'*-R+[Status Codes to send through a Replay Proxy when found (default\: --status-codes value)]:REPLAY_CODE: ' \
|
|
'*--replay-codes=[Status Codes to send through a Replay Proxy when found (default\: --status-codes value)]:REPLAY_CODE: ' \
|
|
'-a+[Sets the User-Agent (default\: feroxbuster/2.10.4)]:USER_AGENT: ' \
|
|
'--user-agent=[Sets the User-Agent (default\: feroxbuster/2.10.4)]:USER_AGENT: ' \
|
|
'*-x+[File extension(s) to search for (ex\: -x php -x pdf js); reads values (newline-separated) from file if input starts with an @ (ex\: @ext.txt)]:FILE_EXTENSION: ' \
|
|
'*--extensions=[File extension(s) to search for (ex\: -x php -x pdf js); reads values (newline-separated) from file if input starts with an @ (ex\: @ext.txt)]:FILE_EXTENSION: ' \
|
|
'*-m+[Which HTTP request method(s) should be sent (default\: GET)]:HTTP_METHODS: ' \
|
|
'*--methods=[Which HTTP request method(s) should be sent (default\: GET)]:HTTP_METHODS: ' \
|
|
'--data=[Request'\''s Body; can read data from a file if input starts with an @ (ex\: @post.bin)]:DATA: ' \
|
|
'*-H+[Specify HTTP headers to be used in each request (ex\: -H Header\:val -H '\''stuff\: things'\'')]:HEADER: ' \
|
|
'*--headers=[Specify HTTP headers to be used in each request (ex\: -H Header\:val -H '\''stuff\: things'\'')]:HEADER: ' \
|
|
'*-b+[Specify HTTP cookies to be used in each request (ex\: -b stuff=things)]:COOKIE: ' \
|
|
'*--cookies=[Specify HTTP cookies to be used in each request (ex\: -b stuff=things)]:COOKIE: ' \
|
|
'*-Q+[Request'\''s URL query parameters (ex\: -Q token=stuff -Q secret=key)]:QUERY: ' \
|
|
'*--query=[Request'\''s URL query parameters (ex\: -Q token=stuff -Q secret=key)]:QUERY: ' \
|
|
'*--dont-scan=[URL(s) or Regex Pattern(s) to exclude from recursion/scans]:URL: ' \
|
|
'*-S+[Filter out messages of a particular size (ex\: -S 5120 -S 4927,1970)]:SIZE: ' \
|
|
'*--filter-size=[Filter out messages of a particular size (ex\: -S 5120 -S 4927,1970)]:SIZE: ' \
|
|
'*-X+[Filter out messages via regular expression matching on the response'\''s body (ex\: -X '\''^ignore me\$'\'')]:REGEX: ' \
|
|
'*--filter-regex=[Filter out messages via regular expression matching on the response'\''s body (ex\: -X '\''^ignore me\$'\'')]:REGEX: ' \
|
|
'*-W+[Filter out messages of a particular word count (ex\: -W 312 -W 91,82)]:WORDS: ' \
|
|
'*--filter-words=[Filter out messages of a particular word count (ex\: -W 312 -W 91,82)]:WORDS: ' \
|
|
'*-N+[Filter out messages of a particular line count (ex\: -N 20 -N 31,30)]:LINES: ' \
|
|
'*--filter-lines=[Filter out messages of a particular line count (ex\: -N 20 -N 31,30)]:LINES: ' \
|
|
'(-s --status-codes)*-C+[Filter out status codes (deny list) (ex\: -C 200 -C 401)]:STATUS_CODE: ' \
|
|
'(-s --status-codes)*--filter-status=[Filter out status codes (deny list) (ex\: -C 200 -C 401)]:STATUS_CODE: ' \
|
|
'*--filter-similar-to=[Filter out pages that are similar to the given page (ex. --filter-similar-to http\://site.xyz/soft404)]:UNWANTED_PAGE:_urls' \
|
|
'*-s+[Status Codes to include (allow list) (default\: All Status Codes)]:STATUS_CODE: ' \
|
|
'*--status-codes=[Status Codes to include (allow list) (default\: All Status Codes)]:STATUS_CODE: ' \
|
|
'-T+[Number of seconds before a client'\''s request times out (default\: 7)]:SECONDS: ' \
|
|
'--timeout=[Number of seconds before a client'\''s request times out (default\: 7)]:SECONDS: ' \
|
|
'--server-certs=[Add custom root certificate(s) for servers with unknown certificates]:PEM|DER:_files' \
|
|
'--client-cert=[Add a PEM encoded certificate for mutual authentication (mTLS)]:PEM:_files' \
|
|
'--client-key=[Add a PEM encoded private key for mutual authentication (mTLS)]:PEM:_files' \
|
|
'-t+[Number of concurrent threads (default\: 50)]:THREADS: ' \
|
|
'--threads=[Number of concurrent threads (default\: 50)]:THREADS: ' \
|
|
'-d+[Maximum recursion depth, a depth of 0 is infinite recursion (default\: 4)]:RECURSION_DEPTH: ' \
|
|
'--depth=[Maximum recursion depth, a depth of 0 is infinite recursion (default\: 4)]:RECURSION_DEPTH: ' \
|
|
'-L+[Limit total number of concurrent scans (default\: 0, i.e. no limit)]:SCAN_LIMIT: ' \
|
|
'--scan-limit=[Limit total number of concurrent scans (default\: 0, i.e. no limit)]:SCAN_LIMIT: ' \
|
|
'(-v --verbosity)--parallel=[Run parallel feroxbuster instances (one child process per url passed via stdin)]:PARALLEL_SCANS: ' \
|
|
'(--auto-tune)--rate-limit=[Limit number of requests per second (per directory) (default\: 0, i.e. no limit)]:RATE_LIMIT: ' \
|
|
'--time-limit=[Limit total run time of all scans (ex\: --time-limit 10m)]:TIME_SPEC: ' \
|
|
'-w+[Path or URL of the wordlist]:FILE:_files' \
|
|
'--wordlist=[Path or URL of the wordlist]:FILE:_files' \
|
|
'-B+[Automatically request likely backup extensions for "found" urls (default\: ~, .bak, .bak2, .old, .1)]' \
|
|
'--collect-backups=[Automatically request likely backup extensions for "found" urls (default\: ~, .bak, .bak2, .old, .1)]' \
|
|
'*-I+[File extension(s) to Ignore while collecting extensions (only used with --collect-extensions)]:FILE_EXTENSION: ' \
|
|
'*--dont-collect=[File extension(s) to Ignore while collecting extensions (only used with --collect-extensions)]:FILE_EXTENSION: ' \
|
|
'-o+[Output file to write results to (use w/ --json for JSON entries)]:FILE:_files' \
|
|
'--output=[Output file to write results to (use w/ --json for JSON entries)]:FILE:_files' \
|
|
'--debug-log=[Output file to write log entries (use w/ --json for JSON entries)]:FILE:_files' \
|
|
'(-u --url)--stdin[Read url(s) from STDIN]' \
|
|
'(-p --proxy -k --insecure --burp-replay)--burp[Set --proxy to http\://127.0.0.1\:8080 and set --insecure to true]' \
|
|
'(-P --replay-proxy -k --insecure)--burp-replay[Set --replay-proxy to http\://127.0.0.1\:8080 and set --insecure to true]' \
|
|
'(--rate-limit --auto-bail)--smart[Set --auto-tune, --collect-words, and --collect-backups to true]' \
|
|
'(--rate-limit --auto-bail)--thorough[Use the same settings as --smart and set --collect-extensions to true]' \
|
|
'-A[Use a random User-Agent]' \
|
|
'--random-agent[Use a random User-Agent]' \
|
|
'-f[Append / to each request'\''s URL]' \
|
|
'--add-slash[Append / to each request'\''s URL]' \
|
|
'-r[Allow client to follow redirects]' \
|
|
'--redirects[Allow client to follow redirects]' \
|
|
'-k[Disables TLS certificate validation in the client]' \
|
|
'--insecure[Disables TLS certificate validation in the client]' \
|
|
'-n[Do not scan recursively]' \
|
|
'--no-recursion[Do not scan recursively]' \
|
|
'(-n --no-recursion)--force-recursion[Force recursion attempts on all '\''found'\'' endpoints (still respects recursion depth)]' \
|
|
'-e[Extract links from response body (html, javascript, etc...); make new requests based on findings (default\: true)]' \
|
|
'--extract-links[Extract links from response body (html, javascript, etc...); make new requests based on findings (default\: true)]' \
|
|
'--dont-extract-links[Don'\''t extract links from response body (html, javascript, etc...)]' \
|
|
'(--auto-bail)--auto-tune[Automatically lower scan rate when an excessive amount of errors are encountered]' \
|
|
'--auto-bail[Automatically stop scanning when an excessive amount of errors are encountered]' \
|
|
'-D[Don'\''t auto-filter wildcard responses]' \
|
|
'--dont-filter[Don'\''t auto-filter wildcard responses]' \
|
|
'-E[Automatically discover extensions and add them to --extensions (unless they'\''re in --dont-collect)]' \
|
|
'--collect-extensions[Automatically discover extensions and add them to --extensions (unless they'\''re in --dont-collect)]' \
|
|
'-g[Automatically discover important words from within responses and add them to the wordlist]' \
|
|
'--collect-words[Automatically discover important words from within responses and add them to the wordlist]' \
|
|
'(--silent)*-v[Increase verbosity level (use -vv or more for greater effect. \[CAUTION\] 4 -v'\''s is probably too much)]' \
|
|
'(--silent)*--verbosity[Increase verbosity level (use -vv or more for greater effect. \[CAUTION\] 4 -v'\''s is probably too much)]' \
|
|
'(-q --quiet)--silent[Only print URLs (or JSON w/ --json) + turn off logging (good for piping a list of urls to other commands)]' \
|
|
'-q[Hide progress bars and banner (good for tmux windows w/ notifications)]' \
|
|
'--quiet[Hide progress bars and banner (good for tmux windows w/ notifications)]' \
|
|
'--json[Emit JSON logs to --output and --debug-log instead of normal text]' \
|
|
'--no-state[Disable state output file (*.state)]' \
|
|
'-U[Update feroxbuster to the latest version]' \
|
|
'--update[Update feroxbuster to the latest version]' \
|
|
'-h[Print help (see more with '\''--help'\'')]' \
|
|
'--help[Print help (see more with '\''--help'\'')]' \
|
|
'-V[Print version]' \
|
|
'--version[Print version]' \
|
|
&& ret=0
|
|
}
|
|
|
|
(( $+functions[_feroxbuster_commands] )) ||
|
|
_feroxbuster_commands() {
|
|
local commands; commands=()
|
|
_describe -t commands 'feroxbuster commands' commands "$@"
|
|
}
|
|
|
|
if [ "$funcstack[1]" = "_feroxbuster" ]; then
|
|
_feroxbuster "$@"
|
|
else
|
|
compdef _feroxbuster feroxbuster
|
|
fi
|