 |
ODBParser |
TL;DR
ODBParser est un outil pour rechercher des informations personnelles identifiables (PII) exposées dans des bases de données ouvertes.
À utiliser UNIQUEMENT pour identifier les PII exposées et avertir les propriétaires de serveurs d'une maintenance irresponsable des bases de données
OU pour interroger des bases de données pour lesquelles vous avez l'autorisation d'accéder !
VEUILLEZ UTILISER DE MANIÈRE RESPONSABLE
Qu'est-ce que c'est ?
J'ai écrit cet outil car je voulais créer un outil OSINT tout-en-un pour rechercher, analyser et analyser les bases de données ouvertes afin d'identifier les fuites de PII sur des serveurs tiers. D'autres outils semblent soit uniquement rechercher des bases de données ouvertes, soit les vider une fois que vous les avez identifiées, puis récupérer les données sans discernement. L'outil a grandi à partir d'une ou deux fonctions pour devenir ce qui se trouve dans ce dépôt, donc le code n'est pas aussi propre et joli qu'il pourrait l'être.
Fonctionnalités
Pour identifier les bases de données ouvertes, vous pouvez :
- interroger Shodan et BinaryEdge en utilisant tous les paramètres possibles (filtrer par pays, numéro de port, etc.)
- spécifier une seule adresse IP
- charger un fichier contenant une liste d'adresses IP
- coller une liste d'adresses IP depuis le presse-papiers
Options de vidage :
- analyser toutes les bases de données/collections pour identifier les données que vous spécifiez
- tout récupérer sur le serveur
- récupérer un seul index/collection
- Utilisez ctrl+c pour ignorer le vidage d'un certain index
Post-traitement :
- convertir les vidages JSON en CSV
- supprimer les colonnes inutiles des CSV
Autres fonctionnalités :
- garde une trace de toutes les adresses IP et bases de données que vous avez interrogées, ainsi que des informations sur chaque serveur.
- maintient un fichier de statistiques avec le nombre d'IP interrogées, le nombre de bases de données analysées et le nombre d'enregistrements vidés.
- convertir les vidages JSON que vous possédez déjà en CSV
- pour chaque base de données dont le nombre total d'enregistrements dépasse votre limite, le script crée une entrée dans un fichier spécial accompagnée de 5 enregistrements échantillons afin que vous puissiez examiner et décider si la base de données vaut la peine d'être récupérée.
- La sortie par défaut est un fichier JSON avec un objet JSON par ligne. Vous pouvez choisir de produire un fichier JSON « correct » en utilisant le drapeau « properjson ».
- Vous pouvez convertir les fichiers en CSV à la volée ou ne convertir que certains fichiers après la fin de l'exécution (je recommande la seconde option). Les fichiers JSON convertis seront déplacés vers un dossier nommé « JSON backups » dans le même répertoire. REMARQUE : Lors de la conversion en CSV, le script supprime les lignes en double exactes et supprime les colonnes et les lignes où toutes les valeurs sont NaN, car c'est ce que je voulais faire. N'hésitez pas à modifier la fonction si vous préférez une copie exacte du fichier JSON.
- Windows UNIQUEMENT Si le script renvoie un très grand nombre d'index contenant le champ qui vous intéresse, le script liste les noms des bases de données, fait une pause et vous donne dix secondes pour décider si vous souhaitez extraire toutes les données de chaque index, car j'ai constaté que si trop de bases de données sont renvoyées même après avoir spécifié les champs souhaités, il y a de fortes chances que les données soient factices ou des journaux inutiles, et vous pouvez généralement le déterminer à partir du nom. Si vous n'agissez pas dans les 10 secondes, le script videra tous les index.
- comme vous l'avez peut-être remarqué, beaucoup de personnes scannent les bases de données MongoDB et les prennent en otage, changeant souvent leur nom en quelque chose comme « TO_RESTORE_EMAIL_XXXRESTORE.COM ». Le scraper MongoDB ignorera toutes les bases de données et collections qui ont été compromises en vérifiant le nom de la base de données/collection par rapport à une liste de chaînes indiquant une compromission.
- Le script est assez verbeux (peut-être trop), mais j'aime voir ce qui se passe. N'hésitez pas à désactiver les instructions d'affichage si vous préférez.
Personnalisation
Consultez le fichier odbconfig.py pour spécifier vos paramètres, car le but est vraiment d'exposer les données qui vous intéressent. J'ai fourni quelques exemples dans le fichier de configuration. Amusez-vous avec !
Vous pouvez :
- spécifier les noms d'index ou de collections que vous souhaitez collecter en indiquant des sous-chaînes dans le fichier de configuration. Par exemple, si vous avez le terme « client », le script extraira l'index appelé « clients » ou « client_data ». Je recommande de laisser ces listes vides car vous ne savez pas comment s'appelleront les bases de données qui vous intéressent, et de spécifier plutôt les champs qui vous intéressent.
- spécifier les champs qui vous intéressent : si vous voulez uniquement récupérer les index ES qui contiennent « email » dans un nom de champ, par exemple « user_emails », vous pouvez le faire. Si vous voulez vous assurer que l'index contient au moins 2 champs qui vous intéressent, vous pouvez également le faire. Ou si vous voulez tout récupérer, quels que soient les champs présents, vous pouvez aussi le faire.
- spécifier les index que vous ne voulez PAS, par exemple les noms d'index système et autres généralement utilisés pour la journalisation de base. Des exemples sont fournis dans le fichier de configuration.
- outrepasser la configuration et tout récupérer sur un serveur
- spécifier la sortie (par défaut JSON, vous pouvez choisir CSV)
- définir la taille minimale et maximale de la base de données que le script videra par défaut, et vous pouvez utiliser un drapeau pour outrepasser le nombre maximum de documents au cas par cas.
Installation et prérequis
- Clonez ou téléchargez sur votre machine
- Obtenez des clés API pour Shodan et/ou BinaryEdge
- Configurez les paramètres dans le fichier ODBconfig.py
- Installez les dépendances à partir du fichier
Je suggère de créer un environnement virtuel pour ODBParser afin d'éviter tout problème de versions de modules incorrectes.
Remarque : Testé UNIQUEMENT sur Python 3.7.3 et Windows 10.
VEUILLEZ UTILISER DE MANIÈRE RESPONSABLE
Prochaines étapes et problèmes connus
- nettoyer un peu plus le code
- multithreader divers processus
- étendre à d'autres types de bases de données
- ajouter d'autres moteurs de recherche de répertoires ouverts (Zoomeye, etc.)
- impossible de faire défiler au-delà de la première page pour certaines instances ES en raison du fonctionnement d'ES <2.0. Toute aide est appréciée ! Je pense avoir corrigé cela. Ouvrez un problème si vous obtenez des erreurs de scrollid.
Utilisation
Examples: python ODBParser.py -cn US -p 8080 -t users --elastic --shodan --csv --limit 100
python ODBParser.py -ip 192.168.2:8080 --mongo --ignorelogs --nosizelimits
Damage to-date: 0 servers parsed | 0 databases dumped | 0 records pulled
_____________________________________________________________________________
optional arguments:
-h, --help show this help message and exit