
Utilidad de fuerza bruta asíncrona para DNS en Python 3.5+
Una herramienta para Python 3.5+ que utiliza asyncio para forzar por fuerza bruta nombres de dominio de forma asíncrona.

Es rápida. Las pruebas comparativas en hosts VPS pequeños sitúan alrededor de 100k resoluciones DNS en 1.5-2 minutos. Se usó una máquina Amazon M3 para realizar 1 millón de solicitudes en poco más de 3 minutos. El rendimiento puede variar. Probablemente sea mejor evitar usar los resolutores de Google si buscas velocidad puramente.
AVISO
$ pip install aiodnsbrute
Nota: se recomienda encarecidamente usar un virtualenv.
Alternativamente, puedes instalar de la forma habitual:
$ git clone https://github.com/blark/aiodnsbrute.git
$ cd aiodnsbrute
$ python setup.py install .
Obtén ayuda:
$ aiodnsbrute --help
Usage: cli.py [OPTIONS] DOMAIN
aiodnsbrute es una herramienta de línea de comandos para forzar por fuerza bruta nombres de dominio
utilizando el módulo asyncio de Python.
crédito: blark (@markbaseggio)
Options:
-w, --wordlist TEXT Lista de palabras a usar para la fuerza bruta.
-t, --max-tasks INTEGER Número máximo de tareas a ejecutar de forma asíncrona.
-r, --resolver-file FILENAME Un archivo de texto con una lista de resolutores DNS
a utilizar, uno por línea, los comentarios comienzan con #.
Por defecto: usar resolutores del sistema
-v, --verbosity Aumenta la verbosidad de la salida
-o, --output [csv|json|off] Guarda los resultados en DOMAIN.csv/json (extensión
añadida automáticamente cuando no se usa -f).
-f, --outfile FILENAME Nombre del archivo de salida. Usa '-f -' para enviar la
salida a stdout sobrescribiendo la salida normal.
--query / --gethostbyname Tipo de consulta DNS a usar; query (por defecto) debería
ser más rápido, pero no devuelve información CNAME.
--wildcard / --no-wildcard Detección de comodines, habilitada por defecto
--verify / --no-verify Verifica que el nombre de dominio sea válido antes de comenzar,
habilitado por defecto
--version Muestra la versión y sale.
--help Muestra este mensaje y sale.
Ejecuta una fuerza bruta con algunas opciones personalizadas:
$ aiodnsbrute -w wordlist.txt -vv -t 1024 domain.com
Ejecuta una fuerza bruta, suprime la salida normal y envía solo JSON a stdout:
$ aiodnbrute -f - -o json domain.com
...para un patrón avanzado, usa resolutores personalizados y canaliza la salida al excelente jq:
$ aiodnsbrute -r resolvers.txt -f - -o json google.com | jq '.[] | select(.ip[] | startswith("172."))'
Detección de comodines habilitada por defecto (--no-wildcard la desactiva):
$ aiodnsbrute foo.com
[*] Forzando foo.com con un máximo de 512 tareas concurrentes...
[*] Usando DNS recursivo con los siguientes servidores: ['50.116.53.5', '50.116.58.5', '50.116.61.5']
[!] Respuesta comodín detectada, ignorando respuestas que contienen ['23.23.86.44']
[*] Lista de palabras cargada, procediendo con 1000 solicitudes DNS
[+] www.foo.com 52.73.176.251, 52.4.225.20
100%|██████████████████████████████████████████████████████████████████████████████| 1000/1000 [00:05<00:00, 140.18records/s]
[*] Completado, 1 subdominio encontrado
NUEVO usa gethostbyname (detecta CNAMEs, lo que puede ser útil para la detección potencial de toma de control de subdominios)
$ aiodnsbrute --gethostbyname domain.com
Proporciona una lista de resolutores desde un archivo (ignorando líneas en blanco y las que comienzan con #), especifica -r - para leer la lista desde stdin.
$ aiodnsbrute -r resolvers.txt domain.com
ulimit -n para ver cuántos archivos abiertos están permitidos. También puedes aumentar ese número usando el mismo comando, por ejemplo, ulimit -n <2048>.