
reconftw v5.0.0-beta.1
reconFTW est un outil conçu pour effectuer des reconnaissances automatisées sur un domaine cible en exécutant le meilleur ensemble d'outils pour réaliser des scans et découvrir des vulnérabilités.
reconFTW
reconFTW est un puissant outil de reconnaissance automatisée conçu pour les chercheurs en sécurité et les testeurs d'intrusion. Il rationalise le processus de collecte de renseignements sur une cible en effectuant l'énumération de sous-domaines, l'analyse de vulnérabilités, l'OSINT et bien plus encore. Grâce à une conception modulaire, des options de configuration étendues et la prise en charge de l'analyse distribuée via AX Framework, reconFTW est conçu pour fournir des résultats complets et efficaces.
reconFTW exploite un large éventail de techniques, notamment la découverte passive et active de sous-domaines, les vérifications de vulnérabilités web (par ex. XSS, SSRF, SQLi), l'OSINT, le fuzzing de répertoires, l'analyse de ports et la capture d'écrans. Il s'intègre à des outils et API de pointe pour maximiser la couverture et la précision, vous garantissant ainsi de rester en tête dans vos efforts de reconnaissance.
Fonctionnalités clés :
- Énumération complète de sous-domaines (passive, bruteforce, permutations, transparence des certificats, etc.)
- Analyse de vulnérabilités pour XSS, SSRF, SQLi, LFI, SSTI, et plus encore
- OSINT pour les e-mails, métadonnées, fuites d'API et erreurs de configuration tierces
- Analyse distribuée avec AX Framework pour une exécution plus rapide
- Flux de travail personnalisables avec un fichier de configuration détaillé
- Intégration avec Faraday pour le reporting et la visualisation
- Prise en charge des déploiements Docker, Terraform et Ansible
Avertissement : L'utilisation de reconFTW pour attaquer des cibles sans consentement préalable est illégale. Il est de la responsabilité de l'utilisateur de respecter toutes les lois applicables. Les développeurs déclinent toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil. Utilisez-le de manière responsable.
📔 Table des matières
- 📔 Table des matières
- ✨ Fonctionnalités
- 🏗️ Architecture
- 💿 Installation
- Essai de la bêta v2 (réécriture en Go)
- ⚙️ Configuration
- 🚀 Utilisation
- ☁️ Prise en charge d'AX Framework (anciennement Axiom)
- 💻 Prise en charge de Faraday
- 🧠 Intégration IA
- 🗂️ Gestion des données
- 🧪 Tests
- Mindmap/Flux de travail
- Vidéo d'exemple
- 🤝 Comment contribuer
- 🔒 Sécurité
- ❓ Besoin d'aide ?
- 💖 Soutenir ce projet
- 🙏 Remerciements
- 📝 Journal des modifications
- 🛠️ Développement
- 📜 Licence
- ⭐ Historique des étoiles
✨ Fonctionnalités
reconFTW regorge de fonctionnalités pour rendre la reconnaissance approfondie et efficace. Vous trouverez ci-dessous une ventilation détaillée de ses capacités, mise à jour pour refléter les dernières fonctionnalités du script et de la configuration.
OSINT
- Informations sur le domaine : Recherche WHOIS pour les détails d'enregistrement du domaine (whois).
- Fuites d'e-mails et de mots de passe : Recherche d'e-mails et d'identifiants divulgués (emailfinder et LeakSearch).
- Cartographie Microsoft 365/Azure : Identifie les locataires Microsoft 365 et Azure (msftrecon).
- Extraction de métadonnées : Extrait les métadonnées des documents Office indexés (metagoofil).
- Fuites d'API : Détecte les API exposées dans les sources publiques (porch-pirate, SwaggerSpy et postleaksNg).
- Google Dorking : Requêtes Google dork automatisées pour les informations sensibles (dorks_hunter et xnldorker).
- Analyse GitHub : Analyse les organisations GitHub pour les dépôts et secrets avec des moteurs sélectionnables (enumerepo, trufflehog, gitleaks, titus, noseyparker).
- Audit GitHub Actions (optionnel) : Audite les artefacts de flux de travail et l'exposition CI/CD avec gato.
- Erreurs de configuration tierces : Identifie les services tiers mal configurés (misconfig-mapper).
- Hygiène des e-mails : Examine la configuration SPF/DMARC pour signaler les problèmes d'usurpation ou de délivrabilité.
- Énumération du stockage cloud : Examine les buckets des principaux fournisseurs pour détecter les expositions (cloud_enum).
- Domaines usurpables : Vérifie les domaines vulnérables à l'usurpation (spoofcheck).
Sous-domaines
- Énumération passive : Utilise les API et sources publiques pour la découverte de sous-domaines (subfinder et github-subdomains).
- Transparence des certificats : Interroge les journaux de transparence des certificats (crt).
- Découverte NOERROR : Identifie les sous-domaines avec des réponses DNS NOERROR (dnsx, plus d'informations ici).
- Bruteforce : Effectue un bruteforce DNS avec des listes de mots personnalisables (puredns et listes de mots personnalisées).
- Permutations : Génère des permutations de sous-domaines à l'aide de l'IA, d'expressions régulières et d'outils (Gotator comme moteur de permutation unique, plus regulator et subwiz).
- Web Scraping : Extrait les sous-domaines des sources d'URL passives et des métadonnées web en direct (urlfinder, waymore, httpx, csprecon).
- Enregistrements DNS : Résout les enregistrements DNS des sous-domaines (dnsx).
- Google Analytics : Identifie les sous-domaines via les identifiants Analytics (AnalyticsRelationships).
- Poignée de main TLS : Découvre les sous-domaines via les ports TLS (tlsx).
- Recherche récursive : Effectue une énumération récursive passive ou par bruteforce combinée (dsieve).
- Reprise de sous-domaine : Détecte les sous-domaines vulnérables (nuclei et dnstake).
- Transfert de zone DNS : Vérifie les transferts de zone DNS mal configurés (dig).
- Buckets cloud : Identifie les buckets cloud mal configurés et les actifs de stockage exposés (S3Scanner et cloud_enum).
- Note sur la couverture cloud : Les vérifications des buckets cloud n'incluent plus la couverture Alibaba OSS après le remplacement de CloudHunter par cloud_enum.
- Migration de la sortie cloud : Les artefacts de bucket
cloudhunter_*hérités ont été supprimés ; utilisezsubdomains/cloud_enum_buckets_trufflehog.txtà la place. - Recherche IP inversée : Découvre les sous-domaines via les plages IP (hakip2host).
Hôtes
- Informations IP : Récupère la géolocalisation et les données WHOIS (ipinfo).
- Détection CDN : Identifie les IP derrière les CDN (cdncheck).
- Détection WAF : Détecte les pare-feu d'applications web (wafw00f).
- Analyse de ports : Analyse active avec nmap (éventuellement précédée de naabu) et analyse passive avec smap.
- Empreinte de services : Identifie les services exposés sur les paires hôte:port découvertes avec nerva.
- Vulnérabilités de services (optionnel) : Le profil d'analyse de ports approfondi peut enrichir les résultats avec la correspondance CVE via vulners.
- Password Spraying : Tente un password spraying sur les services identifiés avec sélection du moteur (brutespray ou brutus).
- Géolocalisation : Mappe les adresses IP vers des emplacements géographiques (ipinfo).
- Découverte IPv6 : Énumère et analyse éventuellement les cibles IPv6 découvertes lorsque
IPV6_SCANest activé.
Analyse Web
- Sondage Web : Détecte les serveurs web actifs sur les ports standard et non standard ((httpx)).
- Captures d'écran : Capture des captures d'écran des pages web (nuclei).
- Fuzzing d'hôtes virtuels : Identifie les hôtes virtuels en fuzzant les en-têtes HTTP (VhostFinder).
- Détection CMS : Identifie les systèmes de gestion de contenu (CMSeeK).
- Extraction d'URL : Collecte les URL passivement et activement (urlfinder, waymore, katana, github-endpoints et JSA).
- Analyse de modèles d'URL : Classe les URL à l'aide de modèles (urless, gf et gf-patterns).
- Reconnaissance technologique par favicon : Identifie les technologies à partir des hachages de favicon (favirecon).
- Analyse JavaScript : Extrait les secrets et points de terminaison des fichiers JS (subjs, JSA, xnLinkFinder, getjswords, mantra, jsluice).
- Extraction de source maps : Récupère les données sensibles des source maps JavaScript (sourcemapper).
- Détection GraphQL : Découvre les points de terminaison GraphQL avec nuclei et effectue éventuellement une introspection approfondie (GQLSpection).
- Découverte de paramètres : Effectue un bruteforce des paramètres cachés sur les points de terminaison (arjun).
- Audit WebSocket : Valide les poignées de main de mise à niveau et la gestion de l'origine sur les points de terminaison
ws://etwss://. - Réflexion gRPC : Sonde les ports gRPC courants pour détecter une réflexion de service exposée (grpcurl).
- Empreinte de services LLM (optionnel) : Sonde les points de terminaison web/API découverts pour détecter les services LLM exposés avec julius.
- Fuzzing : Effectue un fuzzing de répertoires et de paramètres (ffuf).
- Tri par extension de fichier : Organise les URL par extensions de fichier.
- Génération de listes de mots : Crée des listes de mots personnalisées pour le fuzzing.
- Dictionnaire de mots de passe : Génère des dictionnaires de mots de passe à partir du contenu en direct (cewler).
- Analyse des noms courts IIS : Détecte les vulnérabilités de noms courts IIS (shortscan).
Vérifications de vulnérabilités
- CVE : Vérifie les CVE et vulnérabilités courantes nuclei
- Nuclei DAST : Exécute les modèles
nuclei -dastsur les URL collectées et les candidats GF pour une couverture DAST supplémentaire. - XSS : Teste les vulnérabilités de script intersite (dalfox).
- SSL/TLS : Vérifie les erreurs de configuration SSL/TLS (testssl).
- SSRF : Teste la falsification de requête côté serveur (interactsh, valeurs de paramètres avec ffuf, et charges utiles de protocole alternatif optionnelles).
- CRLF : Vérifie les vulnérabilités d'injection CRLF (crlfuzz).
- LFI : Teste l'inclusion de fichier local via fuzzing (ffuf).
- SSTI : Détecte l'injection de modèles côté serveur (TInjA).
- SQLi : Teste l'injection SQL (SQLMap et ghauri).
- Liens cassés : Identifie les liens cassés et les références externes susceptibles d'être sujettes à une reprise (second-order).
- Injection de commandes : Teste les vulnérabilités d'injection de commandes (commix).
- Contrebande de requêtes HTTP : Vérifie les vulnérabilités de contrebande de requêtes (smugglex).
- Cache web : Identifie les vulnérabilités de cache web (Web-Cache-Vulnerability-Scanner et toxicache).
- Contournement 4XX : Tente de contourner les réponses 4XX (nomore403).
- Fuzzing de paramètres : Fuzze les paramètres d'URL pour détecter les vulnérabilités (nuclei).
Extras- Multithreading : Optimise les performances (Interlace).
- Résolveurs personnalisés : Génère des résolveurs DNS (dnsvalidator).
- Support Docker : Image Docker officielle sur DockerHub.
- Déploiement AWS : Déploie via Terraform et Ansible.
- Support IP/CIDR : Analyse les plages IP et les blocs CIDR.
- Reprise des scans : Reprend les scans à partir de la dernière étape terminée.
- Sortie personnalisée : Enregistre les résultats dans un répertoire défini par l'utilisateur.
- Mode Diff : Met en évidence les nouvelles découvertes lors des scans ultérieurs.
- Filtrage de portée : Prend en charge les listes dans la portée et hors portée (inscope).
- Notifications : Envoie des alertes via Slack, Discord ou Telegram (notify).
- Compression des résultats : Compresse et envoie les résultats.
- Intégration Faraday : Exporte les résultats vers Faraday pour le reporting .
- Génération de rapports IA : Génère des rapports à l'aide de modèles IA locaux (reconftw_ai).
- Mode de re-scan rapide : Ignore automatiquement les étapes lourdes lorsqu'aucun nouvel actif n'est découvert (
--quick-rescan/QUICK_RESCAN). - Générateur de hotlist : Note et met en évidence les actifs les plus risqués (
hotlist.txt) en fonction des nouvelles découvertes. - Traçage des commandes : Activez
SHOW_COMMANDSpour journaliser chaque commande exécutée dans les journaux cibles pour le débogage. - Stockage des actifs : Ajoute les découvertes à
assets.jsonlpour l'automatisation en aval lorsqueASSET_STOREest activé. - Rapport consolidé : Génère automatiquement
report/report.jsonetreport/index.htmlà la fin du scan. - Support ARM : Compatible avec Raspberry Pi et les architectures ARM (y compris MacOS MX).
- Vérification de santé : Vérification de santé système intégrée via
--health-check(également utilisée par DockerHEALTHCHECK). - Mode incrémental : Analyse uniquement les nouvelles découvertes depuis la dernière exécution (
--incremental). - Limitation de débit adaptative : Recule automatiquement en cas d'erreurs 429/503 (
--adaptive-rate). - Journalisation structurée : Sortie de journal JSON facultative pour une analyse avancée (
STRUCTURED_LOGGING). - Assainissement des entrées : Toutes les entrées utilisateur sont assainies pour empêcher l'injection de commandes.
- Mode Dry-Run : Aperçu de ce qui serait exécuté sans exécuter les commandes (
--dry-run). - Mode parallèle : Exécute les fonctions indépendantes en parallèle pour des scans plus rapides (
--parallel, désactivable avec--no-parallel). - Architecture modulaire : La base de code est divisée en 8 modules ciblés pour la maintenabilité.
- Gestion des secrets : Variables d'environnement,
secrets.cfget secrets d'exécution Docker (voir SECURITY.md). - Disjoncteur : Ignore automatiquement les outils après des échecs répétés pour éviter les blocages de scan.
- Système de points de contrôle : Reprend les scans interrompus à partir de la dernière phase réussie.
- Support natif macOS : Compatibilité totale avec macOS (coreutils BSD, Homebrew Bash 4+).
🏗️ Architecture
reconFTW utilise une architecture modulaire. Le point d'entrée principal (reconftw.sh) gère l'analyse des arguments et source 8 modules spécialisés depuis le répertoire modules/.
Structure des répertoires```
reconftw/ ├── reconftw.sh # Entry point — arg parsing, module loading, dispatch ├── reconftw.cfg # Default configuration ├── install.sh # Installer ├── Makefile # Data management, lint, fmt, test targets ├── modules/ │ ├── core.sh # Lifecycle, logging, notifications, cleanup (1024 lines) │ ├── modes.sh # Scan modes, argument parsing, help (902 lines) │ ├── subdomains.sh # Subdomain enumeration (1938 lines) │ ├── web.sh # Web analysis, fuzzing, JS checks (1712 lines) │ ├── vulns.sh # Vulnerability scanning (926 lines) │ ├── osint.sh # OSINT functions (500 lines) │ ├── axiom.sh # Ax/Axiom fleet helpers (143 lines) │ └── utils.sh # Utilities, sanitization, validation (508 lines) ├── tests/ │ ├── run_tests.sh # Test runner │ ├── unit/ # bats-core unit tests │ ├── integration/ # Integration tests │ └── fixtures/ # Test data ├── Docker/ │ └── Dockerfile # Official Docker image └── Terraform/ # AWS deployment
### Référence des modules
| Module | Lignes | Objectif |
|--------|------:|---------|
| `core.sh` | 1024 | Gestion du cycle de vie, journalisation, notifications, pièges de nettoyage |
| `modes.sh` | 902 | Définitions des modes de scan, analyse des arguments, sortie d'aide |
| `subdomains.sh` | 1938 | Toutes les fonctions d'énumération de sous-domaines |
| `web.sh` | 1712 | Analyse web, fuzzing, analyse JS, détection CMS |
| `vulns.sh` | 926 | Analyse des vulnérabilités (XSS, SQLi, SSRF, etc.) |
| `osint.sh` | 500 | Fonctions OSINT (WHOIS, e-mails, dorks, métadonnées) |
| `utils.sh` | 508 | Utilitaires partagés, assainissement des entrées, validation |
| `axiom.sh` | 143 | Gestion de la flotte distribuée Ax/Axiom |
Le drapeau `--source-only` permet de sourcer `reconftw.sh` sans exécuter la logique principale, ce qui permet de tester unitairement les fonctions individuelles.
---
## 💿 Installation
reconFTW prend en charge plusieurs méthodes d'installation pour s'adapter à différents environnements. Assurez-vous de disposer de suffisamment d'espace disque (au moins 10 Go recommandés) et d'une connexion Internet stable.
### Démarrage rapide
1) Cloner et installer```yaml
git clone https://github.com/six2dez/reconftw
cd reconftw
./install.sh --verbose
- Lancer une analyse (complète + reprise)```bash ./reconftw.sh -d example.com -r
3) Exécution minimale (empreinte passive uniquement)```bash
./reconftw.sh -d example.com -p
Astuce : relancez
./install.sh --toolsplus tard pour actualiser la chaîne d’outils sans réinstaller les paquets système.
Installation locale (PC/VPS/VM)
-
Prérequis :
- Golang : dernière version (
install_golangactivé par défaut dansreconftw.cfg). - Permissions système : si vous n’êtes pas root, configurez sudo pour éviter les invites :
sudo echo "${USERNAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/reconFTW
- Golang : dernière version (
-
Étapes : ```bash git clone https://github.com/six2dez/reconftw cd reconftw ./install.sh ./reconftw.sh -d target.com -r
-
Notes :
- Le script
install.shinstalle les dépendances, les outils et configure les chemins (GOROOT,GOPATH,PATH). - Définissez
install_golang=falsedansreconftw.cfgsi Golang est déjà configuré. - Pour les installations existantes, exécutez
./install.sh --toolspour actualiser les binaires Go, les paquets pipx et les dépôts sans toucher aux paquets système. - Consultez le Guide d'installation pour des instructions détaillées.
Docker
- Télécharger l'image : ```bash
docker pull six2dez/reconftw:main
- Exécuter le conteneur : ```bash
docker run -it --rm
-v "${PWD}/OutputFolder/:/reconftw/Recon/"
six2dez/reconftw:main -d example.com -r
Pour une liste de cibles, montez le fichier de liste dans le conteneur et référencez le chemin dans le conteneur : ```bash
docker run -it --rm
-v "${PWD}/domains.txt:/reconftw/domains.txt:ro"
-v "${PWD}/OutputFolder/:/reconftw/Recon/"
six2dez/reconftw:main -l /reconftw/domains.txt -r
3. **Afficher les résultats** :
- Les résultats sont enregistrés dans le répertoire `OutputFolder` sur l'hôte (pas à l'intérieur du conteneur).
4. **Personnalisation** :
- Modifiez l'image Docker ou créez la vôtre ; consultez le [Guide Docker](https://github.com/six2dez/reconftw/wiki/4.-Docker).
- Pour ignorer l'outillage Ax dans les builds personnalisés, passez `--build-arg INSTALL_AXIOM=false`.
- Montez votre configuration notify à `~/.config/notify/provider-config.yaml` dans le conteneur si vous utilisez des notifications.
5. **Secrets au moment de l'exécution** :
Transmettez les clés API et les secrets via des variables d'environnement — ne les intégrez jamais dans l'image : ```bash
docker run -it --rm \
-e SHODAN_API_KEY="your-key" \
-e PDCP_API_KEY="your-projectdiscovery-key" \
-e COLLAB_SERVER="your-server" \
-e XSS_SERVER="your-server" \
-v "${PWD}/OutputFolder/:/reconftw/Recon/" \
six2dez/reconftw:main -d example.com -r
See SECURITY.md pour les consignes complètes de gestion des secrets.
-
Contrôle de santé :
L'image Docker inclut un
HEALTHCHECKintégré qui exécute./reconftw.sh --health-checktoutes les 60 secondes. Vous pouvez également l'exécuter manuellement : ```bash docker exec ./reconftw.sh --health-check
Terraform + Ansible
- Déployez reconFTW sur AWS avec Terraform et Ansible.
- Suivez le guide dans Terraform/README.md pour les instructions d'installation.
Essayer la bêta v2 (réécriture en Go)
reconFTW est en cours de réécriture en Go. La réécriture est fournie en pré-version optionnelle : elle est
répertoriée sur la page des versions, et GitHub
ne pointe jamais releases/latest vers une pré-version — donc si vous ne faites rien, vous continuez à recevoir
la version bash. C'est délibéré.
Le binaire Go est reconftw ; le point d'entrée bash est reconftw.sh. Ils ne se remplacent
pas mutuellement, vous pouvez donc conserver les deux et revenir en arrière à tout moment.
La bêta actuelle est v5.0.0-beta.1. Elle n'est pas servie par releases/latest, vous devez donc
nommer explicitement le tag :```bash
curl -sSL "https://github.com/six2dez/reconftw/releases/download/v5.0.0-beta.1/reconftw_Linux_x86_64.tar.gz" | tar xz
sudo install -m 755 reconftw /usr/local/bin/reconftw
reconftw version
Choisissez l’asset correspondant à votre plateforme sur la
[page des releases](https://github.com/six2dez/reconftw/releases/tag/v5.0.0-beta.1) — les builds `Darwin`
et `arm64`, un build statique musl, ainsi que les paquets `.deb`/`.rpm` sont tous publiés.
- [**Ce que la bêta est, et ce qu’elle n’est pas**](https://github.com/six2dez/reconftw/blob/main/docs/V2-BETA-ANNOUNCEMENT.md) — y compris trois
éléments qui ne sont explicitement pas encore terminés.
- [**Signaler un problème**](https://github.com/six2dez/reconftw/issues/new?template=v2-beta-feedback.md)
— le modèle de retour pour la bêta v2. Les bugs de la version bash passent toujours par le modèle Bug report classique.
## 🛠️ Dépannage
- Bash 4+ sur macOS : les scripts se relancent automatiquement sous Homebrew Bash. Si vous voyez un message concernant Bash < 4, exécutez `brew install bash`, ouvrez un nouveau terminal, puis relancez `./install.sh`.
- timeout sur macOS : macOS fournit `gtimeout` via `brew install coreutils`. Les scripts le détectent désormais et l’utilisent automatiquement.
- Problèmes réseau : les installateurs masquent la plupart des sorties de commandes. Si quelque chose échoue, relancez avec `upgrade_tools=true` dans `reconftw.cfg`, exécutez `./install.sh --tools`, ou installez manuellement l’outil manquant (l’erreur le nommera).
- Binaires GOPATH : les binaires sont copiés dans `/usr/local/bin`. Si vous préférez autrement, assurez-vous que `~/go/bin` est dans votre `PATH`.
- Modèles Nuclei : si les modèles n’ont pas été clonés, supprimez `~/nuclei-templates` et relancez `./install.sh`.
## 🔑 Liste de contrôle des API (Optionnel)
- `subfinder` : `~/.config/subfinder/provider-config.yaml`
- Jetons GitHub : `~/Tools/.github_tokens` (un par ligne)
- Jetons GitLab : `~/Tools/.gitlab_tokens` (un par ligne)
- WHOISXML : définissez `WHOISXML_API` dans `reconftw.cfg` ou en variable d’environnement
- Énumération ASN (`asnmap`) : définissez `PDCP_API_KEY` dans l’environnement/la config (`ASN_ENUM` est ignoré si non défini)
- Slack/Discord/Telegram : configurez `notify` dans `~/.config/notify/provider-config.yaml`
- Serveur SSRF : définissez `COLLAB_SERVER` en env/cfg si utilisé
- Serveur XSS aveugle : définissez `XSS_SERVER` en env/cfg si utilisé
## 💾 Prérequis
- Disque : 10–20 Go libres recommandés (toolchain + données)
- Réseau : connexion stable pendant l’installation et les mises à jour
- OS : Linux/macOS avec Bash ≥ 4
- Extras : `shellcheck` et `shfmt` (optionnels) pour `make lint`/`make fmt`
## ⚙️ Configuration
Le fichier `reconftw.cfg` contrôle toute l’exécution de reconFTW. Il permet une personnalisation fine de :
- **Chemins des outils** : définissez les chemins pour les outils, résolveurs et wordlists (`tools`, `resolvers`, `fuzz_wordlist`).
- **Clés API** : configurez les clés pour Shodan, WHOISXML, etc. via des variables d’environnement ou `secrets.cfg` (voir [SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md)).
- **Modes de scan** : activez/désactivez les modules (par ex., `OSINT`, `SUBDOMAINS_GENERAL`, `VULNS_GENERAL`).
- **Performances** : ajustez les threads, limites de débit et timeouts (par ex., `FFUF_THREADS`, `HTTPX_RATELIMIT`).
- **Limitation adaptative du débit** : recul automatique sur erreurs 429/503 (`ADAPTIVE_RATE_LIMIT`, `MIN_RATE_LIMIT`, `MAX_RATE_LIMIT`).
- **Scan incrémental** : ne scanner que les nouveaux résultats depuis la dernière exécution (`INCREMENTAL_MODE`).
- **Notifications** : configurez les notifications Slack, Discord ou Telegram (`NOTIFY_CONFIG`).
- **Ax (anciennement Axiom)** : configurez le scan distribué et les chemins des résolveurs (`AXIOM_FLEET_NAME`, `AXIOM_FLEET_COUNT`, `AXIOM_RESOLVERS_PATH`).
- **Rapports IA** : configurez le modèle/profil/format et les contrôles de contexte (`AI_MODEL`, `AI_REPORT_PROFILE`, `AI_REPORT_TYPE`, `AI_MAX_CHARS_PER_FILE`).
- **Vérifications web avancées** : activez/désactivez l’introspection GraphQL, la découverte de paramètres, les tests WebSocket, le sondage gRPC et le scan IPv6.
- **Automatisation & Données** : contrôlez les heuristiques de rescan rapide, la journalisation des assets, les tailles de blocs, les hotlists et le traçage de débogage (`QUICK_RESCAN`, `ASSET_STORE`, `CHUNK_LIMIT`, `HOTLIST_TOP`, `SHOW_COMMANDS`).
- **Disque & Journalisation** : vérification pré-vol du disque (`MIN_DISK_SPACE_GB`), rotation des journaux (`MAX_LOG_FILES`, `MAX_LOG_AGE_DAYS`), journalisation JSON structurée (`STRUCTURED_LOGGING`).
- **Cache** : configurez l’expiration du cache pour les wordlists et résolveurs (`CACHE_MAX_AGE_DAYS`).
- **Sécurité des résolveurs DNS** : les fichiers de résolveurs manquants échouent rapidement, les téléchargements de résolveurs utilisent des paramètres configurables de nouvelle tentative/timeout (`RESOLVER_DOWNLOAD_*`), et le timeout de brute-force/résolution DNS est désactivé par défaut (`DNS_*_TIMEOUT=0`) avec progression par battement de cœur.
- **Secrets** : utilisez `secrets.cfg` pour les remplacements locaux ou des variables d’environnement pour CI/Docker (voir [SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md)).
**Exemple de configuration** :```bash
#############################################
# reconFTW config file #
#############################################
# General values
tools=$HOME/Tools # Path installed tools
if [[ -z "${SCRIPTPATH:-}" ]]; then
if [[ -n "${BASH_SOURCE[0]:-}" ]]; then
SCRIPTPATH="$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
else
SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
fi
fi
_detected_shell="${SHELL:-/bin/bash}"
profile_shell=".$(basename "${_detected_shell}")rc" # Get current shell profile
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
reconftw_version="$(git rev-parse --abbrev-ref HEAD)-$(git describe --tags 2>/dev/null || git rev-parse --short HEAD)"
else
reconftw_version="standalone"
fi # Fetch current reconftw version
DATA_DIR="${SCRIPTPATH}/data"
WORDLISTS_DIR="${DATA_DIR}/wordlists"
PATTERNS_DIR="${DATA_DIR}/patterns"
generate_resolvers=false # Generate custom resolvers with dnsvalidator
update_resolvers=true # Fetch and rewrite resolvers from trickest/resolvers before DNS resolution
resolvers_url="https://raw.githubusercontent.com/trickest/resolvers/main/resolvers.txt"
resolvers_trusted_url="https://gist.githubusercontent.com/six2dez/ae9ed7e5c786461868abd3f2344401b6/raw/trusted_resolvers.txt"
RESOLVER_DOWNLOAD_CONNECT_TIMEOUT=10 # Seconds to wait for resolver download TCP connection
RESOLVER_DOWNLOAD_MAX_TIME=120 # Hard cap in seconds for resolver downloads
RESOLVER_DOWNLOAD_RETRY=2 # Retry count for resolver downloads
RESOLVER_DOWNLOAD_RETRY_DELAY=2 # Delay in seconds between resolver download retries
fuzzing_remote_list="https://raw.githubusercontent.com/six2dez/OneListForAll/main/onelistforallmicro.txt" # Used to send to Ax (if used) on fuzzing
proxy_url="http://127.0.0.1:8080/" # Proxy url
install_golang=true # Set it to false if you already have Golang configured and ready
upgrade_tools=true
upgrade_before_running=false # Upgrade tools before running
#dir_output=/custom/output/path
SHOW_COMMANDS=false # Set true to log every executed command to the per-target log (verbose; may include sensitive data)
MIN_DISK_SPACE_GB=0 # Minimum required disk space in GB before starting reconnaissance (0 to disable check)
# Incremental mode configuration
INCREMENTAL_MODE=false # Only scan new findings since last run (use --incremental flag to enable)
MONITOR_MODE=false # Continuous monitor mode (enabled by --monitor)
MONITOR_INTERVAL_MIN=60 # Minutes between monitoring cycles
MONITOR_MAX_CYCLES=0 # 0 = run forever until interrupted
ALERT_SUPPRESSION=true # Suppress repeated monitor alerts by fingerprint history
ALERT_SEEN_FILE=".incremental/alerts_seen.hashes" # Store of seen alert fingerprints
# Adaptive rate limiting configuration
ADAPTIVE_RATE_LIMIT=false # Automatically adjust rate limits when encountering 429/503 errors (use --adaptive-rate flag to enable)
MIN_RATE_LIMIT=10 # Minimum rate limit (requests per second)
MAX_RATE_LIMIT=500 # Maximum rate limit (requests per second)
RATE_LIMIT_BACKOFF_FACTOR=0.5 # Multiply rate by this when errors occur (0.5 = half speed)
RATE_LIMIT_INCREASE_FACTOR=1.2 # Multiply rate by this on success (1.2 = 20% faster)
# Cache configuration
CACHE_MAX_AGE_DAYS=30 # Maximum age in days for cached wordlists/resolvers (30 = 1 month)
CACHE_MAX_AGE_DAYS_RESOLVERS=7 # Resolver cache TTL
CACHE_MAX_AGE_DAYS_WORDLISTS=30 # Wordlist cache TTL
CACHE_MAX_AGE_DAYS_TOOLS=14 # Tool cache TTL
CACHE_REFRESH=false # Force-refresh cache (or use --refresh-cache)
# Log rotation
MAX_LOG_FILES=10 # Maximum number of log files to keep per target
MAX_LOG_AGE_DAYS=30 # Delete log files older than this many days
# Structured logging configuration (JSON format)
STRUCTURED_LOGGING=false # Enable JSON structured logging for advanced log analysis
# Golang Vars (Comment or change on your own)
export GOROOT="${GOROOT:-/usr/local/go}"
export GOPATH="${GOPATH:-$HOME/go}"
case ":${PATH}:" in
*":$GOPATH/bin:"*) ;;
*) PATH="$GOPATH/bin:$PATH" ;;
esac
case ":${PATH}:" in
*":$GOROOT/bin:"*) ;;
*) PATH="$GOROOT/bin:$PATH" ;;
esac
case ":${PATH}:" in
*":$HOME/.local/bin:"*) ;;
*) PATH="$HOME/.local/bin:$PATH" ;;
esac
export PATH
# Rust Vars (Comment or change on your own)
export PATH="$HOME/.cargo/bin:$PATH"
# Tools config files
#NOTIFY_CONFIG=~/.config/notify/provider-config.yaml # No need to define
GITHUB_TOKENS=${tools}/.github_tokens
GITLAB_TOKENS=${tools}/.gitlab_tokens
#CUSTOM_CONFIG=custom_config_path.txt # In case you use a custom config file, uncomment this line and set your files path
# APIs/TOKENS - Set via environment variables (preferred) or uncomment and edit below.
# Environment variables take precedence if set.
SHODAN_API_KEY="${SHODAN_API_KEY:-}"
WHOISXML_API="${WHOISXML_API:-}"
PDCP_API_KEY="${PDCP_API_KEY:-}"
XSS_SERVER="${XSS_SERVER:-}"
COLLAB_SERVER="${COLLAB_SERVER:-}"
slack_channel="${slack_channel:-}"
slack_auth="${slack_auth:-}"
# For additional secrets, create a secrets.cfg file (gitignored) and it will be auto-sourced
# File descriptors
DEBUG_STD="&>/dev/null" # Skips STD output on installer
DEBUG_ERROR="2>/dev/null" # Skips ERR output on installer
# Osint
OSINT=true # Enable or disable the whole OSINT module
GOOGLE_DORKS=true
GITHUB_DORKS=true
GITHUB_REPOS=true
METADATA=true # Fetch metadata from indexed office documents
EMAILS=true # Fetch emails from differents sites
DOMAIN_INFO=true # whois info
IP_INFO=true # Reverse IP search, geolocation and whois
API_LEAKS=true # Check for API leaks
API_LEAKS_POSTLEAKS=true # Enhance API leaks with postleaksNg
THIRD_PARTIES=true # Check for 3rd parties misconfigs
SPOOF=true # Check spoofable domains
MAIL_HYGIENE=true # Check DMARC/SPF records
CLOUD_ENUM=true # Enumerate cloud storage across providers with cloud_enum
GITHUB_LEAKS=true # Search for leaked secrets across GitHub with ghleaks
GHLEAKS_THREADS=5 # Concurrent download threads for ghleaks
SECRETS_ENGINE="gitleaks" # gitleaks|titus|noseyparker|hybrid
SECRETS_SCAN_GIT_HISTORY=false # Include git history scans when supported
SECRETS_VALIDATE=false # Validate detected secrets when supported (titus)
GITHUB_ACTIONS_AUDIT=false # Audit GitHub Actions artifacts/workflows with gato
GATO_INCLUDE_ALL_ARTIFACT_SECRETS=false # Include noisy artifact secret matches in gato output
# Subdomains
SUBDOMAINS_GENERAL=true # Enable or disable the whole Subdomains module
SUBPASSIVE=true # Passive subdomains search
SUBCRT=true # crtsh search
CTR_LIMIT=999999 # Limit the number of results
SUBNOERROR=false # Check DNS NOERROR response and BF on them
SUBANALYTICS=true # Google Analytics search
SUBBRUTE=true # DNS bruteforcing
SUBSCRAPING=true # Subdomains extraction from passive URLs and live web metadata
SUBPERMUTE=true # DNS permutations
SUBIAPERMUTE=true # Permutations by AI analysis
SUBREGEXPERMUTE=true # Permutations by regex analysis
GOTATOR_FLAGS=" -depth 1 -numbers 3 -mindup -adv -md" # Flags for gotator
PERMUTATIONS_WORDLIST_MODE=auto # auto|full|short (auto: short if subs > threshold, full if DEEP)
PERMUTATIONS_SHORT_THRESHOLD=100 # Use short wordlist when subdomain count exceeds this
SUBTAKEOVER=true # Check subdomain takeovers, false by default cuz nuclei already check this
SUB_RECURSIVE_PASSIVE=false # Uses a lot of API keys queries
DEEP_RECURSIVE_PASSIVE=10 # Number of top subdomains for recursion
SUB_RECURSIVE_BRUTE=false # Needs big disk space and time to resolve
ZONETRANSFER=true # Check zone transfer
S3BUCKETS=true # Check S3 buckets misconfigs
REVERSE_IP=false # Check reverse IP subdomain search (set True if your target is CIDR/IP)
TLS_PORTS="21,22,25,80,110,135,143,261,271,324,443,448,465,563,614,631,636,664,684,695,832,853,854,990,993,989,992,994,995,1129,1131,1184,2083,2087,2089,2096,2221,2252,2376,2381,2478,2479,2482,2484,2679,2762,3077,3078,3183,3191,3220,3269,3306,3410,3424,3471,3496,3509,3529,3539,3535,3660,36611,3713,3747,3766,3864,3885,3995,3896,4031,4036,4062,4064,4081,4083,4116,4335,4336,4536,4590,4740,4843,4849,5443,5007,5061,5321,5349,5671,5783,5868,5986,5989,5990,6209,6251,6443,6513,6514,6619,6697,6771,7202,7443,7673,7674,7677,7775,8243,8443,8991,8989,9089,9295,9318,9443,9444,9614,9802,10161,10162,11751,12013,12109,14143,15002,16995,41230,16993,20003"
INSCOPE=false # Uses inscope tool to filter the scope, requires .scope file in reconftw folder
# Web detection
WEBPROBEFULL=true # Unified web probing over configured ports
WEBSCREENSHOT=true # Webs screenshooting
VIRTUALHOSTS=false # Check virtualhosts by fuzzing HOST header
UNCOMMON_PORTS_WEB="81,300,591,593,832,981,1010,1311,1099,2082,2095,2096,2480,3000,3001,3002,3003,3128,3333,4243,4567,4711,4712,4993,5000,5104,5108,5280,5281,5601,5800,6543,7000,7001,7396,7474,8000,8001,8008,8014,8042,8060,8069,8080,8081,8083,8088,8090,8091,8095,8118,8123,8172,8181,8222,8243,8280,8281,8333,8337,8443,8500,8834,8880,8888,8983,9000,9001,9043,9060,9080,9090,9091,9092,9200,9443,9502,9800,9981,10000,10250,11371,12443,15672,16080,17778,18091,18092,20720,32000,55440,55672"
WEBPROBE_PORTS="80,443,${UNCOMMON_PORTS_WEB}" # Ports used by webprobe_full
# Host
FAVIRECON=true # Favicon-based technology recon for discovered web targets
PORTSCANNER=true # Enable or disable the whole Port scanner module
GEO_INFO=true # Fetch Geolocalization info
PORTSCAN_PASSIVE=true # Port scanner with Shodan
PORTSCAN_ACTIVE=true # Port scanner with nmap
PORTSCAN_ACTIVE_OPTIONS="--top-ports 200 -sV -n -Pn --open --max-retries 2"
PORTSCAN_DEEP_OPTIONS="--top-ports 1000 -sV -n -Pn --open --max-retries 2 --script vulners"
PORTSCAN_STRATEGY=legacy # legacy|naabu_nmap
NAABU_ENABLE=true
NAABU_RATE=1000
NAABU_PORTS="--top-ports 1000"
SERVICE_FINGERPRINT=true # Fingerprint exposed services with nerva
SERVICE_FINGERPRINT_ENGINE="nerva" # nerva
SERVICE_FINGERPRINT_TIMEOUT_MS=2000 # nerva timeout per target (ms)
PORTSCAN_UDP=false
PORTSCAN_UDP_OPTIONS="--top-ports 20 -sU -sV -n -Pn --open"
CDN_IP=true # Check which IPs belongs to CDN
CDN_BYPASS=true # Try origin IP discovery on CDN-fronted hosts with hakoriginfinder
# Web analysis
WAF_DETECTION=true # Detect WAFs
NUCLEICHECK=true # Enable or disable nuclei
NUCLEI_TEMPLATES_PATH="$HOME/nuclei-templates" # Set nuclei templates path
NUCLEI_SEVERITY="info,low,medium,high,critical" # Set templates criticity
NUCLEI_EXTRA_ARGS="" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
#NUCLEI_EXTRA_ARGS="-etags openssh,ssl -eid node-express-dev-env,keycloak-xss,CVE-2023-24044,CVE-2021-20323,header-sql,header-reflection" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
NUCLEI_DAST=true # Run additional nuclei -dast module over webs/urls/gf candidates (forced on when VULNS_GENERAL=true, e.g. -a)
URL_CHECK=true # Enable or disable URL collection
URL_CHECK_PASSIVE=true # Search for urls, passive methods from Archive, OTX, CommonCrawl, etc
URL_CHECK_ACTIVE=true # Search for urls by crawling the websites
WAYMORE_TIMEOUT=30m # Timeout for waymore passive URL collection
WAYMORE_LIMIT=5000 # Optional URL collection limit for waymore
URL_GF=true # Url patterns classification
URL_EXT=true # Returns a list of files divided by extension
JSCHECKS=true # JS analysis
FUZZ=true # Web fuzzing
FUZZ_RECURSION_DEPTH=2 # ffuf recursion depth used in DEEP mode
IIS_SHORTNAME=true
CMS_SCANNER=true # CMS scanner
WORDLIST=true # Wordlist generation
ROBOTSWORDLIST=true # Check historic disallow entries on waybackMachine (DEEP mode only)
PASSWORD_DICT=true # Generate password dictionary
PASSWORD_DICT_ENGINE=cewler # cewler|pydictor
PASSWORD_MIN_LENGTH=5 # Min password length
PASSWORD_MAX_LENGTH=14 # Max password length
KATANA_HEADLESS_PROFILE=off # off|smart|full
CLOUD_ENUM_S3_PROFILE=optimized # optimized: quickscan (-qs + safe -m/-b paths) | exhaustive: -m/-b ${tools}/cloud_enum/enum_tools/fuzz.txt (missing fuzz => optimized)
CLOUD_ENUM_S3_THREADS=20 # Threads used by cloud_enum in s3buckets/cloud enumeration
# Vulns
VULNS_GENERAL=false # Enable or disable the vulnerability module (very intrusive and slow)
XSS=true # Check for xss with dalfox
TEST_SSL=true # SSL misconfigs
SSRF_CHECKS=true # SSRF checks
CRLF_CHECKS=true # CRLF checks
LFI=true # LFI by fuzzing
LFI_MAX_URLS=150 # Max single-parameter LFI candidates to test per target (0 = unlimited)
SSTI=true # SSTI by fuzzing
SSTI_ENGINE="TInjA" # SSTI engine
SQLI=true # Check SQLI
SQLMAP=true # Check SQLI with sqlmap
GHAURI=false # Check SQLI with ghauri
BROKENLINKS=true # Check for brokenlinks
BROKENLINKS_ENGINE="second-order" # Broken links engine
SPRAY=true # Performs password spraying
SPRAY_ENGINE="brutespray" # brutespray|brutus
SPRAY_BRUTUS_ONLY_DEEP=true # Run brutus only in DEEP mode unless disabled
BRUTUS_USERNAMES="" # Optional comma-separated usernames for brutus
BRUTUS_PASSWORDS="" # Optional comma-separated passwords for brutus
BRUTUS_KEY_FILE="" # Optional SSH private key path for brutus
COMM_INJ=true # Check for command injections with commix
SMUGGLING=true # Check for HTTP request smuggling flaws
WEBCACHE=true # Check for Web Cache issues
WEBCACHE_TOXICACHE=true # Complement web cache checks with toxicache
BYPASSER4XX=true # Check for 4XX bypasses
FUZZPARAMS=true # Fuzz parameters values
# Extra features
NOTIFICATION=false # Notification for every function
SOFT_NOTIFICATION=false # Only for start/end
DEEP=false # DEEP mode, really slow and don't care about the number of results
DEEP_LIMIT=500 # First limit to not run unless you run DEEP
DEEP_LIMIT2=1500 # Second limit to not run unless you run DEEP
DIFF=false # Diff function, run every module over an already scanned target, printing only new findings (but save everything)
REMOVETMP=false # Delete temporary files after execution (to free up space)
REMOVELOG=false # Delete logs after execution
PROXY=false # Send to proxy the websites found
SENDZIPNOTIFY=false # Send to zip the results (over notify)
PRESERVE=true # set to true to avoid deleting the .called_fn files on really large scans
FFUF_FLAGS=" -mc all -fc 404 -sf -noninteractive -of json" # Ffuf flags
# HTTP options
HEADER="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" # Default header
# Threads (auto-scaled based on CPU cores, override to set fixed values)
AVAILABLE_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
FFUF_THREADS=$((AVAILABLE_CORES * 10))
HTTPX_THREADS=$((AVAILABLE_CORES * 12))
HTTPX_UNCOMMONPORTS_THREADS=$((AVAILABLE_CORES * 25))
KATANA_THREADS=$((AVAILABLE_CORES * 5))
BRUTESPRAY_CONCURRENCE=$((AVAILABLE_CORES * 2))
DNSTAKE_THREADS=$((AVAILABLE_CORES * 25))
DALFOX_THREADS=$((AVAILABLE_CORES * 50))
DNS_RESOLVER=auto # auto|puredns|dnsx (auto: detects NAT/CGNAT → dnsx for home, puredns for VPS)
PUREDNS_PUBLIC_LIMIT=0 # Set between 2000 - 10000 if your router blows up, 0 means unlimited
PUREDNS_TRUSTED_LIMIT=400
PUREDNS_WILDCARDTEST_LIMIT=30
PUREDNS_WILDCARDBATCH_LIMIT=1500000
DNSX_THREADS=25 # Threads for dnsx when behind NAT (safe for home routers)
DNSX_RATE_LIMIT=100 # QPS for dnsx
DNSVALIDATOR_THREADS=200
INTERLACE_THREADS=10
LFI_INTERLACE_THREADS=4 # Dedicated interlace concurrency for LFI
TLSX_THREADS=1000
XNLINKFINDER_DEPTH=3
# Rate limits
HTTPX_RATELIMIT=150
NUCLEI_RATELIMIT=150
FFUF_RATELIMIT=0
LFI_FFUF_THREADS=20 # Dedicated ffuf threads for LFI
LFI_FFUF_RATELIMIT=50 # Dedicated ffuf rate limit for LFI
# Timeouts
SUBFINDER_ENUM_TIMEOUT=180 # Minutes
CMSSCAN_TIMEOUT=3600 # Seconds
FFUF_MAXTIME=900 # Seconds
LFI_INTERLACE_TIMEOUT=180 # Seconds per LFI interlace worker
LFI_FFUF_TIMEOUT=10 # Seconds per LFI HTTP request
LFI_FFUF_MAXTIME=90 # Seconds per single LFI ffuf job
LFI_FOLLOW_REDIRECTS=false # Follow redirects during LFI fuzzing
HTTPX_TIMEOUT=10 # Seconds
HTTPX_UNCOMMONPORTS_TIMEOUT=10 # Seconds
PERMUTATIONS_LIMIT=21474836480 # Bytes, default is 20 GB
DNS_BRUTE_TIMEOUT=0 # timeout/gtimeout duration for DNS bruteforce (0 disables hard-timeout, e.g. 4h)
DNS_RESOLVE_TIMEOUT=0 # timeout/gtimeout duration for DNS resolve (0 disables hard-timeout, e.g. 6h)
DNS_HEARTBEAT_INTERVAL_SECONDS=20 # Progress heartbeat interval for long DNS jobs
# lists
fuzz_wordlist=${WORDLISTS_DIR}/fuzz_wordlist.txt
lfi_wordlist=${WORDLISTS_DIR}/lfi_wordlist.txt
ssti_wordlist=${WORDLISTS_DIR}/ssti_wordlist.txt
subs_wordlist=${WORDLISTS_DIR}/subdomains.txt
subs_wordlist_big=${tools}/subdomains_n0kovo_big.txt
headers_inject=${WORDLISTS_DIR}/headers_inject.txt
resolvers=${tools}/resolvers.txt
resolvers_trusted=${tools}/resolvers_trusted.txt
# Ax Fleet (formerly Axiom — uses attacksurge/ax)
# Resolver paths on Ax instances (change if your fleet uses a different home dir)
AXIOM_RESOLVERS_PATH="/home/op/lists/resolvers.txt"
AXIOM_RESOLVERS_TRUSTED_PATH="/home/op/lists/resolvers_trusted.txt"
# Will not start a new fleet if one exist w/ same name and size (or larger)
# AXIOM=false Uncomment only to overwrite command line flags
AXIOM_FLEET_LAUNCH=true # Enable or disable spin up a new fleet, if false it will use the current fleet with the AXIOM_FLEET_NAME prefix
AXIOM_FLEET_NAME="reconFTW" # Fleet's prefix name
AXIOM_FLEET_COUNT=10 # Fleet's number
AXIOM_FLEET_REGIONS="eu-central" # Fleet's region
AXIOM_FLEET_SHUTDOWN=true # # Enable or disable delete the fleet after the execution
AXIOM_AUTO_FIX_HOSTKEY=true # Auto-repair known_hosts entries on SSH host-key mismatch before fallback to local mode
# This is a script on your reconftw host that might prep things your way...
#AXIOM_POST_START="~/Tools/axiom_config.sh" # Useful to send your config files to the fleet
AXIOM_EXTRA_ARGS="" # Leave empty if you don't want to add extra arguments
#AXIOM_EXTRA_ARGS=" --rm-logs" # Example
# Faraday-Server
FARADAY=false # Enable or disable Faraday integration
FARADAY_WORKSPACE="reconftw" # Faraday workspace
# AI
AI_EXECUTABLE="python3" # Python executable fallback if reconftw_ai venv python is not available
AI_MODEL="llama3:8b" # Model to use
AI_REPORT_TYPE="md" # Report type to use (md, txt)
AI_REPORT_PROFILE="bughunter" # Report profile to use (executive, brief, or bughunter)
AI_PROMPTS_FILE="" # Optional custom prompts file (empty uses reconftw_ai default)
AI_MAX_CHARS_PER_FILE=50000 # Max chars loaded per file before truncation
AI_MAX_FILES_PER_CATEGORY=200 # Max files loaded per category for AI context
AI_REDACT=true # Redact sensitive indicators before AI analysis
AI_ALLOW_MODEL_PULL=false # Allow reconftw_ai to auto-pull missing model
AI_STRICT=false # Fail AI analysis if one or more categories have no data
# API & Advanced Web Checks
GRAPHQL_CHECK=true # Detect GraphQL endpoints and introspection
GQLSPECTION=false # Run GQLSpection deep introspection on detected GraphQL endpoints (heavier)
PARAM_DISCOVERY=true # Parameter discovery with arjun
GRPC_SCAN=false # Attempt basic gRPC reflection on common ports
LLM_PROBE=false # Probe discovered web/API endpoints for LLM services with julius
LLM_PROBE_AUGUSTUS=false # Include augustus generator config in julius output
# IPv6
IPV6_SCAN=true # Attempt IPv6 discovery/portscan where addresses exist
# Wordlists / threads for new modules
ARJUN_THREADS=10
# Data & Automation
ASSET_STORE=true # Append assets/findings to assets.jsonl
EXPORT_FORMAT="" # Optional exporter at end of scan: json|html|csv|all
REPORT_ONLY=false # Rebuild report artifacts from existing results (or use --report-only)
QUICK_RESCAN=false # Skip heavy steps if no new subdomains/webs
CHUNK_LIMIT=2000 # Split very large lists into chunks (urls, webs)
HOTLIST_TOP=50 # Number of top risky assets to highlight
# Performance
RESOLVER_IQ=false # Prefer fast/healthy resolvers (experimental)
PERF_PROFILE="balanced" # low|balanced|max
# Estimated durations for skipped heavy modules (seconds)
TIME_EST_NUCLEI=600
TIME_EST_FUZZ=900
TIME_EST_URLCHECKS=300
TIME_EST_JSCHECKS=300
TIME_EST_API=300
TIME_EST_GQL=180
TIME_EST_PARAM=240
TIME_EST_GRPC=120
TIME_EST_IIS=60
# TERM COLORS
bred='\033[1;31m'
bblue='\033[1;34m'
bgreen='\033[1;32m'
byellow='\033[1;33m'
red='\033[0;31m'
blue='\033[0;34m'
green='\033[0;32m'
cyan='\033[0;36m'
yellow='\033[0;33m'
reset='\033[0m'
Garde-fous du résolveur DNS :
- Les fichiers de résolveurs manquants ou vides échouent désormais rapidement avant le début du brute-force/résolution DNS.
- Les téléchargements de résolveurs sont configurables avec
RESOLVER_DOWNLOAD_CONNECT_TIMEOUT,RESOLVER_DOWNLOAD_MAX_TIME,RESOLVER_DOWNLOAD_RETRYetRESOLVER_DOWNLOAD_RETRY_DELAY. DNS_BRUTE_TIMEOUT=0etDNS_RESOLVE_TIMEOUT=0désactivent le délai d’expiration strict par défaut (recommandé pour de très grands ensembles de cibles). La progression du heartbeat s’affiche toujours toutes lesDNS_HEARTBEAT_INTERVAL_SECONDS.```bash DNS_BRUTE_TIMEOUT=4h DNS_RESOLVE_TIMEOUT=6h DNS_HEARTBEAT_INTERVAL_SECONDS=20
**Détails complets** : consultez le [Guide de configuration](https://github.com/six2dez/reconftw/wiki/3.-Configuration-file).
---
## 🚀 Utilisation
reconFTW prend en charge plusieurs modes et options pour une reconnaissance flexible. Utilisez le drapeau `-h` pour afficher le menu d'aide.
### Options de cible
| Drapeau | Description |
| ---- | ------------------------------------------------------------ |
| `-d` | Domaine cible unique (par ex., `example.com`) |
| `-l` | Fichier contenant la liste des domaines cibles (un par ligne) |
| `-m` | Cible multi-domaines (par ex., nom d'entreprise pour les domaines associés) |
| `-x` | Exclure les sous-domaines (liste hors périmètre) |
| `-i` | Inclure les sous-domaines (liste dans le périmètre) |
### Options de mode
| Drapeau | Description |
| ---- | --------------------------------------------------------------------- |
| `-r` | **Recon** : Reconnaissance complète sans attaques actives |
| `-s` | **Sous-domaines** : Énumération des sous-domaines, sondage web et prises de contrôle |
| `-p` | **Passif** : Reconnaissance passive uniquement |
| `-a` | **Tout** : Reconnaissance complète plus vérifications actives de vulnérabilités |
| `-w` | **Web** : Vérifications de vulnérabilités sur des cibles web spécifiques |
| `-n` | **OSINT** : Scan OSINT sans énumération de sous-domaines ni attaques |
| `-z` | **Zen** : Reconnaissance légère avec vérifications de base et certaines vulnérabilités |
| `-c` | **Personnalisé** : Exécuter une fonction spécifique (nécessite des arguments supplémentaires) |
| `-h` | Afficher le menu d'aide |
### Options générales
| Drapeau | Description |
| ----------------- | -------------------------------------------------------- |
| `--deep` | Activer le scan approfondi (plus lent, VPS recommandé) |
| `-f` | Chemin du fichier de configuration personnalisé |
| `-o` | Répertoire de sortie pour les résultats |
| `-v` | Activer le scan distribué Ax |
| `--vps-count` | Remplacer le nombre d'instances de la flotte Ax pour cette exécution |
| `-q` | Définir la limite de débit (requêtes par seconde) |
| `-y` | Active l'analyse des résultats par IA |
| `--check-tools` | Quitter si les outils requis sont manquants |
| `--quick-rescan` | Ignorer les modules lourds lorsqu'aucun nouveau sous-domaine/site web n'est trouvé |
| `--health-check` | Exécuter une vérification de santé du système et quitter |
| `--incremental` | Scanner uniquement les nouveaux résultats depuis la dernière exécution |
| `--adaptive-rate` | Ajuster automatiquement les limites de débit en cas d'erreurs (429/503) |
| `--dry-run` | Afficher ce qui serait exécuté sans lancer les commandes |
| `--parallel` | Exécuter les fonctions indépendantes en parallèle (plus rapide, plus de RAM) |
| `--no-parallel` | Forcer l'exécution séquentielle même si le parallélisme est activé |
| `--monitor` | Mode de surveillance continue (cible unique ; `-w` prend en charge `-l`) |
| `--monitor-interval` | Minutes entre les cycles de surveillance |
| `--monitor-cycles` | S'arrêter après N cycles (0 = infini) |
| `--report-only` | Reconstruire les artefacts de rapport sans scanner |
| `--refresh-cache` | Forcer l'actualisation des résolveurs/listes de mots en cache |
| `--export` | Exporter les artefacts : `json`, `html`, `csv` ou `all` |
### Exemple d'utilisation
1. **Reconnaissance complète sur une cible unique** : ```bash
./reconftw.sh -d target.com -r
- Reconnaissance sur plusieurs cibles : ```bash
./reconftw.sh -l targets.txt -r -o /path/to/output/
- Reconnaissance approfondie (VPS recommandé) : ```bash
./reconftw.sh -d target.com -r --deep
- Mode parallèle (plus rapide, nécessite plus de RAM) : ```bash
./reconftw.sh -d target.com -r --parallel
- Forcer le mode séquentiel : ```bash
./reconftw.sh -d target.com -r --no-parallel
- Reconnaissance multi-domaines : ```bash
./reconftw.sh -m company -l domains.txt -r
- Intégration Ax : ```bash
./reconftw.sh -d target.com -r -v
- Intégration d’Ax avec remplacement de flotte : ```bash
./reconftw.sh -d target.com -r -v 30
- Reconnaissance complète avec attaques (mode YOLO) : ```bash
./reconftw.sh -d target.com -a
- Afficher l'aide : ```bash ./reconftw.sh -h
11. **Forcer l'actualisation du cache** : ```bash
./reconftw.sh -d target.com -r --refresh-cache
- Exporter tous les artefacts du rapport : ```bash ./reconftw.sh -d target.com -r --export all
13. **Surveillance continue (toutes les 30 minutes, 48 cycles)** : ```bash
./reconftw.sh -d target.com -r --monitor --monitor-interval 30 --monitor-cycles 48
- Reconstruire uniquement les rapports (sans analyse) : ```bash ./reconftw.sh -d target.com --report-only --export all
**Guide complet** : Consultez le [Guide d'utilisation](https://github.com/six2dez/reconftw/wiki/2.-Usage-Guide).
---
## ☁️ Prise en charge du framework Ax (anciennement Axiom)
reconFTW s'intègre à [Ax](https://github.com/attacksurge/ax) pour le scan distribué, réduisant le temps d'exécution en répartissant les tâches sur plusieurs instances cloud.
- **Configuration** : Sélectionnez `reconftw` comme provisionneur lors de la configuration d'Ax (`axiom-configure`).
- **Gestion des flottes** : Créez et détruisez automatiquement des flottes (`AXIOM_FLEET_LAUNCH`, `AXIOM_FLEET_SHUTDOWN`) ou utilisez une flotte existante.
- **Configuration** : Définissez la taille de la flotte, la région et le nom dans `reconftw.cfg` (`AXIOM_FLEET_COUNT`, `AXIOM_FLEET_REGIONS`, `AXIOM_FLEET_NAME`).
**Exemple** :```bash
./reconftw.sh -d target.com -r -v
Détails : Consultez la documentation officielle d'Ax et le dépôt attacksurge/ax.
💻 Prise en charge de Faraday
reconFTW s'intègre à Faraday pour le reporting web et la gestion des vulnérabilités.
- Configuration : Installez Faraday, authentifiez-vous via
faraday-cli, et configurez l'espace de travail dansreconftw.cfg(FARADAY_WORKSPACE). - Utilisation : Activez avec
FARADAY=truedansreconftw.cfg.
🧠 Intégration de l'IA
reconFTW utilise l'IA pour générer des rapports détaillés à partir des résultats de scan avec l'outil reconftw_ai.
- Modèle : Modèle d'IA configurable (par ex.,
llama3:8bviaAI_MODEL). - Types de rapports : Markdown ou texte brut (
AI_REPORT_TYPE). - Profils : Exécutif, bref ou chasseur de bugs (
AI_REPORT_PROFILE). - Sortie structurée :
reconftwstocke un rapport lisible par machine dansai_result/reconftw_analysis.json. - Contrôles de contexte : Limitez la taille d'entrée avec
AI_MAX_CHARS_PER_FILEetAI_MAX_FILES_PER_CATEGORY. - Contrôles de sécurité : Activez/désactivez la rédaction et le mode strict avec
AI_REDACTetAI_STRICT.
Exemple :```yaml AI_EXECUTABLE="python3" AI_MODEL="llama3:8b" AI_REPORT_TYPE="md" AI_REPORT_PROFILE="bughunter" AI_MAX_CHARS_PER_FILE=50000 AI_MAX_FILES_PER_CATEGORY=200 AI_REDACT=true AI_ALLOW_MODEL_PULL=false AI_STRICT=false
---
## 🗂️ Gestion des données
Gérez les données de scan et les clés API en toute sécurité à l'aide d'un dépôt privé.
Lorsque `ASSET_STORE=true`, reconFTW regroupe les résultats clés dans `assets.jsonl` à chaque exécution, ce qui facilite la synchronisation uniquement des deltas exploitables vers votre dépôt privé.
### Makefile
Utilisez le `Makefile` fourni pour une gestion facile du dépôt (nécessite [GitHub CLI](https://cli.github.com/)).
1. **Bootstrap** : ```bash
export PRIV_REPO="$HOME/reconftw-data"
make bootstrap
- Synchronisation avec l’amont : ```bash
make sync
- Téléverser les données : ```bash
make upload
- Scripts de lint / formatage : ```bash
make lint # shellcheck for reconftw.sh, modules/*.sh & install.sh
make fmt # shfmt with project defaults
- Exécuter les tests : ```bash
make test # unit tests (bats-core)
make test-all # unit + integration tests
Manuel
- Créez un dépôt privé sur GitHub/GitLab.
- Clonez et configurez : ```bash
git clone https://github.com/yourusername/reconftw-data
cd reconftw-data
git commit --allow-empty -m "Initial commit"
git remote add upstream https://github.com/six2dez/reconftw
git fetch upstream
git rebase upstream/main master
- Téléverser les modifications : ```bash
git add .
git commit -m "Data upload"
git push origin master
- Mettre à jour l'outil : ```bash
git fetch upstream
git rebase upstream/main master
🧪 Tests
reconFTW utilise bats-core pour les tests automatisés.
Installer bats-core```bash
macOS
brew install bats-core
Debian/Ubuntu
apt install bats
From source
git clone https://github.com/bats-core/bats-core.git /tmp/bats sudo /tmp/bats/install.sh /usr/local
### Exécution des tests```bash
# Unit tests only
make test
# Unit + integration tests
make test-all
# Via the runner script
./tests/run_tests.sh # unit only
./tests/run_tests.sh --all # unit + integration
Structure du répertoire de test```
tests/ ├── run_tests.sh # Test runner script ├── unit/ # Unit tests (fast, no network) │ ├── test_sanitize.bats │ ├── test_utils.bats │ └── test_validation.bats ├── integration/ # Integration tests (require installed tools) │ └── test_smoke.bats ├── security/ # Security tests (injection, etc.) │ └── test_injection.bats ├── mocks/ # Mock tools for offline testing └── fixtures/ # Shared test data files
### Exécution des tests de sécurité```bash
# Test command injection prevention
make test-security
# Or directly
bats tests/security/
Rédaction des tests
Les tests utilisent le modèle --source-only pour charger les fonctions sans exécuter le script principal :```bash
#!/usr/bin/env bats
setup() { source ./reconftw.sh --source-only }
@test "sanitize_domain strips invalid chars" { result="$(sanitize_domain 'exam;ple.com')" [ "$result" = "example.com" ] }
### Pipeline CI
Le workflow GitHub Actions (`.github/workflows/tests.yml`) s’exécute à chaque push et pull request :
1. **ShellCheck** — vérifie `reconftw.sh`, `modules/*.sh` et `install.sh`
2. **Tests unitaires** — exécute tous les fichiers `tests/unit/*.bats`
3. **Tests d’intégration** — installe reconFTW et valide la disponibilité des outils
---
## Mindmap/Workflow

---
## Vidéo d’exemple

---
## 🤝 Comment contribuer
Consultez [CONTRIBUTING.md](https://github.com/six2dez/reconftw/blob/main/CONTRIBUTING.md) pour le guide complet de contribution, incluant la configuration de développement, le style de code, les tests et le processus de pull request.
Liens rapides :
- [Signaler un bug](https://github.com/six2dez/reconftw/issues/new/choose)
- [Soumettre une pull request](https://github.com/six2dez/reconftw/tree/dev) (ciblez la branche `dev`)
- [Code de conduite](https://github.com/six2dez/reconftw/blob/main/CODE_OF_CONDUCT.md)
---
## 🔒 Sécurité
Pour la politique de sécurité, la gestion des secrets et le signalement de vulnérabilités, consultez [SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md).
---
## ❓ Besoin d’aide ?
- **Wiki** : Explorez le [Wiki reconFTW](https://github.com/six2dez/reconftw/wiki).
- **FAQ** : Consultez la [FAQ](https://github.com/six2dez/reconftw/wiki/7.-FAQs).
- **Communauté** : Rejoignez le [serveur Discord](https://discord.gg/R5DdXVEdTy) ou le [groupe Telegram](https://t.me/joinchat/TO_R8NYFhhbmI5co).
---
## 💖 Soutenir ce projet
Soutenez le développement de reconFTW via :
- **Buy Me a Coffee** : [buymeacoffee.com/six2dez](https://www.buymeacoffee.com/six2dez)
[<img src="https://assets.kitploit.com/production/public/readmes/670/1177bf77de4c288d45b816dd405a8b5027116f0b1893449986cf200c765707ad.webp">](https://www.buymeacoffee.com/six2dez)
- **Parrainage DigitalOcean** : [Lien de parrainage](https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)
<a href="https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"><img src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg" alt="DigitalOcean Referral Badge" /></a>
- **Parrainage GitHub** : [github.com/sponsors/six2dez](https://github.com/sponsors/six2dez)
---
## 🙏 Remerciements
Un merci tout particulier aux services suivants pour leur soutien à reconFTW :
- [C99](https://api.c99.nl/)
- [CIRCL](https://www.circl.lu/)
- [NetworksDB](https://networksdb.io/)
- [ipinfo](https://ipinfo.io/)
- [hackertarget](https://hackertarget.com/)
- [Censys](https://censys.io/)
- [Fofa](https://fofa.info/)
- [intelx](https://intelx.io/)
- [Whoxy](https://www.whoxy.com/)
---
## 📝 Journal des modifications
Consultez [CHANGELOG.md](https://github.com/six2dez/reconftw/blob/main/CHANGELOG.md) pour une liste détaillée des changements de chaque version.
---
## 🛠️ Développement
### Structure du projet```
reconftw/
├── reconftw.sh # Main entry point (~500 lines)
├── reconftw.cfg # Configuration file
├── modules/ # Phase modules
│ ├── utils.sh # Utilities, sanitization, caching, circuit breaker
│ ├── core.sh # Framework core, logging, lifecycle, health check
│ ├── modes.sh # Scan modes, argument parsing
│ ├── subdomains.sh # Subdomain enumeration
│ ├── web.sh # Web analysis, nuclei scans
│ ├── vulns.sh # Vulnerability scanning
│ ├── osint.sh # OSINT functions
│ └── axiom.sh # Ax/Axiom fleet helpers
├── lib/ # Pure utility libraries
│ └── validation.sh # Input validation functions
├── tests/ # Test suite (100+ tests)
│ ├── unit/ # Unit tests (bats)
│ ├── integration/ # Integration/smoke tests
│ └── security/ # Injection prevention tests
├── docs/ # Documentation
│ └── ARCHITECTURE.md # Detailed architecture guide
└── secrets.cfg.example # Template for API keys
Exécution des tests```bash
make test # Unit tests make test-security # Security tests make test-all # All tests make lint # Shellcheck make lint-fix # Auto-fix with shfmt
### Flux de développement```bash
# 1. Source without executing (for testing)
source ./reconftw.sh --source-only
# 2. Test individual functions
sanitize_domain "test;domain.com"
# 3. Run health check
./reconftw.sh --health-check
# 4. Dry run to preview
./reconftw.sh -d example.com -r --dry-run
Contribution
Consultez CONTRIBUTING.md pour les directives de développement et docs/ARCHITECTURE.md pour les détails techniques.
📜 Licence
reconFTW est distribué sous la licence MIT.