
Herramienta de enumeración de subdominios de múltiples fuentes con más de 50 módulos de recopilación, fuerza bruta DNS, análisis pasivo de DNS, transparencia de certificados, extracción de motores de búsqueda y detección de toma de control de subdominios para reconocimiento.
👊OneForAll es una poderosa herramienta de recolección de subdominios 📝English Document
📢 Por favor, tómate un tiempo para leer este documento, te ayudará a familiarizarte rápidamente con OneForAll!
OneForAll está desarrollado y probado en Python 3.6.0. OneForAll requiere una versión superior a Python 3.6.0 para ejecutarse. Para instalar el entorno Python, consulta la Guía de instalación de Python 3. Ejecuta los siguientes comandos para verificar las versiones de Python y pip3:
python -V
pip3 -V
Si ves una salida similar a la siguiente, el entorno Python está correcto:
Python 3.6.0
pip 19.2.2 from C:\Users\shmilylty\AppData\Roaming\Python\Python36\site-packages\pip (python 3.6)
Debido a que este proyecto está en desarrollo, se actualizará y mejorará constantemente. Al descargar, usa git clone para clonar el último repositorio de código, lo que también facilita futuras actualizaciones. No se recomienda descargar desde Releases, ya que las versiones allí se actualizan lentamente y no es fácil actualizar. Este proyecto ya tiene un espejo en 码云 (Gitee) en China. Se recomienda usar Gitee para clonar más rápido:
git clone https://gitee.com/shmilylty/OneForAll.git
或者:
git clone https://github.com/shmilylty/OneForAll.git
Puedes instalar las dependencias de OneForAll mediante pip3. A continuación se muestra un ejemplo de instalación de dependencias con pip3 en sistema Windows: Nota: si tu Python3 está instalado en el directorio de Archivos de programa del sistema, por ejemplo C:\Program Files\Python36, ejecuta el símbolo del sistema como administrador para ejecutar los siguientes comandos!
cd OneForAll/
python3 -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
python3 oneforall.py --help
Para otras plataformas, consulta Instalación de dependencias. Si encuentras problemas al compilar alguna biblioteca de dependencias durante la instalación, consulta las soluciones en el documento . Si aún no se puede resolver, no dudes en unirte al grupo para informar del problema.
Primero descarga y edita el archivo de configuración, agrega tu propia api y configuraciones personalizadas, y mantén la estructura de archivos original
config
├── api.py
├── default.py
├── __init__.py
├── log.py
└── setting.py
Extrae la imagen y ejecuta, donde ~/.config se reemplaza con la ruta de la carpeta donde se encuentra tu propio archivo de configuración
docker pull shmilylty/oneforall
docker run -it --rm -v ~/results:/OneForAll/results -v ~/.config:/OneForAll/config shmilylty/oneforall --target example.com run
Los parámetros se añaden directamente al final del comando. Los resultados se generan en el directorio local ~/results. Si deseas guardarlos en otra ubicación, puedes modificarlo tú mismo.
Si instalaste las dependencias mediante pip3, usa los siguientes comandos para ejecutar el ejemplo:
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./example.txt run
Tomando el comando python3 oneforall.py --target example.com run como ejemplo, OneForAll generará los resultados correspondientes en el directorio results después de ejecutarse correctamente con los parámetros predeterminados:

example.com.csv es el resultado de la recolección de subdominios para cada dominio principal.
all_subdomain_result_1583034493.csv es el resumen de los resultados de todos los subdominios recolectados en cada ejecución de OneForAll, incluye example.com.csv, lo que facilita la obtención de todos los resultados en escenarios de recolección por lotes.
result.sqlite3 es la base de datos SQLite3 que almacena los resultados de los subdominios recolectados en cada ejecución de OneForAll. Su estructura de base de datos es la siguiente:

