
Outil d'énumération de sous-domaines multi-sources avec plus de 50 modules de collecte, force brute DNS, analyse DNS passive, transparence des certificats, scraping de moteurs de recherche et détection de prise de contrôle de sous-domaines pour la reconnaissance.
👊OneForAll est un outil puissant de collecte de sous-domaines 📝Document en anglais
📢 Veuillez prendre un moment pour lire ce document, il vous aidera à vous familiariser rapidement avec OneForAll !
OneForAll est développé et testé sur Python 3.6.0. OneForAll nécessite une version de Python supérieure à 3.6.0 pour fonctionner. Pour installer l'environnement Python, consultez le Guide d'installation de Python 3. Exécutez les commandes suivantes pour vérifier les versions de Python et pip3 :
python -V
pip3 -V
Si vous voyez une sortie similaire à celle-ci, l'environnement Python est correct :
Python 3.6.0
pip 19.2.2 from C:\Users\shmilylty\AppData\Roaming\Python\Python36\site-packages\pip (python 3.6)
Comme ce projet est en cours de développement, il sera constamment mis à jour. Utilisez git clone pour cloner le dernier dépôt de code, ce qui facilitera également les futures mises à jour. Il n'est pas recommandé de télécharger depuis Releases, car les versions y sont peu fréquentes et la mise à jour n'est pas pratique.
Ce projet a été mis en miroir sur Gitee(码云). Il est recommandé d'utiliser Gitee pour un clonage plus rapide en Chine :
git clone https://gitee.com/shmilylty/OneForAll.git
ou :
git clone https://github.com/shmilylty/OneForAll.git
Vous pouvez installer les dépendances de OneForAll avec pip3. Voici un exemple d'installation des dépendances avec pip3 sous Windows : Attention : si votre Python3 est installé dans le répertoire Program Files du système, par exemple C:\Program Files\Python36, exécutez l'invite de commande cmd en tant qu'administrateur pour exécuter les commandes suivantes !
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
Pour les autres plateformes, veuillez vous référer à Installation des dépendances. Si vous rencontrez un échec de compilation d'une dépendance lors de l'installation, consultez le document pour les solutions. Si le problème persiste, n'hésitez pas à rejoindre le groupe pour signaler le problème.
Téléchargez et éditez d'abord le fichier de configuration, ajoutez vos propres api et paramètres personnalisés, et conservez la structure de fichiers d'origine
config
├── api.py
├── default.py
├── __init__.py
├── log.py
└── setting.py
Tirez l'image et exécutez-la, où ~/.config est remplacé par le chemin du dossier contenant votre propre fichier de configuration
docker pull shmilylty/oneforall
docker run -it --rm -v ~/results:/OneForAll/results -v ~/.config:/OneForAll/config shmilylty/oneforall --target example.com run
Les paramètres sont ajoutés directement à la fin de la commande, les résultats sont sortis dans le répertoire local ~/results. Pour les enregistrer à un autre emplacement, vous pouvez modifier le chemin vous-même.
Si vous avez installé les dépendances avec pip3, utilisez la commande suivante pour exécuter l'exemple :
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./example.txt run
Prenons l'exemple de la commande python3 oneforall.py --target example.com run. Une fois OneForAll exécuté avec les paramètres par défaut, les résultats correspondants seront générés dans le répertoire results :

example.com.csv contient les résultats de collecte des sous-domaines sous chaque domaine principal.
all_subdomain_result_1583034493.csv est un fichier récapitulatif des sous-domaines collectés à chaque exécution de OneForAll, incluant example.com.csv, ce qui facilite l'obtention de tous les résultats dans un scénario de collecte par lots.
result.sqlite3 est une base de données SQLite3 stockant les sous-domaines collectés à chaque exécution de OneForAll. Sa structure de base de données est illustrée ci-dessous :

