Feroxbuster Ataque Navegación Forzada en Rust
Feroxbuster Ataque Navegación Forzada en Rust

Feroxbuster: Herramienta Ataque de Navegación Forzada en Rust

feroxbuster es una herramienta diseñada para realizar Forced Browsing.

La navegación forzada es un ataque en el que el objetivo es enumerar y acceder a recursos que no están referenciados por la aplicación web, pero que siguen siendo accesibles para un atacante.

feroxbuster utiliza la fuerza bruta combinada con una lista de palabras para buscar contenido no vinculado en los directorios de destino. Estos recursos pueden almacenar información sensible sobre aplicaciones web y sistemas operativos, como el código fuente, las credenciales, el direccionamiento de la red interna, etc.

Este ataque también se conoce como Localización Predecible de Recursos, Enumeración de Archivos, Enumeración de Directorios y Enumeración de Recursos.

Acerca de ferox

Ferox es la abreviatura de Ferric Oxide (Óxido Férrico/de hierro). El Óxido Férrico, en pocas palabras, es rust (óxido). El nombre “rustbuster” fue tomado, así que me decidí por una variación.

Demostración Feroxbuster
Demostración Feroxbuster

Instalación

Descargue una versión

Las versiones para múltiples arquitecturas se pueden encontrar en la sección Releases. La última versión para cada uno de los siguientes sistemas puede descargarse y ejecutarse como se muestra a continuación.

Linux (32 and 64-bit) & MacOS

curl -sL https://raw.githubusercontent.com/epi052/feroxbuster/master/install-nix.sh | bash

Windows x86

https://github.com/epi052/feroxbuster/releases/latest/download/x86-windows-feroxbuster.exe.zip
Expand-Archive .\feroxbuster.zip
.\feroxbuster\feroxbuster.exe -V

Windows x86_64

Invoke-WebRequest https://github.com/epi052/feroxbuster/releases/latest/download/x86_64-windows-feroxbuster.exe.zip -OutFile feroxbuster.zip
Expand-Archive .\feroxbuster.zip
.\feroxbuster\feroxbuster.exe -V

Instalación Snap

También puedes instalarlo utilizando snap

sudo snap install feroxbuster

Lo único que se obtiene aquí es que el paquete de instantáneas sólo puede leer listas de palabras de unos pocos lugares específicos. Hay unas cuantas soluciones posibles, de las cuales dos se muestran a continuación.

Si la wordlist está en la misma partición que tu directorio principal, puede ser enlazada a ~/snap/feroxbuster/common

ln /path/to/the/wordlist ~/snap/feroxbuster/common
./feroxbuster -u http://localhost -w ~/snap/feroxbuster/common/wordlist

Si la wordlist está en una partición separada, el enlace (simbólico) duro no funcionará. Necesitarás copiarlo en el directorio snap.

cp /path/to/the/wordlist ~/snap/feroxbuster/common
./feroxbuster -u http://localhost -w ~/snap/feroxbuster/common/wordlist

Homebrew en MacOS y Linux

Instalar usando Homebrew a través de tap

MacOS

brew tap tgotwig/feroxbuster
brew install feroxbuster

Linux

brew tap tgotwig/linux-feroxbuster
brew install feroxbuster

Configuración

Valores por defecto

La configuración comienza con los siguientes valores predeterminados incorporados en el binario:

  • timeout: 7 seconds (segundos)
  • follow redirects: false
  • wordlist: /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
  • threads: 50
  • verbosity: 0 (no logging enabled)
  • scan_limit: 0 (no limit imposed on concurrent scans)
  • status_codes: 200 204 301 302 307 308 401 403 405
  • user_agent: feroxbuster/VERSION
  • recursion depth: 4
  • auto-filter wildcards – true
  • output: stdout
  • save_state: true (create a state file in cwd when Ctrl+C is received)

Análisis de línea de mando

Finalmente, después de analizar el archivo de configuración disponible, cualquier opción/argumento dado en la línea de comandos anulará cualquier valor que se haya establecido como valor incorporado o del archivo de configuración.

USAGE:
    feroxbuster [FLAGS] [OPTIONS] --url <URL>...

