
Nächste Generation DorX. Erstellt von Dorks, für Dorks. 🤓
DorXNG ist eine moderne Lösung zur Gewinnung von OSINT-Daten mithilfe fortgeschrittener Suchmaschinenoperatoren über mehrere vorgelagerte Suchanbieter. Im Backend wird ein zweckgebautes containerisiertes Image von SearXNG verwendet, einer selbst gehosteten, hackbaren, datenschutzorientierten Meta-Suchmaschine.
Unsere SearXNG-Implementierung leitet alle Suchanfragen über das Tor-Netzwerk, während die Schaltkreise alle zehn Sekunden mit der Tor-Konfigurationsdirektive MaxCircuitDirtiness erneuert werden. Wir haben außerdem alle clientseitigen Timeout-Funktionen von SearXNG deaktiviert. Diese Einstellungen ermöglichen die Umgehung von Suchmaschineneinschränkungen, die häufig bei vielen wiederholten Suchanfragen auftreten.
Die DorXNG-Client-Anwendung ist in Python3 geschrieben und kommuniziert mit der SearXNG-API, um Suchanfragen gleichzeitig auszuführen. Sie kann sogar Anfragen über mehrere SearXNG-Instanzen hinweg stellen. Die resultierenden Suchergebnisse werden in einer SQLite3-Datenbank gespeichert.

