Tobias ScheibleCybercrime Dozent & Live Hacking Speaker

Feroxbuster – Einfache, schnelle, rekursive Inhaltssuche

Feroxbuster ist ein Tool, das zur Durchführung von Forced Browsing entwickelt wurde. Dabei ist das Ziel, versteckte Web-Verzeichnisse und Dateien aufzufinden, die nicht von der Webanwendung referenziert werden, auf die ein Angreifer aber dennoch zugreifen kann. Damit eignet sich Feroxbuster für Website-Pentests.

Sonntag, 04. Juli 2021
0 Kommentare

Feroxbuster nutzt Brute-Force in Kombination mit einer Wortliste, um in Zielverzeichnissen nach unverlinkten Inhalten zu suchen. In diesen Inhalten können sensible Informationen über Webanwendungen und Betriebssysteme gespeichert sein, z. B. Quellcode, Anmeldedaten, interne Netzwerkadressen, Backups usw.. Diese Methode ist auch als Predictable Resource Location, File Enumeration, Directory Enumeration und Resource Enumeration bekannt.

Feroxbuster ist in Rust geschrieben und wird aktiv weiterentwickelt, teilweise werden zweimal im Monat neue Versionen veröffentlicht. Die GitHub-Seite des Projektes ist sehr ausführlich und beschreibt alle wichtigen Aspekte. Feroxbuster kann sehr flexibel konfiguriert werden und bietet eine rekursive Suche. Damit wird in einem gefundenen Verzeichnis eine erneute Suche gestartet. Das Tool ist schnell und kann individuell angepasst werden.

Installation von Feroxbuster

Feroxbuster kann über die GitHub-Seite des Projektes auf vielen verschiedenen Systemen installiert werden. In der ausführlichen Dokumentation werden die Schritte sehr gut für die verschiedenen Systeme beschrieben. Seit der Version 2021.2 von Kali Linux ist Feroxbuster fester Bestandteil der Distribution und ist als Paket verfügbar. Die Installation kann wie gewohnt über das Terminal durchgeführt werden:

$ sudo apt update && sudo apt install -y feroxbuster

Anschließend kann getestet werden, ob die Installation von Feroxbuster geklappt hat:

