
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.