CWFF Crear Lista de Palabras Personalizadas para Fuzzing
CWFF Crear Lista de Palabras Personalizadas para Fuzzing

CWFF: Crear Lista de Palabras Personalizadas para Fuzzing

CWFF es una herramienta que crea una lista de palabras de alta calidad de descubrimiento de contenido/fuzzing para ti a la mayor velocidad posible usando la concurrencia y está fuertemente inspirada en @tomnomnom‘s Who, What, Where, When, Wordlist #NahamCon2020.

CWFF Wordlist para Fuzzing
CWFF Wordlist para Fuzzing

Uso

CWFF [-h] [--threads] [--github] [--subdomains] [--recursive] [--js-libraries] [--connected-websites] [--juicy-files] [--use-filter-model] [-o] domain

positional arguments:
  domain                Target website(ofc)

optional arguments:
  -h, --help            Show this help message and exit
  --threads             The number of maximum concurrent threads to use (Default:1000)
  --github              Collect endpoints from a given github repo (ex:https://github.com/google/flax)
  --subdomains          Extract endpoints from subdomains also while search in the wayback machine!
  --recursive           Work on extracted endpoints recursively (Adds more endpoints but less accurate sometimes)!
  --js-libraries        Extract endpoints from JS libraries also, not just the JS written by them!
  --connected-websites  Include endpoints extracted from connected websites
  --juicy-files         Include endpoints extracted from juicy files like sitemap.xml and robots.txt
  --use-filter-model    Filter result endpoints with filter_model file
  -o                    The output directory for the endpoints and parameters. (Default: website name)

Descripción

Así que básicamente recoge puntos finales y parámetros del objetivo y sus subdominios usando muchas fuentes de las que hablaremos ahora:

  1. Archive wayback machine: pasa por todos los registros del sitio web del objetivo y sus subdominios y extrae urls que dan un código de estado de 200.
  1. Los archivos Javascript que se recogen durante la fase wayback y los que se recogen analizando la página de destino para la etiqueta <script>

CWFF trata de separar las librerías JS de los archivos JS escritos por desarrolladores de sitios web y lo hace buscando en los nombres de los archivos JS. De forma predeterminada, CWFF extrae los puntos finales de los archivos JS escritos sólo por los desarrolladores, para usar las bibliotecas JS (en su mayoría no útiles) activa el indicador --js-libraries.

  1. Common crawl CDX index y Alien vault OTX (Open Threat Exchange)
  2. Si le dieras a CWFF el indicador --juicy-files, también extraería puntos finales de archivos como Sitemap.xml y robots.txt (Podría añadir más en el futuro)
  3. Si le dieras a CWFF un repositorio github usando el indicador --github, extraería las rutas de ese repositorio usando la API de Github (No se necesita una clave de API).

Sólo para dejarlo claro, CWFF usaría las rutas de los archivos y directorios sólo para no extraer los puntos finales desde el interior de los propios archivos!

  1. Con el uso del indicador --connected-websites, La CWFF utilizaría la API de los sitios web (necesita la clave pero es gratuita) para extraer los sitios web conectados al objetivo del perfil de relación y luego extrae los puntos finales de la fuente de estos sitios web.

Nota

Puedes obtener tu clave de la API desde esta página y establecer la variable en el archivo API_keys.py

Después de recolectar los puntos finales de todos estos puntos finales si se usaba el indicador--recursive, CWFF extraería recursivamente partes de los puntos finales recolectados.

  • Ejemplo: un punto final como parseq/javadoc/1.1.0/com se convertirá en todos estos puntos finales: parseq/javadoc/1.1.0/com parseq/javadoc/1.1.0/ parseq/javadoc/ parseq/ javadoc/ 1.1.0/ com

Nota

Todos los puntos finales/parámetros recogidos se limpian y clasifican sin duplicados para tener un resultado único.

Filtrando Resultados

Por supuesto, después de todas estas fuentes y este trabajo, habría muchos puntos finales no deseados/inútiles entre los importantes y aquí el filtrado entra en juego para ahorrar tiempo y recursos.

En CWFF se pueden detectar y eliminar los puntos finales no deseados mediante tres métodos:

  • Eliminar los puntos finales que terminan con cualquier cadena de una lista dada (extensiones por ejemplo).
  • Eliminar los puntos finales que contengan cualquier cadena de una lista determinada de cadenas.
  • Y finalmente el grande, eliminar los puntos finales que coinciden con cualquier expresión regular de una lista dada también.

Todas estas opciones de filtro pueden ser dadas por la configuración de las variables en el archivo filter_model.py y luego usar el indicador --use-filter-model mientras se inicia CWFF. Si no tienes una idea de cómo configurar estas variables, mira los comentarios que dejé en el archivo que es el que más uso y en la captura de pantalla bajó el número de puntos finales recogidos de 26.177 a 3629. En caso de que hayas olvidado usar el filtro mientras ejecutas CWFF, no te preocupes, te tengo cubierto 😄

Puedes usar el script filter.py to para filtrar los puntos finales que tienes de la siguiente manera y cargaría el archivo filter_model.py automáticamente sin tener que volver a ejecutar CWFF:

python filter.py wordlist.txt output.txt

Requisitos

  • Python 3.6+
  • Debería funcionar en cualquier sistema operativo, pero sólo lo probé en Linux Manjaro.
  • Las siguientes instrucciones

Instalación

python3 -m pip install -r requirements.txt
python3 cwff.py --help

Contacto

Por Hacer

  • Fusionar los puntos finales de forma recursiva
  • Extraer palabras únicas del sitio web comparándolas con RFC.

Descargo de Responsabilidad

CWFF fue creado para ayudar en las pruebas de penetración y no es responsable de ningún mal uso o propósito ilegal.

Copiar un código de esta herramienta o usarlo en otra herramienta se acepta si se menciona la fuente.

My Cart Close (×)

Tu carrito está vacío
Ver tienda