$ feroxbuster -h
feroxbuster 2.2.1
Ben 'epi' Risher (@epi052)
A fast, simple, recursive content discovery tool written in Rust
USAGE: feroxbuster [FLAGS] [OPTIONS] --url ...
FLAGS: -f, --add-slash Append / to each request --auto-bail Automatically stop scanning when an excessive amount of errors are encountered --auto-tune Automatically lower scan rate when an excessive amount of errors are encountered -D, --dont-filter Don't auto-filter wildcard responses -e, --extract-links Extract links from response body (html, javascript, etc...); make new requests based on findings (default: false) -h, --help Prints help information -k, --insecure Disables TLS certificate validation --json Emit JSON logs to --output and --debug-log instead of normal text -n, --no-recursion Do not scan recursively -q, --quiet Hide progress bars and banner (good for tmux windows w/ notifications) -r, --redirects Follow redirects --silent Only print URLs + turn off logging (good for piping a list of urls to other commands) --stdin Read url(s) from STDIN -V, --version Prints version information -v, --verbosity Increase verbosity level (use -vv or more for greater effect. [CAUTION] 4 -v's is probably too much)
OPTIONS: --debug-log  Output file to write log entries (use w/ --json for JSON entries) -d, --depth  Maximum recursion depth, a depth of 0 is infinite recursion (default: 4) -x, --extensions ... File extension(s) to search for (ex: -x php -x pdf js) -N, --filter-lines ... Filter out messages of a particular line count (ex: -N 20 -N 31,30) -X, --filter-regex ... Filter out messages via regular expression matching on the response's body (ex: -X '^ignore me$') --filter-similar-to ... Filter out pages that are similar to the given page (ex. --filter-similar-to http://site.xyz/soft404) -S, --filter-size ... Filter out messages of a particular size (ex: -S 5120 -S 4927,1970) -C, --filter-status ... Filter out status codes (deny list) (ex: -C 200 -C 401) -W, --filter-words ... Filter out messages of a particular word count (ex: -W 312 -W 91,82) -H, --headers 
... Specify HTTP headers (ex: -H Header:val 'stuff: things') -o, --output Output file to write results to (use w/ --json for JSON entries) --parallel Run parallel feroxbuster instances (one child process per url passed via stdin) -p, --proxy Proxy to use for requests (ex: http(s)://host:port, socks5(h)://host:port) -Q, --query ... Specify URL query parameters (ex: -Q token=stuff -Q secret=key) --rate-limit Limit number of requests per second (per directory) (default: 0, i.e. no limit) -R, --replay-codes ... Status Codes to send through a Replay Proxy when found (default: --status-codes value) -P, --replay-proxy Send only unfiltered requests through a Replay Proxy, instead of all requests --resume-from State file from which to resume a partially complete scan (ex. --resume-from ferox-1606586780.state) -L, --scan-limit Limit total number of concurrent scans (default: 0, i.e. no limit) -s, --status-codes ... Status Codes to include (allow list) (default: 200 204 301 302 307 308 401 403 405) -t, --threads Number of concurrent threads (default: 50) --time-limit Limit total run time of all scans (ex: --time-limit 10m) -T, --timeout Number of seconds before a request times out (default: 7) -u, --url ... The target URL(s) (required, unless --stdin used) -a, --user-agent Sets the User-Agent (default: feroxbuster/VERSION) -w, --wordlist Path to the wordlist NOTE: Options that take multiple values are very flexible. Consider the following ways of specifying extensions: feroxbuster -u http://127.1 -x pdf -x js,html -x php txt json,docx The command above adds .pdf, .js, .html, .php, .txt, .json, and .docx to each url All of the methods above (multiple flags, space separated, comma separated, etc...) are valid and interchangeable. The same goes for urls, headers, status codes, queries, and size filters. EXAMPLES: Multiple headers: feroxbuster -u http://127.1 -H Accept:application/json "Authorization: Bearer {token}" IPv6, non-recursive scan with INFO-level logging enabled: feroxbuster -u http://[::1] --no-recursion -vv Read urls from STDIN; pipe only resulting urls out to another tool cat targets | feroxbuster --stdin --silent -s 200 301 302 --redirects -x js | fff -s 200 -o js-files Proxy traffic through Burp feroxbuster -u http://127.1 --insecure --proxy http://127.0.0.1:8080 Proxy traffic through a SOCKS proxy feroxbuster -u http://127.1 --proxy socks5://127.0.0.1:9050 Pass auth token via query parameter feroxbuster -u http://127.1 --query token=0123456789ABCDEF Find links in javascript/html and make additional requests based on results feroxbuster -u http://127.1 --extract-links Ludicrous speed... go! feroxbuster -u http://127.1 -t 200
Seclists

Feroxbuster verwendet die Wortlisten der Seclists, um die Bruteforce-Operationen auszuführen, die auch in der Standardkonfiguration Anwendung finden. Alternativ kann auch eine eigene Wortliste angegeben werden. Die Seclists sind eine Sammlung von Wortlistendateien, die Benutzernamen, Kennwörter, Web-Shells, Datenmuster, Fuzzing-Payloads usw. enthalten. Das Seclists Software-Paket kann unter Kali Linux einfach installiert werden:

$ apt -y install seclists

Nach der Installation von Seclists liegen die Wortlisten im Verzeichnis /usr/share/seclists.

Seclist Wortlisten
Ordnerstruktur der Wortlisten von Seclists
Seclist WortlistenOrdnerstruktur der Wortlisten von Seclists

Aufruf von Feroxbuster

Feroxbuster verfügt über die Konfigurationsdatei /etc/feroxbuster/ferox-config.toml. Die Standardkonfigurationen können durch Auskommentieren der vordefinierten Einstellungen in der Datei außer Kraft gesetzt werden. Beim Aufruf von Feroxbuster werden zuerst die Standardwerte geladen, dann die Konfigurationsdatei ausgewertet und anschließend die gesetzten Parameter verwendet. In vielen Anwendungsfällen reicht es aus, nur die Parameter zu setzen. Jeder Aufruf von Feroxbuster hat den grundsätzlichen Aufbau:

$ feroxbuster -u < URL> 

Die Angabe von Parameter ist optional, daher reicht für einen einfachen Aufruf nur die Übergabe einer URL.

$ feroxbuster -u http://webscantest.com
Feroxbuster Ausgabe
Feroxbuster Ausgabe
Feroxbuster InterfaceFeroxbuster Ausgabe

Feroxbuster kann sehr flexibel konfiguriert werden und für die unterschiedlichsten Szenarien individuell angepasst werden. Das nachfolgende Beispiel zeigt einen Aufruf, bei dem Feroxbuster ausschließlich nach PHP-Dateien sucht und die Wortliste common.txt verwendet.

$ feroxbuster -u http://webscantest.com -x php -w vim /usr/share/seclists/Discovery/Web-Content/common.txt

Fazit Feroxbuster

Feroxbuster arbeitet sehr schnell, bietet einen großen Funktionsumfang und kann flexibel konfiguriert werden. Dank der rekursiven Suche, den flexiblen Filtern und der integrierten Verwendung von Proxys können sehr viele Einsatzszenarien damit abgedeckt werden. Die sehr gute Dokumentation und die aktive Entwicklung machen Feroxbuster zu einem Top-Tool in diesem Bereich und sollte zu jeder Standardausstattung eines Website-Pentesters gehören.

Kali Linux 2021.2 Artikelserie

Dieser Blog-Artikel ist Teil der Kali Linux 2021.2 Artikelserie, bei der ich mich intensiver mit den neuen Anwendungen der aktuellen Version beschäftige.

Über Tobias Scheible

Tobias Scheible

Hallo, mein Name ist Tobias Scheible. Ich bin begeisterter Informatiker und Sicherheitsforscher mit den Schwerpunkten Cyber Security und IT-Forensik. Mein Wissen teile ich gerne anhand von Fachartikeln hier in meinem Blog und in meinem Fachbuch. Als Referent halte ich Vorträge und Workshops für Verbände und Unternehmen u. a. auch offene Veranstaltungen für den VDI und die IHK.