FLAGS:
    -f, --add-slash        Append / to each request
    -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            Only print URLs; Don't print status codes, response size, running config, etc...
    -r, --redirects        Follow redirects
        --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 <FILE>                  Output file to write log entries (use w/ --json for JSON entries)
    -d, --depth <RECURSION_DEPTH>           Maximum recursion depth, a depth of 0 is infinite recursion (default: 4)
    -x, --extensions <FILE_EXTENSION>...    File extension(s) to search for (ex: -x php -x pdf js)
    -N, --filter-lines <LINES>...           Filter out messages of a particular line count (ex: -N 20 -N 31,30)
    -X, --filter-regex <REGEX>...           Filter out messages via regular expression matching on the response's body
                                            (ex: -X '^ignore me$')
    -S, --filter-size <SIZE>...             Filter out messages of a particular size (ex: -S 5120 -S 4927,1970)
    -C, --filter-status <STATUS_CODE>...    Filter out status codes (deny list) (ex: -C 200 -C 401)
    -W, --filter-words <WORDS>...           Filter out messages of a particular word count (ex: -W 312 -W 91,82)
    -H, --headers <HEADER>...               Specify HTTP headers (ex: -H Header:val 'stuff: things')
    -o, --output <FILE>                     Output file to write results to (use w/ --json for JSON entries)
    -p, --proxy <PROXY>                     Proxy to use for requests (ex: http(s)://host:port, socks5(h)://host:port)
    -Q, --query <QUERY>...                  Specify URL query parameters (ex: -Q token=stuff -Q secret=key)
    -R, --replay-codes <REPLAY_CODE>...     Status Codes to send through a Replay Proxy when found (default: --status-
                                            codes value)
    -P, --replay-proxy <REPLAY_PROXY>       Send only unfiltered requests through a Replay Proxy, instead of all
                                            requests
        --resume-from <STATE_FILE>          State file from which to resume a partially complete scan (ex. --resume-from
                                            ferox-1606586780.state)
    -L, --scan-limit <SCAN_LIMIT>           Limit total number of concurrent scans (default: 0, i.e. no limit)
    -s, --status-codes <STATUS_CODE>...     Status Codes to include (allow list) (default: 200 204 301 302 307 308 401
                                            403 405)
    -t, --threads <THREADS>                 Number of concurrent threads (default: 50)
        --time-limit <TIME_SPEC>            Limit total run time of all scans (ex: --time-limit 10m)
    -T, --timeout <SECONDS>                 Number of seconds before a request times out (default: 7)
    -u, --url <URL>...                      The target URL(s) (required, unless --stdin used)
    -a, --user-agent <USER_AGENT>           Sets the User-Agent (default: feroxbuster/VERSION)
    -w, --wordlist <FILE>                   Path to the wordlist

Explicación de la pantalla del escáner

feroxbuster intenta ser intuitivo y fácil de entender, sin embargo, si te preguntas acerca de cualquiera de los resultados del escaneo y lo que significa, esta es la sección indicada!

Recurso descubierto

Cuando feroxbuster encuentra una respuesta que no ha sido filtrada, se reporta por encima de las barras de progreso y se ve similar a lo que se muestra abajo.

El número de líneas, palabras y bytes mostrados aquí pueden ser usados para filtrar esas respuestas

Recurso descubierto
Recurso descubierto

Barra de progreso del escaneo general

La barra de progreso superior, de color amarillo, registra el estado general del escaneo. Sus campos se describen en la imagen de abajo.

Barra de progreso
Barra de progreso

Barra de progreso del escaneo del directorio

Todas las demás barras de progreso, de color cian, representan un escaneo de un directorio en particular y se verán similares a las de abajo.

Barra escaneo directorio

Ejemplo de uso

Múltiples valores

Las opciones que toman múltiples valores son muy flexibles. Considera las siguientes formas de especificar las extensiones:

./feroxbuster -u http://127.1 -x pdf -x js,html -x php txt json,docx

El comando de arriba añade .pdf, .js, .html, .php, .txt, .json, y .docx a cada url

Todos los métodos anteriores (flags múltiples, separación de espacios, separación de comas, etc…) son válidos e intercambiables. Lo mismo ocurre con las url, los encabezados, los códigos de estado, las consultas y los filtros de tamaño.

Incluir encabezados

./feroxbuster -u http://127.1 -H Accept:application/json "Authorization: Bearer {token}"

IPv6, escaneo no recursivo con registro de nivel de información habilitado

./feroxbuster -u http://[::1] --no-recursion -vv

Leer los urls desde STDIN; canalizar sólo urls resultantes hacia otra herramienta

cat targets | ./feroxbuster --stdin --quiet -s 200 301 302 --redirects -x js | fff -s 200 -o js-files

Tráfico de proxy a través de Burp

./feroxbuster -u http://127.1 --insecure --proxy http://127.0.0.1:8080

Tráfico de proxy a través de un proxy SOCKS (incluyendo búsquedas de DNS)

./feroxbuster -u http://127.1 --proxy socks5h://127.0.0.1:9050

Extraer enlaces del cuerpo de respuesta

Busca en el cuerpo de respuestas válidas (html, javascript, etc…) para encontrar puntos finales adicionales para escanear. Esto convierte a feroxbuster en un híbrido que busca tanto contenido vinculado como no vinculado.

./feroxbuster -u http://127.1 --extract-links
Con flag extract-links

Limitar número total de escaneos simultáneos

Limitar el número de escaneos permitidos en un momento dado. La recursividad seguirá identificando nuevos directorios, pero los directorios recién descubiertos sólo pueden empezar a escanear cuando el número total de escaneos activos caiga por debajo del valor pasado a --scan-limit.

./feroxbuster -u http://127.1 --scan-limit 2
Escaneos simultáneos

Detener y reanudar los escaneos

La versión 1.9.0 añade algunas características que permiten detener completamente un escaneo y reanudar ese mismo escaneo desde un archivo en el disco.

Un simple Ctrl+C durante un escaneo creará un archivo que contiene información sobre el escaneo que fue cancelado.

Detener y reanudar escaneos
Detener y reanudar escaneos

Aplicar un límite de tiempo para ecaneo

La versión 1.10.0 añade la capacidad de establecer un tiempo máximo de ejecución, o límite de tiempo, en tu escaneo. El uso es bastante simple: un número seguido directamente por un solo carácter que representa los segundos, minutos, horas o días. feroxbuster se refiere a esta combinación como un time_spec.

Ejemplos de posibles time_specs:

  • 30s – 30 segundos
  • 20m – 20 minutos
  • 1h – 1 hora
  • 1d – 1 día (por qué??)

Se puede pasar un time_spec válido a --time-limit para forzar un cierre después de que el tiempo dado haya transcurrido.

Límite de tiempo
Límite de tiempo

Comparación con herramientas similares

Hay bastantes herramientas similares para la navegación forzada/descubrimiento de contenidos. Burp Suite Pro, Dirb, Dirbuster, etc… Sin embargo, en mi opinión, hay dos que marcan la pauta: gobuster y ffuf. Ambas son herramientas maduras, ricas en características y con un uso increíble.

Entonces, ¿por qué querrías usar feroxbuster en lugar de ffuf/gobuster? En la mayoría de los casos, probablemente no lo harás. ffuf en particular puede hacer la gran mayoría de las cosas que feroxbuster puede hacer, mientras que aún ofrece más funcionalidad. Aquí hay algunos de los casos de uso en los que feroxbuster puede encajar mejor:

  • Quieres una experiencia de uso de la herramienta simple
  • Quieres escanear a través de un proxy SOCKS
  • Quieres el auto-filtrado de las respuestas de los comodines por defecto
  • Quiere un extractor de enlaces / analizador robots.txt integrado para aumentar los puntos finales descubiertos
  • Quieres la recursión junto con alguna otra cosa mencionada anteriormente (ffuf también hace la recursión)
  • Quieres una opción de archivo de configuración para anular los valores por defecto incorporados en tus escaneos
.feroxbustergobusterffuf
rápido
fácil de usar
permite la recursividad
puede especificar parámetros de consulta
soporta proxy SOCKS
escaneo de objetivos múltiples (via stdin o multiple -u)
archivo de configuración para el valor default override
puede aceptar urls a través de STDIN como parte de pipeline
puede aceptar listas de palabras a través de STDIN
filtro basado en tamaño de respuesta, recuento de palabras y recuento de líneas
respuestas con comodines de filtro automático
realiza otros escaneos (vhost, dns, etc)
retraso en el tiempo / limitación de la tasa
extrae enlaces del body de respuesta para aumentar la cobertura de escaneo (v1.1.0)
limita el número de exploraciones recursivas simultáneas (v1.2.0)
filtra las respuestas por código de estado (v1.3.0)
pausa interactiva y reanudación del escaneo activo (v1.4.0)
reproduce sólo las solicitudes coincidentes con un proxy (v1.5.0)
filtrar las respuestas por línea y conteo de palabra (v1.6.0)
salida jso (ffuf también soporta otros formatos) (v1.7.0)
filtrar las respuestas por expresión regular (v1.8.0)
guarda el estado del escaneo en disco (puede retomar donde lo dejó) (v1.9.0)
límite máximo de tiempo de ejecución (v1.10.0)
usa robots.txt para aumentar la cobertura del escaneo (v1.10.2)
utilizar la respuesta de la página de ejemplo para filtrar fuzzy páginas similares (v1.11.0)
cancelar un escaneo recursivo interactivamente (v1.12.0)
un gran número de otras opciones

SSL Error routines

tls_process_server_certificate:certificate verify failed

En el caso de que vea un error similar a

SSL Error routines
SSL Error routines
error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913: (self signed certificate)

YSólo tienes que añadir la bandera -k|--insecure a tu comando.

feroxbuster rechaza por defecto los certificados autofirmados y otros certificados/configuraciones de sitios “inseguros”. Puedes elegir escanear estos servicios de todos modos diciéndole a feroxbuster que ignore los certificados de servidores inseguros.

Más artículos
AutoXploit Rápida Explotación basada Metasploit
AutoXploit: Rápida Explotación basada en Metasploit