
Next Generation DorX. Costruito da Dorks, per Dorks. 🤓
DorXNG è una soluzione moderna per raccogliere dati OSINT utilizzando operatori di ricerca avanzati attraverso molteplici provider di ricerca upstream. Nel backend sfrutta un'immagine containerizzata appositamente costruita di SearXNG, un meta-motore di ricerca self-hosted, hackable e incentrato sulla privacy.
La nostra implementazione di SearXNG instrada tutte le query di ricerca attraverso la rete Tor, rigenerando i circuiti ogni dieci secondi con la direttiva di configurazione MaxCircuitDirtiness di Tor. Abbiamo anche disabilitato tutte le funzionalità di timeout lato client di SearXNG. Queste impostazioni consentono di eludere le restrizioni dei motori di ricerca comunemente incontrate quando si emettono molte query di ricerca ripetute.
L'applicazione client DorXNG è scritta in Python3 e interagisce con l'API di SearXNG per emettere query di ricerca in modo concorrente. Può persino inviare richieste attraverso più istanze SearXNG. I risultati di ricerca ottenuti vengono memorizzati in un database SQLite3.

Abbiamo abilitato ogni motore di ricerca upstream supportato che consente query con operatori di ricerca avanzati:
GoogleDuckDuckGoQwantBingBraveStartpageYahooPer maggiori informazioni sui motori di ricerca supportati da SearXNG, consultare: Configured Engines
Un ringraziamento agli sviluppatori di Tor e SearXNG per aver reso tutto ciò possibile. Andate a donare a entrambi i progetti!
Un ringraziamento allo sviluppatore di pagodo per l'ispirazione e quel fantastico script ghdb_scraper.py!
Ultimo ma non meno importante, un ringraziamento a j0hnny. L'OG Dork. 🧠🏴☠
Installa DorXNG
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
Scarica ed esegui il nostro container Docker SearXNG personalizzato (almeno uno). È possibile utilizzare più istanze SearXNG. Usa l'opzione --serverlist con DorXNG. Vedi: server.lst
docker run researchanddestroy/searxng:latest
Se desideri costruire il container da solo:
git clone https://github.com/researchanddestroy/searxng # L'URL deve essere tutto minuscolo per completare la build
cd searxng
DOCKER_BUILDKIT=1 make docker.build
docker images
docker run <image-id>
Per impostazione predefinita, DorXNG ha una variabile server hardcoded in parse_args.py impostata sull'indirizzo IP che Docker assegnerà al primo container che esegui sulla tua macchina 172.17.0.2. Può essere modificata o sovrascritta con --server o --serverlist.
Inizia a emettere query di ricerca
./DorXNG.py -q 'query di ricerca'
Interroga il database DorXNG
./DorXNG.py -D 'stringa regex di ricerca'
-h, --help mostra questo messaggio di aiuto ed esci
-s SERVER, --server SERVER
Istanza del server DorXNG - Esempio: 'https://172.17.0.2/search'
-S SERVERLIST, --serverlist SERVERLIST
Emetti query di ricerca su un elenco di server - Formato: delimitato da newline
-q QUERY, --query QUERY
Emetti una query di ricerca - Esempi: 'query di ricerca' | '!tch query di ricerca' | 'site:example.com intext:example'
-Q QUERYLIST, --querylist QUERYLIST
Iterazione attraverso un elenco di query di ricerca - Formato: delimitato da newline
-n NUMBER, --number NUMBER
Definisci il numero di iterazioni dei risultati della pagina
-c CONCURRENT, --concurrent CONCURRENT
Definisci il numero di richieste di pagina concorrenti
-l LIMITDATABASE, --limitdatabase LIMITDATABASE
Imposta il limite massimo di dimensione del database - Avvia un nuovo database dopo il superamento - Esempio: --limitdatabase 10 (10.000 voci nel database) - La dimensione massima consigliata del database è 50k
quando si esegue una ricorsione profonda
-L LOOP, --loop LOOP Definisci il numero di iterazioni del ciclo della funzione principale - Ciclo infinito con 0
-d DATABASE, --database DATABASE
Specifica il file del database SQL - Predefinito: 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
Esegui una query sul database - Formato: regex
-m MERGEDATABASE, --mergedatabase MERGEDATABASE
Unisci file di database SQL - Esempio: --mergedatabase database.db
-t TIMEOUT, --timeout TIMEOUT
Specifica l'intervallo di timeout tra le richieste - Predefinito: 4 secondi - Disabilita con 0
-r NONEWRESULTS, --nonewresults NONEWRESULTS
Specifica il numero di iterazioni senza nuovi risultati - Predefinito: 4 (3 tentativi) - Disabilita con 0
-v, --verbose Abilita output verboso
-vv, --veryverbose Abilita output molto verboso - Mostra output JSON grezzo
A volte capiterai su un nodo di uscita Tor già bloccato dai provider di ricerca upstream, ricevendo così un numero minimo di risultati di ricerca. Niente paura... Continua a lanciare query. 😉
Mantieni il tuo file di database SQL di DorXNG e riesegui il comando, oppure usa l'opzione --loop per iterare ripetutamente la funzione principale. 🔁
Molto spesso, più passaggi fai su una query di ricerca, più risultati troverai. 🍻
Tieni anche presente che abbiamo sacrificato la velocità per un maggiore volume di dati in uscita. Dopo tutto, questo è un progetto OSINT. 🔎🌎
Ogni query di ricerca che fai viene inviata a 7 provider di ricerca upstream... Soprattutto con query --concurrent, questo genera molte richieste upstream... Quindi abbi pazienza.
Tieni presente che DorXNG continuerà ad aggiungere nuovi risultati di ricerca al tuo file di database. Usa l'opzione --database per specificare un nome file del database; il nome predefinito è dorxng.db. Probabilmente per la maggior parte non ha importanza, ma se vuoi tenere separate le tue indagini OSINT, è lì per te.
Quattro richieste di ricerca concorrenti sembrano essere il punto ottimale. Puoi emetterne di più, ma più query emetti contemporaneamente, più tempo ci vorrà per ricevere i risultati. Aumenta anche la probabilità di ricevere risposte HTTP/429 Too Many Requests dai provider di ricerca upstream su quel circuito Tor specifico.
Se avvii più container Docker SearXNG troppo rapidamente, le connessioni Tor potrebbero non riuscire a stabilirsi. Durante l'inizializzazione di un container, una risposta valida dalla funzione di verifica della connettività Tor appare così:
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
Se vedi qualcosa di diverso, o se inizi a vedere codici di risposta HTTP/500 dallo script di monitoraggio SearXNG (STDOUT nel container), kill il container Docker e avviane uno nuovo.
I codici di risposta HTTP/504 Gateway Time-out all'interno di DorXNG sono a volte previsti. Ciò significa che l'istanza SearXNG non ha ricevuto una risposta valida entro un minuto. Quel circuito Tor specifico è probabilmente troppo lento. Continua e basta!
Non c'è davvero motivo per eseguire un sacco di questi container... Ancora... 😉 Quanti ne esegui dipende davvero da cosa stai facendo. Ogni container utilizza circa 1.25GB di RAM.
Eseguire un singolo container funziona perfettamente, tranne che probabilmente perderai alcuni risultati di ricerca. Quindi usa --loop e non disabilitare --timeout.
Eseguire più container è comodo perché ognuno ha il proprio circuito Tor che si rigenera ogni 10 secondi.
Quando si esegue la modalità --serverlist, disabilita la funzionalità --timeout in modo che non ci sia ritardo tra le richieste (l'intervallo di ritardo predefinito è di 4 secondi).
Tieni presente che più container esegui, più memoria sarà necessaria. Questo vale anche per la ricorsione profonda... Abbiamo disabilitato il limite di ricorsione massimo di Python... 🔁😉
Più ricorsioni attraversa il tuo comando senza tornare a main, più memoria consumerà il processo. Potresti tornare e scoprire che il processo è crashato con un messaggio di errore Killed. Se ciò accade, la tua macchina ha esaurito la memoria e ha ucciso il processo. Ma niente paura... Il tuo file di database è ancora integro. 👍👍
Se il tuo file di database diventa eccezionalmente grande, inevitabilmente rallenta il programma e consuma più memoria a ogni iterazione...
Quegli stack frame di Python sono spessi... 🍑😅
Abbiamo notato un notevole calo delle prestazioni con file di database che superano circa 50 mila voci.
L'opzione --limitdatabase è stata implementata per mitigare alcuni di questi problemi di consumo di memoria. Usala in combinazione con --loop per interrompere l'iterazione ricorsiva profonda all'interno di iterator.py e riavviare da main proprio dove avevi interrotto.
Una volta che hai una serie di file di database, puoi unirli tutti (uno alla volta) con --mergedatabase. Puoi persino unirli tutti in un nuovo file di database se specifichi un nome file non utilizzato con --database.
Il file query.lst incluso contiene ogni dork attualmente presente nel Google Hacking Database (GHDB). Vedi: ghdb_scraper.py
Lo abbiamo già eseguito per te... 😉 Il nostro file ghdb.db contiene oltre un milione di voci e continua a crescere! 🤩 Puoi scaricarlo qui ghdb.db se desideri una copia. 😉
Esempio di interrogazione del database ghdb.db:
./DorXNG.py -d ghdb.db -D '^http.*\.sql$'
Una riscrittura di DorXNG in Golang è già in lavorazione. 😉 (GorXNG? | DorXNGNG?) 😆
Abbiamo bisogno di più dork... 😅 Dai un'occhiata a DorkGPT 👀
Singola query di ricerca
./DorXNG.py -q 'query di ricerca'
Query di ricerca concorrenti
./DorXNG.py -q 'query di ricerca' -c4
Modalità di iterazione delle pagine
./DorXNG.py -q 'query di ricerca' -n4
Query di ricerca concorrenti iterative
./DorXNG.py -q 'query di ricerca' -c4 -n64
Modalità di iterazione su elenco di server
./DorXNG.py -S server.lst -q 'query di ricerca' -c4 -n64 -t0
Modalità di iterazione su elenco di query
./DorXNG.py -Q query.lst -c4 -n64
Iterazione su elenco di query e server
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0
Modalità di iterazione del ciclo della funzione principale
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L4
Modalità di iterazione infinita del ciclo della funzione principale con limite di dimensione del file di database impostato a 10.000 voci
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L0 -l10
Unione di un database (uno alla volta) in un nuovo file di database
./DorXNG.py -d new-database.db -m dorxng.db
Unisci tutti i file di database nella directory di lavoro corrente in un nuovo file di database
for i in `ls *.db`; do ./DorXNG.py -d new-database.db -m $i; done
Interroga un database
./DorXNG.py -d new-database.db -D 'stringa regex di ricerca'