
pagodo (Passive Google Dork) - Automatisiert das Scraping und die Suche in der Google Hacking Database
pagodo automatisiert die Google-Suche nach potenziell anfälligen Webseiten und Anwendungen im Internet. Es ersetzt die manuelle Durchführung von Google-Dork-Suchen mit einem Web-GUI-Browser.
Es gibt 2 Teile. Der erste ist ghdb_scraper.py, der die neuesten Google Dorks abruft, und der zweite Teil ist pagodo.py, der die von ghdb_scraper.py gesammelten Informationen nutzt.
Die zentrale Google-Suchbibliothek verwendet jetzt die flexiblere yagooglesearch anstelle von googlesearch. Schauen Sie sich die yagooglesearch README für eine ausführlichere Erklärung der Unterschiede und Fähigkeiten der Bibliothek an.
Diese Version von pagodo unterstützt auch native HTTP(S)- und SOCKS5-Anwendungsunterstützung, sodass Sie es nicht mehr in ein Tool wie proxychains4 einwickeln müssen, wenn Sie Proxy-Unterstützung benötigen. Sie können mehrere Proxys angeben, die im Round-Robin-Verfahren verwendet werden, indem Sie eine durch Kommas getrennte Zeichenfolge von Proxys mit dem Schalter -p angeben.
Offensive Security unterhält die Google Hacking Database (GHDB) unter: https://www.exploit-db.com/google-hacking-database. Es ist eine Sammlung von Google-Suchen, sogenannten Dorks, die verwendet werden können, um potenziell anfällige Systeme oder andere interessante Informationen zu finden, die von den Google-Suchbots aufgenommen werden.
Die Allgemeinen Geschäftsbedingungen für pagodo sind dieselben wie in yagooglesearch.
Dieser Code wird wie besehen bereitgestellt, und Sie tragen die volle Verantwortung für seine Verwendung. Das Scrapen von Google-Suchergebnissen kann gegen die Nutzungsbedingungen verstoßen. Eine andere Python-Google-Suchbibliothek hatte einige interessante Informationen/Diskussionen dazu:
Die bevorzugte Methode von Google ist die Verwendung ihrer API.
Die Skripte sind für Python 3.6+ geschrieben. Klonen Sie das Git-Repository und installieren Sie die Anforderungen.
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
python3 -m venv .venv # If using a virtual environment.
source .venv/bin/activate # If using a virtual environment.
pip install --upgrade pip setuptools
pip install -r requirements.txt
Zu Beginn benötigt pagodo.py eine Liste aller aktuellen Google Dorks. Das Repository enthält ein dorks/-Verzeichnis mit den aktuellen Dorks, als ghdb_scraper.py zuletzt ausgeführt wurde. Es wird empfohlen, ghdb_scraper.py auszuführen, um die frischesten Daten zu erhalten, bevor pagodo.py ausgeführt wird. Das dorks/-Verzeichnis enthält:
all_google_dorks.txt, die alle Google Dorks enthält, eine pro Zeileall_google_dorks.json, die die JSON-Antwort von GHDB istDork-Kategorien:
categories = {
1: "Footholds",
2: "File Containing Usernames",
3: "Sensitives Directories",
4: "Web Server Detection",
5: "Vulnerable Files",
6: "Vulnerable Servers",
7: "Error Messages",
8: "File Containing Juicy Info",
9: "File Containing Passwords",
10: "Sensitive Online Shopping Info",
11: "Network or Vulnerability Data",
12: "Pages Containing Login Portals",
13: "Various Online devices",
14: "Advisories and Vulnerabilities",
}
Schreiben Sie alle Dorks in all_google_dorks.txt, all_google_dorks.json und einzelne Kategorien, wenn Sie mehr kontextuelle Daten zu jedem Dork wünschen.
python ghdb_scraper.py -s -j -i
Die Funktion ghdb_scraper.retrieve_google_dorks() gibt ein Wörterbuch mit der folgenden Datenstruktur zurück:
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
Verwenden einer Python-Shell (wie python oder ipython), um die Daten zu erkunden:
import ghdb_scraper
dorks = ghdb_scraper.retrieve_google_dorks(save_all_dorks_to_file=True)
dorks.keys()
dorks["total_dorks"]
dorks["extracted_dorks"]
dorks["category_dict"].keys()
dorks["category_dict"][1]["category_name"]
python pagodo.py -d example.com -g dorks.txt
Die Funktion pagodo.Pagodo.go() gibt ein Wörterbuch mit der folgenden Datenstruktur zurück (verwendete Dorks sind erfundene Beispiele):
{
"dorks": {
"inurl:admin": {
"urls_size": 3,
"urls": [
"https://github.com/marmelab/ng-admin",
"https://github.com/settings/admin",
"https://github.com/akveo/ngx-admin",
],
},
"inurl:gist": {
"urls_size": 3,
"urls": [
"https://gist.github.com/",
"https://gist.github.com/index",
"https://github.com/defunkt/gist",
],
},
},
"initiation_timestamp": "2021-08-27T11:35:30.638705",
"completion_timestamp": "2021-08-27T11:36:42.349035",
}
Verwenden einer Python-Shell (wie python oder ipython), um die Daten zu erkunden:
import pagodo
pg = pagodo.Pagodo(
google_dorks_file="dorks.txt",
domain="github.com",
max_search_result_urls_to_return_per_dork=3,
save_pagodo_results_to_json_file=None, # None = Auto-generate file name, otherwise pass a string for path and filename.
save_urls_to_file=None, # None = Auto-generate file name, otherwise pass a string for path and filename.
verbosity=5,
)
pagodo_results_dict = pg.go()
pagodo_results_dict.keys()
pagodo_results_dict["initiation_timestamp"]
pagodo_results_dict["completion_timestamp"]
for key,value in pagodo_results_dict["dorks"].items():
print(f"dork: {key}")
for url in value["urls"]:
print(url)
Der Schalter -d kann verwendet werden, um die Ergebnisse auf eine bestimmte Domain einzugrenzen, und fungiert als Google-Suchoperator:
site:github.com
-i - Legen Sie die minimale Verzögerung zwischen Dork-Suchen in Sekunden fest. Machen Sie dies nicht zu klein, sonst wird Ihre IP schnell HTTP 429 erhalten.-x - Legen Sie die maximale Verzögerung zwischen Dork-Suchen in Sekunden fest. Machen Sie dies nicht zu groß, sonst dauern die Suchen sehr lange.Die von -i und -x bereitgestellten Werte werden verwendet, um eine Liste von 20 zufälligen Wartezeiten zu generieren, die zufällig zwischen den einzelnen verschiedenen Google-Dork-Suchen ausgewählt werden.
-m - Die maximale Anzahl von Suchergebnissen, die pro Google Dork zurückgegeben werden sollen. Jede Google-Suchanfrage kann maximal 100 Ergebnisse auf einmal abrufen. Wenn Sie also -m 500 wählen, müssen für jede Google-Dork-Suche 5 separate Suchanfragen gestellt werden, was die für den Abschluss benötigte Zeit erhöht.
-o [optionaler/pfad/zu/ergebnisse.json] - Speichert die Ausgabe in einer JSON-Datei. Wenn Sie keinen Dateinamen angeben, wird ein datumsgestempelter generiert.
-s [optionaler/pfad/zu/ergebnisse.txt] - Speichert URLs in einer Textdatei. Wenn Sie keinen Dateinamen angeben, wird ein datumsgestempelter generiert.
--log [optionaler/pfad/zu/datei.log] - Speichert Logs in der angegebenen Datei. Wenn Sie keinen Dateinamen angeben, wird die Standarddatei pagodo.py.log im Stammverzeichnis des pagodo-Verzeichnisses verwendet.
Das Durchführen von über 7300 Suchanfragen an Google so schnell wie möglich wird einfach nicht funktionieren. Google wird es zu Recht als Bot erkennen und Ihre IP für einen bestimmten Zeitraum blockieren. Eine Lösung ist die Verwendung einer Reihe von HTTP(S)/SOCKS-Proxys und deren Übergabe an pagodo.
Übergeben Sie eine durch Kommas getrennte Zeichenfolge von Proxys an pagodo mit dem Schalter -p.
python pagodo.py -g dorks.txt -p http://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051
Sie könnten sogar die Werte -i und -x verringern, da Sie verschiedene Proxy-IPs nutzen. Die an pagodo übergebenen Proxys werden im Round-Robin-Verfahren ausgewählt.
Eine andere Lösung ist die Verwendung von proxychains4, um die Lookups im Round-Robin-Verfahren durchzuführen.
Installieren Sie proxychains4
apt install proxychains4 -y
Bearbeiten Sie die Konfigurationsdatei /etc/proxychains4.conf, um die Lookups im Round-Robin-Verfahren über verschiedene Proxy-Server durchzuführen. Im folgenden Beispiel wurden 2 verschiedene dynamische SOCKS-Proxys mit unterschiedlichen lokalen Listening-Ports (9050 und 9051) eingerichtet.
vim /etc/proxychains4.conf
round_robin
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks4 127.0.0.1 9050
socks4 127.0.0.1 9051
Setzen Sie proxychains4 vor das Skript pagodo.py, und jede Anfrage wird über einen anderen Proxy (und somit von einer anderen IP-Adresse) ausgeführt.
proxychains4 python pagodo.py -g dorks/all_google_dorks.txt -o [optional/path/to/results.json] -s [optional/path/to/results.txt]
Beachten Sie, dass dies für Google möglicherweise nicht natürlich erscheint, wenn Sie:
google.com simulierenAus diesem Grund wird die integrierte Proxy-Unterstützung -p bevorzugt, da, wie in der yagooglesearch-Dokumentation angegeben, der "angegebene Proxy für den gesamten Lebenszyklus der Suche verwendet wird, um menschlicher zu wirken, anstatt während der verschiedenen Phasen der Suche durch verschiedene Proxys zu rotieren".
Verteilt unter der GNU General Public License v3.0. Siehe LICENSE für weitere Informationen.
Projektlink: https://github.com/opsdisk/pagodo