La table example_com_origin_result stocke les résultats de collecte initiaux des sous-domaines de chaque module.
La table example_com_resolve_result stocke les résultats après résolution des sous-domaines.
La table example_com_last_result stocke les résultats de la collecte précédente de sous-domaines (générée seulement après plus de deux collectes).
Les paramètres de ligne de commande ne fournissent que quelques paramètres courants. Pour une configuration plus détaillée, veuillez vous référer à setting.py. Si vous pensez que certains paramètres sont fréquemment utilisés dans l'interface de commande ou qu'il manque des paramètres, n'hésitez pas à nous faire part de vos retours. Pour des raisons évidentes, si vous devez utiliser certaines interfaces de collecte bloquées, veuillez d'abord configurer un proxy dans setting.py. Certains modules de collecte nécessitent de fournir une API (la plupart peuvent être obtenues gratuitement en s'inscrivant). Si vous avez besoin de les utiliser, veuillez configurer les informations API dans api.py. Sinon, ignorez les messages d'erreur correspondants. (Pour les modules détaillés, veuillez lire la Description des modules de collecte)
L'interface en ligne de commande de OneForAll est basée sur Fire. Pour des utilisations plus avancées de Fire, veuillez consulter Utilisation de Fire CLI.
oneforall.py est le point d'entrée principal. oneforall.py peut appeler des modules tels que brute.py, takerover.py et dbexport.py. Pour faciliter le bruteforce de sous-domaines, le fichier brute.py a été extrait ; pour vérifier les risques de prise de contrôle de sous-domaines, le fichier takerover.py a été extrait ; pour faciliter l'exportation de la base de données, dbexport.py a été extrait. Ces modules peuvent être exécutés individuellement et acceptent des paramètres plus riches. Si vous souhaitez les utiliser séparément, veuillez vous référer à Aide à l'utilisation
❗Attention : Si vous rencontrez des problèmes ou des doutes lors de l'utilisation, veuillez d'abord rechercher dans Issues à l'aide de la fonction de recherche. Vous pouvez également consulter .
Adresse du projet : https://github.com/shmilylty/OneForAll
L'importance de la collecte d'informations dans les tests de pénétration est évidente. La collecte de sous-domaines est une étape indispensable et très importante. Actuellement, de nombreux outils de collecte de sous-domaines sont open source sur Internet, mais ils présentent souvent les problèmes suivants :
Pour résoudre ces problèmes, ce projet a vu le jour. Comme son nom l'indique, je souhaite que OneForAll soit un outil ultime de collecte rapide et complète de sous-domaines, rassemblant les forces de nombreux outils 🔨.
Actuellement, OneForAll est encore en développement, il y a certainement des points à améliorer. Les contributions sous forme d'Issues et de PR sont les bienvenues. Si l'outil vous plaît, n'hésitez pas à laisser une petite étoile ✨. Un groupe QQ dédié aux échanges et aux retours sur OneForAll est disponible 👨👨👦👦 : 824414244 (Vérification du groupe : collecte d'informations).
censys_api, certspotter, crtsh, entrust, google, spyse_api)axfr, vérification des politiques de partage des ressources entre origines cdx, vérification du certificat HTTPS cert, vérification de la politique de sécurité du contenu csp, vérification du fichier robots robots, vérification du fichier sitemap sitemap, parcours du DNS via les enregistrements NSEC ; d'autres modules comme NSEC3 seront ajoutés ultérieurement)Si vous avez d'autres excellentes idées, n'hésitez pas à me le faire savoir ! 😎
Pour plus d'informations, veuillez consulter Description de la structure du répertoire.
Le répertoire docs de ce projet contient également des aides et des explications, comme Source des dictionnaires de sous-domaines, Processus de détection de résolution générique.
Merci à ces excellentes bibliothèques Python !
Ce projet utilise le format de version sémantique SemVer pour la gestion des versions. Vous pouvez consulter le Journal des modifications pour connaître l'historique des changements.
Pour plus d'informations, veuillez consulter le Plan de développement futur.
Les contributions de tous sont chaleureusement les bienvenues pour améliorer ce projet !
Vous pouvez consulter la liste de tous les contributeurs et leurs contributions dans le Document des contributeurs. Merci à eux d'avoir rendu OneForAll plus puissant et plus facile à utiliser.
Si ce projet vous a aidé, vous pouvez m'offrir un café pour m'encourager :)

