
Nouvelle génération DorX. Construit par des Dorks, pour des Dorks. 🤓
DorXNG est une solution moderne pour récolter des données OSINT en utilisant des opérateurs de recherche avancés via plusieurs fournisseurs de recherche en amont. En arrière-plan, elle exploite une image conteneurisée spécialement conçue de SearXNG, un méta-moteur de recherche auto-hébergé, hackable et respectueux de la vie privée.
Notre implémentation de SearXNG route toutes les requêtes de recherche sur le réseau Tor tout en renouvelant les circuits toutes les dix secondes via la directive de configuration MaxCircuitDirtiness de Tor. Nous avons également désactivé toutes les fonctionnalités de timeout côté client de SearXNG. Ces paramètres permettent d'éviter les restrictions des moteurs de recherche souvent rencontrées lors de l'émission de nombreuses requêtes répétées.
L'application cliente DorXNG est écrite en Python3 et interagit avec l'API SearXNG pour émettre des requêtes de recherche simultanément. Elle peut même envoyer des requêtes à travers plusieurs instances SearXNG. Les résultats de recherche obtenus sont stockés dans une base de données SQLite3.

Nous avons activé tous les moteurs de recherche en amont supportés qui permettent les requêtes avec opérateurs avancés :
GoogleDuckDuckGoQwantBingBraveStartpageYahooPour plus d'informations sur les moteurs de recherche supportés par SearXNG, voir : Moteurs configurés
Un grand merci aux développeurs de Tor et SearXNG pour avoir rendu cela possible. Allez faire un don aux deux projets !
Merci également au développeur de pagodo pour l'inspiration et ce superbe script ghdb_scraper.py !
Enfin, et surtout, merci à j0hnny. Le Dork original. 🧠🏴☠
Installer DorXNG
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
Télécharger et exécuter notre conteneur Docker SearXNG personnalisé (au moins un). Plusieurs instances SearXNG peuvent être utilisées. Utilisez l'option --serverlist avec DorXNG. Voir : server.lst
docker run researchanddestroy/searxng:latest
Si vous souhaitez construire le conteneur vous-même :
git clone https://github.com/researchanddestroy/searxng # L'URL doit être entièrement en minuscules pour que la construction réussisse
cd searxng
DOCKER_BUILDKIT=1 make docker.build
docker images
docker run <image-id>
Par défaut, DorXNG a une variable server codée en dur dans parse_args.py qui est définie sur l'adresse IP que Docker attribuera au premier conteneur que vous exécuterez sur votre machine : 172.17.0.2. Cela peut être modifié, ou écrasé avec --server ou --serverlist.
Commencer à émettre des requêtes de recherche
./DorXNG.py -q 'search query'
Interroger la base de données DorXNG
./DorXNG.py -D 'regex search string'
-h, --help affiche ce message d'aide et quitte
-s SERVER, --server SERVER
Instance du serveur DorXNG - Exemple : 'https://172.17.0.2/search'
-S SERVERLIST, --serverlist SERVERLIST
Émettre des requêtes de recherche sur une liste de serveurs - Format : séparé par des sauts de ligne
-q QUERY, --query QUERY
Émettre une requête de recherche - Exemples : 'search query' | '!tch search query' | 'site:example.com intext:example'
-Q QUERYLIST, --querylist QUERYLIST
Parcourir une liste de requêtes de recherche - Format : séparé par des sauts de ligne
-n NUMBER, --number NUMBER
Définir le nombre d'itérations de résultats de pages
-c CONCURRENT, --concurrent CONCURRENT
Définir le nombre de requêtes de page simultanées
-l LIMITDATABASE, --limitdatabase LIMITDATABASE
Définir la taille maximale de la base de données - Démarre une nouvelle base après dépassement - Exemple : --limitdatabase 10 (10k entrées) - Taille max suggérée : 50k
lors d'une récursion profonde
-L LOOP, --loop LOOP Définir le nombre d'itérations de la boucle de la fonction principale - Boucle infinie avec 0
-d DATABASE, --database DATABASE
Spécifier le fichier de base de données SQL - Par défaut : 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
Interroger la base de données - Format : expression régulière
-m MERGEDATABASE, --mergedatabase MERGEDATABASE
Fusionner un fichier de base de données SQL - Exemple : --mergedatabase database.db
-t TIMEOUT, --timeout TIMEOUT
Spécifier l'intervalle de temporisation entre les requêtes - Par défaut : 4 secondes - Désactiver avec 0
-r NONEWRESULTS, --nonewresults NONEWRESULTS
Spécifier le nombre d'itérations sans nouveaux résultats - Par défaut : 4 (3 tentatives) - Désactiver avec 0
-v, --verbose Activer la sortie verbeuse
-vv, --veryverbose Activer la sortie très verbeuse - Affiche la sortie JSON brute
Parfois, vous tomberez sur un nœud de sortie Tor déjà mis sur liste noire par les fournisseurs de recherche en amont, ce qui vous donnera un nombre minimal de résultats de recherche. Pas d'inquiétude... Continuez simplement à envoyer des requêtes. 😉
Conservez votre fichier de base de données DorXNG SQL et relancez votre commande, ou utilisez l'option --loop pour itérer la fonction principale de manière répétée. 🔁
Le plus souvent, plus vous faites de passes sur une requête de recherche, plus vous trouverez de résultats. 🍻
Gardez également à l'esprit que nous avons sacrifié la vitesse pour un plus grand volume de données. Après tout, c'est un projet OSINT. 🔎🌎
Chaque requête de recherche que vous effectuez est envoyée à 7 fournisseurs de recherche en amont... Surtout avec les requêtes --concurrent, cela génère beaucoup de requêtes en amont... Alors soyez patient.
Sachez que DorXNG continuera d'ajouter de nouveaux résultats de recherche à votre fichier de base de données. Utilisez l'option --database pour spécifier un nom de fichier de base de données ; le nom par défaut est dorxng.db. Cela n'a probablement pas d'importance pour la plupart, mais si vous voulez garder vos investigations OSINT séparées, c'est là pour vous.
Quatre requêtes simultanées semblent être le point idéal. Vous pouvez en envoyer plus, mais plus vous en envoyez à la fois, plus il faut de temps pour recevoir les résultats. Cela augmente également la probabilité de recevoir des réponses HTTP/429 Too Many Requests des fournisseurs de recherche en amont sur ce circuit Tor spécifique.
Si vous démarrez plusieurs conteneurs Docker SearXNG trop rapidement, les connexions Tor peuvent échouer. Lors de l'initialisation d'un conteneur, une réponse valide de la fonction de vérification de la connectivité Tor ressemble à ceci :
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
Si vous voyez autre chose, ou si vous commencez à voir des codes de réponse HTTP/500 provenant du script de surveillance de SearXNG (STDOUT dans le conteneur), tuez le conteneur Docker et lancez-en un nouveau.
Les codes de réponse HTTP/504 Gateway Time-out dans DorXNG sont parfois attendus. Cela signifie que l'instance SearXNG n'a pas reçu de réponse valide en une minute. Ce circuit Tor est probablement trop lent. Continuez simplement !
Il n'y a vraiment pas de raison de faire tourner une tonne de ces conteneurs... Pas encore... 😉 Le nombre que vous exécutez dépend vraiment de ce que vous faites. Chaque conteneur utilise environ 1,25 Go de RAM.
Exécuter un seul conteneur fonctionne parfaitement, sauf que vous manquerez probablement des résultats de recherche. Utilisez donc --loop et ne désactivez pas --timeout.
Exécuter plusieurs conteneurs est agréable car chacun a son propre circuit Tor qui se renouvelle toutes les 10 secondes.
Lorsque vous utilisez le mode --serverlist, désactivez la fonction --timeout pour qu'il n'y ait pas de délai entre les requêtes (l'intervalle de délai par défaut est de 4 secondes).
Gardez à l'esprit que plus vous exécutez de conteneurs, plus vous aurez besoin de mémoire. Cela vaut également pour la récursion profonde... Nous avons désactivé la limite de récursion maximale de Python... 🔁😉
Plus votre commande effectue de récursions sans revenir à main, plus le processus consommera de mémoire. Vous pourriez revenir et constater que le processus a planté avec un message d'erreur Killed. Si cela se produit, votre machine a manqué de mémoire et a tué le processus. Pas d'inquiétude cependant... Votre fichier de base de données est toujours bon. 👍👍
Si votre fichier de base de données devient exceptionnellement volumineux, cela ralentit inévitablement le programme et consomme plus de mémoire à chaque itération...
Ces piles de frames Python sont épaisses... 🍑😅
Nous avons observé une baisse notable des performances avec des fichiers de base de données dépassant environ 50 000 entrées.
L'option --limitdatabase a été implémentée pour atténuer certains de ces problèmes de consommation mémoire. Utilisez-la en combinaison avec --loop pour interrompre l'itération récursive profonde dans iterator.py et redémarrer depuis main là où vous vous étiez arrêté.
Une fois que vous avez une série de fichiers de base de données, vous pouvez tous les fusionner (un par un) avec --mergedatabase. Vous pouvez même tous les fusionner dans un nouveau fichier de base de données si vous spécifiez un nom de fichier non utilisé avec --database.
Le fichier query.lst inclus contient chaque dork qui existe actuellement dans la Google Hacking Database (GHDB). Voir : ghdb_scraper.py
Nous l'avons déjà parcouru pour vous... 😉 Notre fichier ghdb.db contient plus d'un million d'entrées et continue de croître ! 🤩 Vous pouvez le télécharger ici ghdb.db si vous en voulez une copie. 😉
Exemple d'interrogation de la base de données ghdb.db :
./DorXNG.py -d ghdb.db -D '^http.*\.sql$'
Une réécriture de DorXNG en Golang est déjà en cours. 😉 (GorXNG ? | DorXNGNG ?) 😆
Nous allons avoir besoin de plus de dorks... 😅 Découvrez DorkGPT 👀
Requête de recherche unique
./DorXNG.py -q 'search query'
Requêtes de recherche simultanées
./DorXNG.py -q 'search query' -c4
Mode itération de page
./DorXNG.py -q 'search query' -n4
Requêtes de recherche simultanées itératives
./DorXNG.py -q 'search query' -c4 -n64
Mode itération de liste de serveurs
./DorXNG.py -S server.lst -q 'search query' -c4 -n64 -t0
Mode itération de liste de requêtes
./DorXNG.py -Q query.lst -c4 -n64
Itération des listes de requêtes et de serveurs
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0
Mode itération de boucle de la fonction principale
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L4
Mode itération de boucle infinie de la fonction principale avec une limite de taille de fichier de base de données fixée à 10k entrées
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L0 -l10
Fusion d'une base de données (une à la fois) dans un nouveau fichier de base de données
./DorXNG.py -d new-database.db -m dorxng.db
Fusionner tous les fichiers de base de données du répertoire de travail courant dans un nouveau fichier de base de données
for i in `ls *.db`; do ./DorXNG.py -d new-database.db -m $i; done
Interroger une base de données
./DorXNG.py -d new-database.db -D 'regex search string'