La tabla similar a example_com_origin_result almacena los resultados iniciales de recolección de subdominios de cada módulo.
La tabla similar a example_com_resolve_result almacena los resultados después de la resolución de subdominios.
La tabla similar a almacena los resultados de la recolección anterior de subdominios (se genera después de al menos dos recolecciones).
Los parámetros de línea de comandos solo proporcionan algunos parámetros comunes. Para una configuración más detallada, consulta setting.py. Si crees que faltan algunos parámetros que se usan con frecuencia en la interfaz de comandos o tienes algún problema, no dudes en informar. Por razones obvias, si deseas utilizar algunas interfaces de recolección bloqueadas, primero configura el proxy en setting.py. Algunos módulos de recolección requieren proporcionar una API (la mayoría se pueden obtener gratuitamente registrando una cuenta). Si necesitas usarlos, configura la información de la API en api.py. Si no los usas, ignora los mensajes de error relacionados. (Para obtener detalles sobre los módulos, consulta Descripción de módulos de recolección)
La interfaz de línea de comandos de OneForAll se basa en Fire implementada. Para usos más avanzados de Fire, consulta Usando Fire CLI.
oneforall.py es la entrada principal del programa. oneforall.py puede llamar a módulos como brute.py, takerover.py y dbexport.py. Para facilitar la realización de fuerza bruta de subdominios, se separó brute.py; para facilitar la verificación de riesgos de takeover de subdominios, se separó takerover.py; para facilitar la exportación de la base de datos, se separó dbexport.py. Estos módulos se pueden ejecutar de forma independiente y aceptan parámetros más detallados. Si deseas usarlos por separado, consulta Ayuda de uso.
❗Nota: Cuando encuentres problemas o dudas durante el uso, primero busca respuestas en Issues usando la búsqueda, y también puedes consultar Preguntas frecuentes y respuestas.
Dirección del proyecto: https://github.com/shmilylty/OneForAll
En las pruebas de penetración, la importancia de la recolección de información es evidente. La recolección de subdominios es una parte esencial y muy importante de la recolección de información. Actualmente, hay muchas herramientas de recolección de subdominios de código abierto en línea, pero siempre existen algunos de los siguientes problemas:
Para resolver estos puntos débiles, nació este proyecto. Como su nombre indica, espero que OneForAll sea una herramienta definitiva y poderosa de recolección rápida de subdominios que integre las fortalezas de muchas herramientas🔨.
Actualmente OneForAll todavía está en desarrollo, seguramente tiene muchos problemas y áreas de mejora. Los expertos son bienvenidos a enviar Issues y PR. Si te resulta útil, dale una estrella✨. Actualmente hay un grupo de QQ dedicado a la comunicación y retroalimentación de OneForAll👨👨👦👦: 824414244 (Verificación para unirse al grupo: Recolección de información).
censys_api, certspotter, crtsh, entrust, google, spyse_api)axfr, verificación de archivo de política de dominio cruzado cdx, verificación de certificado HTTPS cert, verificación de política de seguridad de contenido csp, verificación de archivo robots robots, verificación de archivo sitemap sitemap, enumeración de dominios DNS mediante registros NSEC . Se agregarán módulos como NSEC3 más adelante.)Si tienes otras ideas geniales, ¡no dudes en decírmelas! 😎
Para más información, consulta Explicación de la estructura de directorios.
El directorio docs de este proyecto también proporciona algunas ayudas y explicaciones, como Explicación de fuentes de diccionarios de subdominios, Flujo de juicio de resolución comodín.
¡Gracias a estas excelentes bibliotecas de Python!
Este proyecto utiliza el formato de versiones semánticas SemVer para la gestión de versiones. Puedes consultar Notas de cambios para conocer el historial de cambios.
Para más información, consulta Plan de desarrollo futuro.
¡Damos una calurosa bienvenida a todos los expertos para que contribuyan a mejorar este proyecto!
Puedes ver todos los contribuidores y sus contribuciones en el Documento de contribuidores. Gracias a ellos por hacer que OneForAll sea más potente y fácil de usar.
Si sientes que este proyecto te ha ayudado, puedes invitarme a un café como estímulo :)