Ce projet est sous licence GPL-3.0. Pour plus de détails, veuillez consulter LICENSE.
Merci aux différents projets open source de collecte de sous-domaines !
Merci aux membres de A-Team pour leurs réponses chaleureuses et désintéressées !
Cet outil ne doit être utilisé que dans le cadre d'une sécurité d'entreprise légalement autorisée. Lors de l'utilisation de cet outil, vous devez vous assurer que toutes vos actions sont conformes aux lois et réglementations locales. Si vous commettez un acte illégal en utilisant cet outil, vous en assumerez l'entière responsabilité. Les développeurs et tous les contributeurs de cet outil déclinent toute responsabilité légale et solidaire. À moins que vous n'ayez lu, compris et accepté toutes les clauses de cet accord, veuillez ne pas installer ni utiliser cet outil. Votre utilisation ou toute autre manifestation expresse ou implicite de votre acceptation de cet accord sera considérée comme votre consentement à être lié par cet accord.
Exécutez les commandes suivantes pour mettre à jour le projet (les modifications apportées à /config/setting.py et /config/api.py peuvent être conservées) :
git stash # Mettre de côté les modifications locales
git fetch --all # Récupérer les mises à jour du projet
git pull # Télécharger et écraser
git stash pop # Restaurer les modifications locales
La table example_com_now_result stocke les résultats actuels de collecte des sous-domaines. En général, il suffit de se concentrer sur cette table.
Pour plus d'informations, veuillez consulter Explication des champs.
Aide pour oneforall.py
Les informations d'aide suivantes peuvent ne pas être à jour. Vous pouvez utiliser python oneforall.py --help pour obtenir les dernières informations d'aide.
python oneforall.py --help
NAME
oneforall.py - Aide de OneForAll
SYNOPSIS
oneforall.py COMMAND | --target=TARGET <flags>
DESCRIPTION
OneForAll est un outil puissant de collecte de sous-domaines
Exemple :
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 :
Le paramètre `alive` peut prendre les valeurs True, False pour exporter respectivement les sous-domaines actifs ou tous les sous-domaines.
Le paramètre `port` peut prendre les valeurs 'default', 'small', 'large', voir la configuration dans config.py.
Le paramètre `fmt` accepte les formats 'csv', 'json'.
Le paramètre `path` par défaut None utilise le chemin de génération du répertoire des résultats de OneForAll.
ARGUMENTS
TARGET
Nom de domaine unique (paramètre obligatoire, un des deux)
TARGETS
Chemin du fichier contenant un nom de domaine par ligne (paramètre obligatoire, un des deux)
FLAGS
--brute=BRUTE
Activation du bruteforce des sous-domaines (par défaut False)
--dns=DNS
Résolution DNS des sous-domaines (par défaut True)
--req=REQ
Requête HTTP sur les sous-domaines (par défaut True)
--port=PORT
Plage de ports pour la validation des sous-domaines (par défaut seulement le port 80)
--valid=VALID
Exporter uniquement les sous-domaines actifs (par défaut False)
--fmt=FMT
Format de sauvegarde des résultats (par défaut csv)
--path=PATH
Chemin de sauvegarde des résultats (par défaut None)
--takeover=TAKEOVER
Vérifier les risques de prise de contrôle des sous-domaines (par défaut False)
dnssecarchivecrawl, commoncrawl ; ce module est encore en phase de débogage, d'autres modules seront ajoutés et améliorés)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, et collecte via les enregistrements DNS MX, NS, SOA, TXT)alienvault, riskiq_api, threatbook_api, threatminer, virustotal, virustotal_api ; d'autres modules seront ajoutés et améliorés)ask, baidu, bing, bing_api, duckduckgo, exalead, fofa_api, gitee, github, github_api, google, google_api, shodan_api, so, sogou, yahoo, yandex, zoomeye_api). Dans les modules de recherche, sauf pour les moteurs spéciaux, les moteurs génériques prennent en charge l'exclusion automatique, la recherche complète et la recherche récursive.txt, csv, json.