
Herramienta de enumeración de URL y descubrimiento de contenido en Python con soporte de múltiples hilos.
# Acerca de
<p align="center">
<a href="https://twitter.com/0xTas/">
<img alt="0xTas Twitter" src="https://img.shields.io/twitter/follow/0xTas?color=52E29A&label=@0xTas&logo=Twitter&style=flat-square"></a>
<a href="https://www.youtube.com/tasmainia300films">
<img alt="0xTas Youtube" src="https://img.shields.io/youtube/channel/subscribers/UChYfKpUc7POZvknfqfNDdJw?color=FF5CB2&label=Subscribers&logo=Youtube&logoColor=3EC2FB&style=flat-square"></a>
<a href="https://github.com/0xTas/zenbuster/commits/master">
<img alt="GitHub Commits" src="https://img.shields.io/github/last-commit/0xTas/zenbuster?color=%2352E29A&label=Last%20Commit&logo=Github&logoColor=%2352E29A&style=flat-square"></a>
<a href="https://github.com/0xTas/zenbuster/archive/refs/heads/master.zip">
<img alt="GitHub Download" src="https://img.shields.io/github/repo-size/0xTas/zenbuster?color=3EC2FB&label=Download%20Repo&logo=Github&logoColor=FF89F1&style=flat-square"></a>
</p>
*ZenBuster es una herramienta de enumeración de URL multihilo y multiplataforma escrita en Python por Zach Griffin* ([@0xTas](https://twitter.com/0xTas)).
Escribí esta herramienta para profundizar mi familiaridad con Python y ayudar a aumentar mi comprensión de las herramientas de Ciberseguridad en general.
ZenBuster puede no ser la herramienta más rápida o completa de su tipo. Sin embargo, es simple de usar, razonablemente flexible y, en la práctica, solo marginalmente más lenta que otras herramientas "probadas y verdaderas" como Gobuster.
Personalmente, la he estado usando para ayudarme a resolver desafíos CTF en plataformas como TryHackMe, y he encontrado que mi implementación es satisfactoriamente confiable.
**Este software está destinado para su uso en desafíos CTF, o por profesionales de seguridad para recopilar información sobre sus objetivos:**
- *Es capaz de enumerar por fuerza bruta subdominios y también recursos URI (directorios/archivos).*
- *Ambos métodos de enumeración requieren el uso de un archivo de lista de palabras o diccionario apropiado.*
- **Características incluyen:**
1. El formato de nombre de host admite estándar, IPv4 e IPv6.
2. Soporte para registrar resultados en un archivo con *-o [filename]*.
3. Especificar puertos personalizados para servidores web no estándar con *-p <port>*.
4. Extensiones de archivo opcionales en modo directorio con *-x <extensions>*.
5. Modo silencioso para una salida menos distractora con *-q*.
6. El color se puede deshabilitar para una salida menos distractora con *-nc* / *-nl*.
7. Agregar a la lista de códigos de estado HTTP a ignorar (por defecto 5xx, 404) con *-ic*.
8. Ignorar longitudes de contenido de respuesta específicas con *-fl*.
9. **Probado en versiones de Python 3.10 y 3.11, con soporte teórico para versiones >= 3.6**
## PRECAUCIÓN/DESCARGO DE RESPONSABILIDAD
*ZenBuster es capaz de producir un número potencialmente no deseado de solicitudes HTTP en un corto período de tiempo.*
**Los desarrolladores y colaboradores no son responsables por ningún daño causado por el mal uso o abuso de este software.**
***¡Por favor, Enumere de manera Responsable!***
## Licencia
<p align="center">
<a href="https://github.com/0xTas/zenbuster/blob/master/LICENSE">
<img alt="GNU GPL-3.0" src="https://img.shields.io/github/license/0xTas/zenbuster?color=%2352E2E0&label=License&logo=GNU&logoColor=%23FFFFFF&style=flat-square"></a>
</p>
ZenBuster está licenciado bajo la Licencia GNU GPLv3, [**ver aquí**](https://github.com/0xTas/zenbuster/blob/master/LICENSE) para más información.
## Créditos
El arte ASCII Yin-Yang en los banners fue creado por [Joan G. Stark (*jgs*)](http://www.asciiworld.com/+-joan_stark_jgs-+.html) y [Hayley Jane Wakenshaw (*hjw*)](http://www.asciiworld.com/+-hayley_jane_wakenshaw_hjw-+.html).
Se realizaron modificaciones por mí, cuando se especifica con: '*zg*'.
---
# Demostración
**Página de Ayuda:**<br>

**Modo de Enumeración de Directorios:**<br>

**Modo de Enumeración de Subdominios:**<br>

---
# Instalación
Primero, asegúrese de que la versión de Python **>=** 3.6 esté instalada, luego clone el repositorio con:
`git clone https://github.com/0xTas/zenbuster.git`
Luego, `cd zenbuster` y, si está en Linux: `chmod +x zenbuster.py`.
### Dependencias
ZenBuster depende de 3 bibliotecas externas para funcionar, y se recomienda instalarlas con:
`pip install -r requirements.txt`
Los módulos que se instalarán y sus propósitos son los siguientes:
1. [Python requests](https://pypi.org/project/requests/)
- La columna vertebral de cada solicitud de enumeración. Sin esto, el script no funcionará.
2. [termcolor](https://pypi.org/project/termcolor/)
- Habilita la salida de terminal coloreada. No es crítico, el script aún puede ejecutarse sin color si esto no está presente.
3. [colorama (solo Windows)](https://pypi.org/project/colorama/)
- Prepara la terminal de Windows para aceptar códigos de color ANSI (de termcolor). No es crítico.
Estas dependencias se pueden instalar manualmente, con `pip` usando requirements.txt, o mediante la interacción con el script al primer inicio.
---
# Uso
Una vez instaladas las dependencias, puede ejecutar el programa de las siguientes maneras:
### En Linux (+Mac?):
`./zenbuster.py [options]` **o** `python3 zenbuster.py [options]`
### En Windows:
`python zenbuster.py [options]`
### [Opciones]
Bandera Corta |Bandera Larga |Propósito
--------------|-------------|-------------
-h |--help |Muestra la pantalla de ayuda y sale
-d |--dirs |Habilita el Modo de Enumeración de Directorios
-s |-ssl |Obliga al uso de HTTPS en las solicitudes
-v |--verbose |Imprime información detallada en terminal/log
-q |--quiet |Salida mínima en terminal hasta los resultados finales
-nc |--no-color |Deshabilita la salida coloreada de terminal
-nl |--no-lolcat |Deshabilita el banner impreso por lolcat (solo Linux)
-ic \<códigos\> |--ignore-codes |Lista de códigos de estado a excluir de los resultados.
-fl \<longitudes\> |--filter-lengths |Lista de Longitudes de Respuesta a Ignorar.
-u \<hostname\> |--host |Host a escanear
-w \<wordlist\> |--wordlist |Ruta al archivo de lista de palabras/diccionario
-x \<exts\> |--ext |Lista separada por comas de extensiones de archivo (solo directorios)
-p <puerto#> |--port |Opción de puerto personalizado para servidores web no estándar
-o [nombre_archivo] |--out-file |Registrar resultados en un archivo (acepta nombre/ruta personalizado)
### Ejemplo de Uso
`./zenbuster.py -d -w /usr/share/wordlists/dirb/common.txt -u target.thm -v`
`python3 zenbuster.py -w ../subdomains.txt --host target.thm --ssl -O myResults.log`
`zenbuster -w subdomains.txt -u target.thm --quiet -ic 400, 403` (Con alias en .bashrc)
---
# Actualización
¡Actualizar ZenBuster es fácil! Simplemente vaya a la carpeta de instalación (`cd zenbuster`) y `git pull`. ¡Eso es todo!
---
# Funcionalidades/Mejoras Planeadas
- Niveles aumentados de verbosidad opcional.
- Permitir limitación opcional del número de hilos de tarea.
- ~~Permitir a los usuarios modificar la lista de códigos de estado ignorados.~~ **HECHO.**
- Permitir un mayor control del usuario sobre varios encabezados de solicitud.
- ~~Permitir ignorar opcionalmente respuestas basadas en la longitud del contenido.~~ **HECHO.**
- Expandir la enumeración de subdominios para incluir métodos OSINT en lugar de solo fuerza bruta.
- Explorar una solución más completa y legible en el código fuente para una salida colorida elegante (posiblemente usando [rich](https://pypi.org/project/rich/)).
---
# Problemas/Limitaciones Conocidas
- Enumerar endpoints largos puede resultar en una salida de terminal fea debido al ajuste de línea en ventanas de consola más pequeñas. *Se recomienda registrar en un archivo, especialmente en Windows.*
- Si el host objetivo es un vHost en un servidor web compartido, la enumeración a través de IP puede no funcionar como se espera. *Use dominio/nombre de host en su lugar.*
- Ignorar códigos de estado de redirección (3xx) con *-ic* no funciona si el código de estado al final de la ruta de redirección tampoco se ignora.
---
# Versión
<p align="center">
<a href="https://github.com/0xtas/zenbuster">
<img alt="ZenBuster Version" src="https://img.shields.io/badge/Version-1.3-blue"></a>
</p>
**ZenBuster actualmente está en la versión 1.3**