Este proyecto está bajo la licencia GPL-3.0. Para más detalles, consulta LICENSE.
¡Gracias a todos los proyectos de código abierto de recolección de subdominios en línea!
¡Gracias a los miembros de A-Team por sus entusiastas y desinteresadas respuestas a preguntas!
Esta herramienta solo puede utilizarse en la construcción de seguridad empresarial con la autorización legal suficiente. Durante el uso de esta herramienta, debe asegurarse de que todas sus acciones cumplan con las leyes y regulaciones locales. Si realiza alguna acción ilegal mientras utiliza esta herramienta, asumirá todas las consecuencias. Todos los desarrolladores y contribuidores de esta herramienta no asumen ninguna responsabilidad legal o solidaria. A menos que haya leído, comprendido completamente y aceptado todos los términos de este acuerdo, no instale ni utilice esta herramienta. Su uso o cualquier otra forma expresa o implícita de aceptación de este acuerdo se considerará como que ha leído y acepta las condiciones de este acuerdo.
Ejecuta los siguientes comandos para actualizar el proyecto (puede guardar las modificaciones a /config/setting.py y /config/api.py):
git stash # Guarda temporalmente los cambios locales
git fetch --all # Obtiene las actualizaciones del proyecto
git pull # Descarga y sobrescribe
git stash pop # Restaura los cambios locales
example_com_last_resultLa tabla similar a example_com_now_result almacena los resultados actuales de recolección de subdominios. En general, basta con prestar atención a esta tabla.
Para más información, consulta Explicación de campos.
Ayuda de oneforall.py
La siguiente información de ayuda puede no ser la más reciente. Puedes usar python oneforall.py --help para obtener la información de ayuda más actualizada.
python oneforall.py --help
NAME
oneforall.py - OneForAll帮助信息
SYNOPSIS
oneforall.py COMMAND | --target=TARGET <flags>
DESCRIPTION
OneForAll是一款功能强大的子域收集工具
Example:
python3 oneforall.py version
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./domains.txt run
python3 oneforall.py --target example.com --valid None run
python3 oneforall.py --target example.com --brute True run
python3 oneforall.py --target example.com --port small run
python3 oneforall.py --target example.com --fmt csv run
python3 oneforall.py --target example.com --dns False run
python3 oneforall.py --target example.com --req False run
python3 oneforall.py --target example.com --takeover False run
python3 oneforall.py --target example.com --show True run
Note:
参数alive可选值True,False分别表示导出存活,全部子域结果
参数port可选值有'default', 'small', 'large', 详见config.py配置
参数fmt可选格式有 'csv','json'
参数path默认None使用OneForAll结果目录生成路径
ARGUMENTS
TARGET
单个域名(二选一必需参数)
TARGETS
每行一个域名的文件路径(二选一必需参数)
FLAGS
--brute=BRUTE
s
--dns=DNS
DNS解析子域(默认True)
--req=REQ
HTTP请求子域(默认True)
--port=PORT
请求验证子域的端口范围(默认只探测80端口)
--valid=VALID
只导出存活的子域结果(默认False)
--fmt=FMT
结果保存格式(默认csv)
--path=PATH
结果保存路径(默认None)
--takeover=TAKEOVER
检查子域接管(默认False)
dnssecarchivecrawl, commoncrawl. Este módulo aún está en depuración, y necesita ser ampliado y mejorado.)bevigil_api, binaryedge_api, bufferover, cebaidu, chinaz, chinaz_api, circl_api, cloudflare, dnsdb_api, dnsdumpster, hackertarget, ip138, ipv4info_api, netcraft, passivedns_api, ptrarchive, qianxun, rapiddns, riddler, robtex, securitytrails_api, sitedossier, threatcrowd, wzpc, ximcx)srv, y consulta de registros MX, NS, SOA, TXT de DNS para recolectar subdominios)alienvault, riskiq_api, threatbook_api, threatminer, virustotal, virustotal_api. Este módulo aún necesita ser ampliado y mejorado.)ask, baidu, bing, bing_api, duckduckgo, exalead, fofa_api, gitee, github, github_api, google, google_api, shodan_api, so, sogou, yahoo, yandex, zoomeye_api). En los módulos de búsqueda, excepto los motores de búsqueda especiales, los motores de búsqueda generales admiten la exclusión automática, la búsqueda completa y la búsqueda recursiva.txt, csv, json.