Wir haben jede unterstützte vorgelagerte Suchmaschine aktiviert, die fortgeschrittene Suchoperator-Abfragen erlaubt:
GoogleDuckDuckGoQwantBingBraveStartpageYahooWeitere Informationen darüber, welche Suchmaschinen SearXNG unterstützt, finden Sie unter: Configured Engines
Shout Out an die Entwickler von Tor und SearXNG, die dies ermöglicht haben. Spenden Sie an beide Projekte!
Shout Out an den Entwickler von pagodo für die Inspiration und das tolle ghdb_scraper.py-Skript!
Nicht zuletzt ein Shout Out an j0hnny. Den OG Dork. 🧠🏴☠
Installiere DorXNG
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
Lade unseren Benutzerdefinierten SearXNG-Docker-Container herunter und führe ihn aus (mindestens einen). Es können mehrere SearXNG-Instanzen verwendet werden. Verwenden Sie die Option --serverlist mit DorXNG. Siehe: server.lst
docker run researchanddestroy/searxng:latest
Wenn Sie den Container selbst bauen möchten:
git clone https://github.com/researchanddestroy/searxng # Die URL muss vollständig in Kleinbuchstaben sein, damit der Build-Prozess abgeschlossen wird
cd searxng
DOCKER_BUILDKIT=1 make docker.build
docker images
docker run <image-id>
Standardmäßig hat DorXNG eine fest codierte server-Variable in parse_args.py, die auf die IP-Adresse gesetzt ist, die Docker dem ersten Container auf Ihrem Rechner zuweist: 172.17.0.2. Diese kann geändert oder mit --server oder --serverlist überschrieben werden.
Starte die Ausgabe von Suchanfragen
./DorXNG.py -q 'Suchanfrage'
Die DorXNG-Datenbank abfragen
./DorXNG.py -D 'regex Suchstring'
-h, --help show this help message and exit
-s SERVER, --server SERVER
DorXNG Server Instance - Example: 'https://172.17.0.2/search'
-S SERVERLIST, --serverlist SERVERLIST
Issue Search Queries Across a List of Servers - Format: Newline Delimited
-q QUERY, --query QUERY
Issue a Search Query - Examples: 'search query' | '!tch search query' | 'site:example.com intext:example'
-Q QUERYLIST, --querylist QUERYLIST
Iterate Through a Search Query List - Format: Newline Delimited
-n NUMBER, --number NUMBER
Define the Number of Page Result Iterations
-c CONCURRENT, --concurrent CONCURRENT
Define the Number of Concurrent Page Requests
-l LIMITDATABASE, --limitdatabase LIMITDATABASE
Set Maximum Database Size Limit - Starts New Database After Exceeded - Example: --limitdatabase 10 (10k Database Entries) - Suggested Maximum Database Size is 50k
when doing Deep Recursion
-L LOOP, --loop LOOP Define the Number of Main Function Loop Iterations - Infinite Loop with 0
-d DATABASE, --database DATABASE
Specify SQL Database File - Default: 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
Issue Database Query - Format: Regex
-m MERGEDATABASE, --mergedatabase MERGEDATABASE
Merge SQL Database File - Example: --mergedatabase database.db
-t TIMEOUT, --timeout TIMEOUT
Specify Timeout Interval Between Requests - Default: 4 Seconds - Disable with 0
-r NONEWRESULTS, --nonewresults NONEWRESULTS
Specify Number of Iterations with No New Results - Default: 4 (3 Attempts) - Disable with 0
-v, --verbose Enable Verbose Output
-vv, --veryverbose Enable Very Verbose Output - Displays Raw JSON Output
Manchmal trifft man auf einen Tor-Ausgangsknoten, der bereits von vorgelagerten Suchanbietern blockiert wird, sodass Sie nur eine minimale Anzahl von Suchergebnissen erhalten. Keine Sorge ... Senden Sie einfach weiterhin Anfragen. 😉
Behalten Sie Ihre DorXNG-SQL-Datenbankdatei und führen Sie Ihren Befehl erneut aus, oder verwenden Sie den Schalter --loop, um die Hauptfunktion wiederholt zu durchlaufen. 🔁
Meistens gilt: Je mehr Durchläufe Sie über eine Suchanfrage machen, desto mehr Ergebnisse werden Sie finden. 🍻
Beachten Sie auch, dass wir einen Kompromiss zwischen Geschwindigkeit und einer höheren Datenausgabe eingegangen sind. Dies ist schließlich ein OSINT-Projekt. 🔎🌎
Jede von Ihnen gestellte Suchanfrage wird an 7 vorgelagerte Suchanbieter gesendet ... Besonders bei --concurrent-Abfragen werden viele vorgelagerte Anfragen generiert ... Haben Sie also Geduld.
Beachten Sie, dass DorXNG weiterhin neue Suchergebnisse an Ihre Datenbankdatei anhängt. Verwenden Sie den Schalter --database, um einen Datenbankdateinamen anzugeben. Der Standarddateiname ist dorxng.db. Für die meisten ist das wahrscheinlich egal, aber wenn Sie Ihre OSINT-Untersuchungen getrennt halten möchten, steht es Ihnen zur Verfügung.
Vier gleichzeitige Suchanfragen scheinen der optimale Wert zu sein. Sie können mehr ausgeben, aber je mehr Anfragen Sie gleichzeitig stellen, desto länger dauert es, Ergebnisse zu erhalten. Es erhöht auch die Wahrscheinlichkeit, dass Sie HTTP/429 Too Many Requests-Antworten von vorgelagerten Suchanbietern auf diesem bestimmten Tor-Schaltkreis erhalten.
Wenn Sie mehrere SearXNG-Docker-Container zu schnell starten, können Tor-Verbindungen möglicherweise nicht aufgebaut werden. Während der Initialisierung eines Containers sieht eine gültige Antwort von der Tor-Konnektivitätsprüfungsfunktion wie folgt aus:
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
Wenn Sie etwas anderes sehen oder wenn Sie beginnen, HTTP/500-Antwortcodes vom SearXNG-Überwachungsskript (STDOUT im Container) zu sehen, töten Sie den Docker-Container und starten Sie einen neuen.
HTTP/504 Gateway Time-out-Antwortcodes innerhalb von DorXNG sind manchmal zu erwarten. Dies bedeutet, dass die SearXNG-Instanz innerhalb einer Minute keine gültige Antwort erhalten hat. Dieser bestimmte Tor-Schaltkreis ist wahrscheinlich zu langsam. Machen Sie einfach weiter!
Es gibt eigentlich keinen Grund, eine Menge dieser Container laufen zu lassen ... Noch ... 😉 Wie viele Sie laufen lassen, hängt wirklich davon ab, was Sie tun. Jeder Container verwendet ungefähr 1,25 GB RAM.
Ein Container laufen zu lassen funktioniert einwandfrei, außer dass Sie wahrscheinlich Suchergebnisse verpassen werden. Verwenden Sie also --loop und deaktivieren Sie nicht --timeout.
Mehrere Container laufen zu lassen ist schön, weil jeder seinen eigenen Tor-Schaltkreis hat, der alle 10 Sekunden erneuert wird.
Wenn Sie den Modus --serverlist verwenden, deaktivieren Sie die --timeout-Funktion, damit es keine Verzögerung zwischen den Anfragen gibt (Das Standardverzögerungsintervall beträgt 4 Sekunden).
Beachten Sie, dass je mehr Container Sie laufen lassen, desto mehr Speicher benötigen Sie. Dies gilt auch für tiefe Rekursion ... Wir haben die maximale Rekursionstiefe von Python deaktiviert ... 🔁😉
Je mehr Rekursionen Ihr Befehl durchläuft, ohne zu main zurückzukehren, desto mehr Speicher wird der Prozess verbrauchen. Möglicherweise kommen Sie zurück und stellen fest, dass der Prozess mit einer Killed-Fehlermeldung abgestürzt ist. Wenn dies passiert, ist Ihrem Rechner der Speicher ausgegangen und der Prozess wurde beendet. Keine Sorge ... Ihre Datenbankdatei ist immer noch gut. 👍👍
Wenn Ihre Datenbankdatei außergewöhnlich groß wird, verlangsamt dies unweigerlich das Programm und verbraucht mit jeder Iteration mehr Speicher ...
Diese Python-Stack-Frames sind dick ... 🍑😅
Wir haben einen deutlichen Leistungsabfall bei Datenbankdateien festgestellt, die etwa 50.000 Einträge überschreiten.
Die Option --limitdatabase wurde implementiert, um einige dieser Speicherverbrauchsprobleme zu mildern. Verwenden Sie sie in Kombination mit --loop, um tiefe rekursive Iterationen innerhalb von iterator.py zu unterbrechen und von main genau dort neu zu starten, wo Sie aufgehört haben.
Sobald Sie eine Reihe von Datenbankdateien haben, können Sie sie alle (eine nach der anderen) mit --mergedatabase zusammenführen. Sie können sie sogar alle in eine neue Datenbankdatei zusammenführen, wenn Sie einen unbenutzten Dateinamen mit --database angeben.
Die beigefügte Datei query.lst enthält jeden Dork, der derzeit in der Google Hacking Database (GHDB) vorhanden ist. Siehe: ghdb_scraper.py
Wir haben sie bereits für Sie durchlaufen ... 😉 Unsere ghdb.db-Datei enthält über eine Million Einträge und es werden mehr! 🤩 Sie können sie hier herunterladen ghdb.db, falls Sie eine Kopie möchten. 😉
Beispiel für die Abfrage der ghdb.db-Datenbank:
./DorXNG.py -d ghdb.db -D '^http.*\.sql$'
Eine Neufassung von DorXNG in Golang ist bereits in Arbeit. 😉 (GorXNG? | DorXNGNG?) 😆
Wir werden noch mehr Dorks brauchen ... 😅 Schauen Sie sich DorkGPT an 👀
Einzelne Suchanfrage
./DorXNG.py -q 'Suchanfrage'
Gleichzeitige Suchanfragen
./DorXNG.py -q 'Suchanfrage' -c4
Seiteniteration-Modus
./DorXNG.py -q 'Suchanfrage' -n4
Iterative gleichzeitige Suchanfragen
./DorXNG.py -q 'Suchanfrage' -c4 -n64
Serverlisten-Iteration-Modus
./DorXNG.py -S server.lst -q 'Suchanfrage' -c4 -n64 -t0
Abfragelisten-Iteration-Modus
./DorXNG.py -Q query.lst -c4 -n64
Abfrage- und Serverlisten-Iteration
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0
Hauptfunktionsschleifen-Iteration-Modus
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L4
Unendlicher Hauptfunktionsschleifen-Iteration-Modus mit einem Datenbankdateigrößenlimit von 10k Einträgen
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L0 -l10
Zusammenführen einer Datenbank (eine nach der anderen) in eine neue Datenbankdatei
./DorXNG.py -d new-database.db -m dorxng.db
Alle Datenbankdateien im aktuellen Arbeitsverzeichnis in eine neue Datenbankdatei zusammenführen
for i in `ls *.db`; do ./DorXNG.py -d new-database.db -m $i; done
Eine Datenbank abfragen
./DorXNG.py -d new-database.db -D 'regex Suchstring'