BBOT TUI Viewer

Une interface terminal autonome pour parcourir et analyser les résultats de scan BBOT.

Fonctionnalités
- 🚀 Aucune configuration - Un fichier auto-installable unique, aucune dépendance manuelle
- 🔴 Actualisation en direct - Mise à jour automatique pendant l'exécution des scans avec détection précise du statut
- 🎯 Détection intelligente du statut - Identifie avec précision les scans RUNNING, FINISHED et INTERRUPTED
- 📋 Navigateur de scans - Naviguez entre plusieurs scans avec des compteurs distincts de vulnérabilités/constatations et des indicateurs de statut
- 📦 Gestion des archives - Compressez les anciens scans pour gagner de l'espace, restaurez-les quand nécessaire
- 📝 Suivi du travail - Annotez les vulnérabilités et les constatations avec statut, priorité et notes
- 🔍 Vues séparées - Onglets dédiés aux vulnérabilités (triées par gravité) et aux constatations
- 🌳 Arbre de découverte - Vue hiérarchique montrant les relations parent-enfant des événements
- 🌐 Arbre des sous-domaines - Vue hiérarchique des sous-domaines découverts (si disponibles)
- 📊 Statistiques riches - De beaux tableaux avec distribution des événements, analyse du périmètre et métriques de flux de travail
- 🔎 Explorateur d'événements - Filtrez, recherchez et inspectez tous les événements de scan
- ⚙️ Visualiseur de configuration - Consultez la configuration preset.yml
Démarrage rapide
# Copy to server and run (auto-installs on first run)
./bbot-ui
# Or specify custom path
./bbot-ui /path/to/scans
La première exécution crée .bbot_ui_venv/ et installe les dépendances. Les exécutions suivantes se lancent instantanément.
Utilisation
./bbot-ui # Default: ~/.bbot/scans
./bbot-ui /path/to/scans # Browse all scans in directory
./bbot-ui ~/.bbot/scans/scan-name # View specific scan
Options de la ligne de commande
./bbot-ui --help # Show all options
./bbot-ui --scan-interval 5 # Refresh scan view every 5 seconds
./bbot-ui --list-interval 10 # Refresh scan list every 10 seconds
Options disponibles :
--scan-interval SECONDS - Intervalle d'actualisation de la vue détaillée du scan (défaut : 2.0)
--list-interval SECONDS - Intervalle d'actualisation de la liste des scans (défaut : 3.0)
Les paramètres sont automatiquement enregistrés dans ~/.bbot_ui_config.json et utilisés par défaut lors des prochaines sessions.
Interface
Liste des scans
- Démarrage instantané - L'interface apparaît en <200 ms, les scans se chargent progressivement
- Parcourez tous les scans dans un tableau avec les colonnes : Nom du scan, Statut, Événements, Vulns, Constatations, Dernière modification
- L'en-tête affiche le nombre total de scans, les compteurs de vulnérabilités/constatations et le nombre de scans en cours
- La colonne Statut affiche l'état du scan en temps réel :
- ● RUNNING (vert) - Scan activement en cours, processus bbot détecté
- ⚠ INTERRUPTED (jaune) - Scan arrêté/interrompu (aucun processus actif)
- ✓ FINISHED (bleu) - Scan terminé avec succès
- ○ CHECKING... (gris) - Statut en cours de vérification (apparaît pendant le chargement progressif)
- Les colonnes Vulns et Constatations affichent un indicateur ⚠ pour les scans contenant des vulnérabilités/constatations
- Les scans apparaissent un par un avec des mises à jour de statut en direct pendant le chargement initial
- Actualisation automatique toutes les 3 secondes pour afficher les nouveaux scans et les changements de statut
↑/↓ ou j/k pour naviguer, Entrée pour ouvrir, r pour actualiser manuellement, a pour archiver, d pour supprimer
- Appuyez sur
Tab pour voir les scans archivés
Liste des archives
- Parcourez tous les scans archivés (fichiers .zip compressés)
- Affiche : Nom de l'archive, Taille, Événements, Vulns, Constatations, Date d'archivage
u pour désarchiver (restaurer), d pour supprimer définitivement
- Appuyez sur
Tab, q ou Échap pour revenir à la liste des scans
Gestion des archives
Économisez de l'espace disque en compressant les anciens scans dans des archives ZIP :
Archiver un scan :
- Depuis la liste des scans, naviguez jusqu'au scan que vous souhaitez archiver
- Appuyez sur
a pour archiver
- Confirmez l'opération
- Le dossier du scan est compressé en un fichier .zip et le dossier d'origine est supprimé
- L'archive apparaît dans la liste des archives (appuyez sur
Tab pour l'afficher)
Restaurer une archive :
- Appuyez sur
Tab pour afficher la liste des archives
- Naviguez jusqu'à l'archive que vous souhaitez restaurer
- Appuyez sur
u pour désarchiver
- Confirmez l'opération
- L'archive est extraite et le fichier .zip est supprimé
- Appuyez sur
q pour revenir à la liste des scans et voir le scan restauré
Fonctions de sécurité :
- Impossible d'archiver des scans RUNNING
- L'intégrité de l'archive est vérifiée avant la suppression du dossier source
- L'extraction est vérifiée avant la suppression de l'archive
- Toutes les opérations nécessitent une confirmation
- Si une étape échoue, l'opération est annulée en toute sécurité
Supprimer des scans/archives :
- Depuis la liste des scans : Appuyez sur
d pour supprimer définitivement un dossier de scan
- Depuis la liste des archives : Appuyez sur
d pour supprimer définitivement un fichier d'archive
- Impossible de supprimer des scans RUNNING
- Nécessite une confirmation (action permanente et irréversible)
- Toutes les données de scan seront perdues
Suivi du travail et annotations
Suivez votre flux de travail sécurité en annotant les vulnérabilités et constatations avec statut, priorité et notes.
Comment ça fonctionne :
- Les annotations sont stockées dans
.bbot_ui_annotations.json à côté de chaque scan
- Référence les événements par UUID - ne modifie jamais le
output.json original de BBOT
- Inclus automatiquement dans les archives pour la sauvegarde/restauration
- Survit aux nouveaux scans de la même cible
Annoter une vulnérabilité/constatation :
- Naviguez jusqu'à l'onglet Vulnérabilités ou Constatations
- Sélectionnez un élément (flèches ou j/k)
- Appuyez sur
t pour ouvrir la boîte de dialogue d'annotation
- Définissez le statut, la priorité (facultative) et les notes
- Cliquez sur Enregistrer ou appuyez sur Entrée
Raccourcis rapides :
- Appuyez sur
x pour marquer l'élément sélectionné comme Faux positif
- Appuyez sur
i pour marquer l'élément sélectionné comme Risque accepté
- Ces raccourcis conservent la priorité et les notes existantes tout en mettant à jour le statut
Options de statut :
- 🆕 Nouveau - Statut par défaut pour les éléments non annotés
- 🔍 En cours d'analyse - Actuellement en cours d'analyse
- ✓ Confirmé - Vérifié comme vrai problème
- ✗ Faux positif - Pas une véritable vulnérabilité
- 📢 Signalé - Transmis à l'équipe sécurité
- 🔧 Corrigé - Le problème a été résolu
- ⚠ Risque accepté - Connu mais accepté
Niveaux de priorité (facultatifs) :
- 🔴 Critique - Nécessite une attention immédiate
- 🟠 Élevée - Important, à traiter rapidement
- 🟡 Moyenne - Priorité normale
- 🟢 Basse - Problème mineur
Fonctionnalités :
- Colonnes Statut et Priorité dans les tableaux Vulnérabilités/Constatations
- Liste déroulante de filtre de statut - filtrez par statut spécifique ou éléments « À traiter » (par défaut)
- Raccourcis clavier rapides (x/i) pour un tri rapide
- Graphiques de statut du flux de travail dans l'onglet Statistiques
- Champ Notes pour un contexte détaillé
- Bouton d'effacement des annotations pour réinitialiser
- Les annotations persistent entre les sessions et les archives
Filtrage par statut :
- À traiter (par défaut) - Affiche uniquement les éléments nécessitant une attention (nouveaux, en cours d'analyse, confirmés, signalés)
- Tous - Affiche toutes les vulnérabilités/constatations, quel que soit le statut
- Statuts spécifiques - Filtrer par statut individuel (faux positif, corrigé, etc.)
- Le filtre est mis à jour automatiquement lors du marquage des éléments avec les raccourcis clavier
Onglets du visualiseur de scan
- Barre de statut : Affiche le statut du scan avec le nombre d'événements en temps réel
- ● RUNNING (vert) - Mise à jour active avec de nouveaux événements
- ✓ FINISHED (bleu) - Scan terminé, plus de mises à jour
- ⚠ INTERRUPTED (jaune) - Scan arrêté/interrompu
- Actualisation automatique : Tous les onglets se mettent à jour toutes les 2 secondes lorsque le scan est RUNNING
- Détection intelligente : Arrête automatiquement l'interrogation des scans FINISHED et INTERRUPTED
- Appuyez sur
r pour actualiser manuellement et voir la notification avec le nombre de nouveaux événements
1. Vulnérabilités - Événements VULNERABILITY triés par gravité (CRITICAL→HIGH→MEDIUM→LOW→INFO→UNKNOWN), avec statut, priorité et annotations (mises à jour en direct)
2. Constatations - Événements FINDING avec statut, priorité et annotations (mises à jour en direct)
3. Événements - Tous les événements avec filtre de type, filtre de distance de périmètre, recherche multi-termes et détails JSON (mises à jour en direct)
4. Arbre - Deux modes d'affichage (mises à jour en direct) :
- Découverte : Montre comment les événements ont été trouvés via les modules de scan (relations parent-enfant)
- Topologie : Hiérarchie logique du réseau (IP_RANGE → IP → OPEN_TCP_PORT)
5. Statistiques - Distribution des événements, top 15 des modules (classés), graphiques de distance de périmètre, statut du flux de travail et distribution des priorités (mises à jour en direct)
6. Sous-domaines - Vue arborescente hiérarchique des sous-domaines découverts (affichée uniquement si
subdomains.txt existe, généralement à partir du preset subdomain-enum)
7. Configuration - preset.yml avec coloration syntaxique
Recherche multi-termes
L'onglet Événements prend en charge une puissante recherche multi-termes :
- Termes séparés par des espaces : Utilisez des espaces pour rechercher plusieurs termes (par exemple,
httpx in-scope)
- Logique ET : Les événements doivent correspondre à TOUS les termes pour apparaître dans les résultats
- Champs recherchés : data, type, module, host, tags, discovery_context
- Combiner avec les filtres : Fonctionne avec les filtres de type et de distance de périmètre
Exemples :
httpx in-scope - Événements du module httpx avec le tag in-scope
k11h HIGH - Événements liés à k11h.de avec gravité HIGH
nuclei VULNERABILITY - Vulnérabilités découvertes par le module nuclei
Vue de l'arbre des sous-domaines
Lorsque vous exécutez BBOT avec le preset subdomain-enum (ou tout scan générant subdomains.txt), un onglet Sous-domaines apparaît automatiquement dans le visualiseur de scan, affichant un arbre hiérarchique des sous-domaines découverts.
Fonctionnalités :
- Affichage hiérarchique : Sous-domaines organisés par structure de domaine (par exemple,
api.example.com sous example.com)
- Arbre extensible : Naviguez à travers les niveaux de domaine avec une navigation arborescente intuitive
- Indicateur de nombre : L'étiquette de l'onglet affiche le nombre total de sous-domaines (par exemple, « Sous-domaines (42) »)
- Détection automatique : L'onglet n'apparaît que si
subdomains.txt existe dans le dossier du scan
Exemple de hiérarchie :
example.com
├─ api.example.com
├─ dev.example.com
└─ www.example.com
Raccourcis clavier
Navigation : ↑/↓ ou j/k | Annoter : t (Vulns/Constatations uniquement) | Faux positif : x (Vulns/Constatations uniquement) | Risque accepté : i (Vulns/Constatations uniquement) | Voir les archives : Tab (depuis la liste des scans) | Recherche : f | Actualiser : r | Archiver : a (liste des scans) | Désarchiver : u (liste des archives) | Supprimer : d | Ajuster le séparateur : ←/→ | Retour/Quitter : q ou
Remarque : Les raccourcis d'annotation (t, x, i) n'apparaissent dans le pied de page que lorsque vous consultez les onglets Vulnérabilités ou Constatations.
Actualisation en direct et détection du statut
bbot-ui détecte automatiquement et affiche les mises à jour des scans en cours en temps réel :
Détection intelligente du statut
L'interface utilise une chaîne de détection multi-méthodes pour déterminer avec précision le statut du scan :
-
Analyse des événements SCAN : Lit le champ status du dernier événement SCAN dans output.json
"FINISHED" → Scan terminé (possède les champs finished_at et duration)
"RUNNING" → Vérifier s'il est réellement en cours (passer à l'étape 2)
-
Détection du processus actif (pour le statut RUNNING) :
- psutil (auto-installé, multiplateforme) - Vérifie si un processus a
output.json ouvert
-
Statut final :
- RUNNING : L'événement SCAN indique RUNNING + le processus a activement le fichier ouvert
- INTERRUPTED : L'événement SCAN indique RUNNING + aucun processus n'a le fichier ouvert (le scan a été interrompu par Ctrl+C)
- FINISHED : L'événement SCAN indique FINISHED (possède des données d'achèvement)
Fonctionnalités
- Chargement progressif : Les scans apparaissent un par un avec des mises à jour de statut en direct au démarrage
- Détection précise : Identifie immédiatement les scans interrompus sans attendre de délai d'expiration
- Performances optimisées :
- Itération progressive des répertoires (non bloquante, 1 ms par répertoire)
- Un scan chargé par tick d'horloge de 10 ms
- Met en cache les vérifications de processus pendant 5 secondes (évite d'analyser tous les processus à plusieurs reprises)
- Ne vérifie que les scans RUNNING (ignore les vérifications coûteuses pour les scans FINISHED)
- L'interrogation intelligente arrête de vérifier les scans FINISHED et INTERRUPTED
- Chargement incrémentiel : Lit efficacement uniquement les nouveaux événements de
output.json
- Non bloquant : L'interface reste entièrement réactive pendant les mises à jour
- Préservation du curseur : Maintient votre position dans les tableaux pendant l'actualisation
- Gestion gracieuse : Ignore les lignes JSON incomplètes/malformées des scans en cours
- Intervalles configurables : Personnalisez les fréquences d'actualisation selon vos besoins
Configuration
Vous pouvez personnaliser le comportement d'actualisation en direct :
Via la ligne de commande :
./bbot-ui --scan-interval 5 --list-interval 10
Valeurs par défaut :
- La vue détaillée du scan s'actualise toutes les 2 secondes
- La liste des scans s'actualise toutes les 3 secondes
Cas d'utilisation :
- Réseaux rapides/scans locaux : Utilisez des intervalles plus courts (par exemple,
--scan-interval 1)
- Systèmes distants/lents : Utilisez des intervalles plus longs (par exemple,
--scan-interval 5)
- Réduire l'utilisation du CPU : Augmentez tous les intervalles pour des vérifications moins fréquentes
Les paramètres sont enregistrés dans ~/.bbot_ui_config.json et persistent entre les sessions.
Dépannage
L'installation ne s'est pas terminée correctement ?
rm -rf ~/.bbot_ui_venv && ./bbot-ui
Avertissement concernant psutil non installé ?
Si vous voyez un avertissement indiquant que psutil est manquant, votre venv provient d'une version plus ancienne. Réinstallez :
rm -rf ~/.bbot_ui_venv && ./bbot-ui
Aucun output.json trouvé ?
Assurez-vous que le dossier du scan contient output.json (BBOT le génère automatiquement)
Python introuvable ?
# Ubuntu/Debian
sudo apt install python3 python3-venv
# macOS
brew install python3
Prérequis
- Python 3.8+
- Installation automatique : textual>=0.47.0, rich>=13.0.0, psutil>=5.9.0
Remarque : psutil est utilisé pour la détection précise du statut du scan en vérifiant si un processus a le fichier de scan ouvert.
L'interface est optimisée pour les gros scans et de nombreux répertoires :
Performances au démarrage :
- Chargement progressif - L'interface se rend instantanément (<200 ms), les scans se chargent un par un
- Le listage des répertoires se fait de manière incrémentielle (1 ms par répertoire)
- Fonctionne efficacement sur les systèmes de fichiers réseau et les montages distants
- Aucune opération bloquante au démarrage
Limites d'affichage :
- Onglet Vulnérabilités : 1 000 lignes maximum (triées par gravité)
- Onglet Constatations : 1 000 lignes maximum
- Onglet Événements : 1 000 lignes maximum (utilisez les filtres pour les gros scans)
- Vues arborescentes : 500 nœuds maximum (utilisez les filtres pour cibler des zones spécifiques)
- Liste des scans : Le chargement progressif affiche les scans au fur et à mesure de leur découverte
Lecture de fichiers :
- Lit les deux extrémités du fichier pour trouver les événements SCAN (gère les dossiers de scan réutilisés)
- Détecte le scan le plus récent par horodatage (prend en charge plusieurs exécutions dans le même répertoire)
- Estime le nombre d'événements pour les gros scans en utilisant la taille du fichier et l'échantillonnage
- Met en cache les vérifications de statut pour éviter des analyses de processus répétées
Actualisation automatique :
- Le minuteur s'arrête automatiquement pour les scans FINISHED/INTERRUPTED
- Ne vérifie que les scans RUNNING pour les mises à jour
- Résultats mis en cache pendant 5 secondes
- Le drapeau
initial_load_phase empêche les conflits d'actualisation au démarrage
Conseils
- Utilisez les filtres (type, distance de périmètre) pour cibler des événements spécifiques dans les gros scans
- Les compteurs d'événements pour les gros scans (>1 Mo) sont des estimations pour des raisons de performance
- Les raccourcis d'annotation (t, x, i) sont sensibles au contexte et n'apparaissent que sur les onglets concernés
- Le chargement progressif signifie que vous pouvez commencer à travailler immédiatement - pas besoin d'attendre que tous les scans soient chargés
- Sur les systèmes de fichiers réseau lents, les scans se remplissent progressivement - c'est un comportement normal
- Supprimez
~/.bbot_ui_venv/ pour forcer une réinstallation propre
Licence
MIT