
pagodo (Google Dork Passif) - Automatiser le scraping et la recherche dans la Google Hacking Database
pagodo automatise la recherche Google de pages web et d'applications potentiellement vulnérables sur Internet. Il remplace l'exécution manuelle de recherches Google dork avec un navigateur web GUI.
Il y a 2 parties. La première est ghdb_scraper.py qui récupère les derniers Google dorks et la seconde partie est pagodo.py qui exploite les informations recueillies par ghdb_scraper.py.
La bibliothèque de recherche Google centrale utilise désormais la bibliothèque plus flexible yagooglesearch au lieu de googlesearch. Consultez le README de yagooglesearch pour une explication plus approfondie des différences et des capacités de la bibliothèque.
Cette version de pagodo prend également en charge le support natif HTTP(S) et SOCKS5, donc plus besoin de l'envelopper dans un outil comme proxychains4 si vous avez besoin d'un support proxy. Vous pouvez spécifier plusieurs proxies à utiliser en mode round-robin en fournissant une chaîne de proxies séparés par des virgules à l'aide de l'option -p.
Offensive Security maintient la Google Hacking Database (GHDB) que vous trouverez ici : https://www.exploit-db.com/google-hacking-database. Il s'agit d'une collection de recherches Google, appelées dorks, qui peuvent être utilisées pour trouver des machines potentiellement vulnérables ou d'autres informations intéressantes collectées par les robots de recherche de Google.
Les conditions d'utilisation de pagodo sont les mêmes que celles de yagooglesearch.
Ce code est fourni tel quel et vous êtes entièrement responsable de son utilisation. Le scraping des résultats de recherche Google peut violer leurs Conditions d'utilisation. Une autre bibliothèque de recherche Google en Python avait des informations/discussions intéressantes à ce sujet :
La méthode préférée de Google est d'utiliser leur API.
Les scripts sont écrits pour Python 3.6+. Clonez le dépôt git et installez les dépendances.
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
Pour commencer, pagodo.py a besoin d'une liste de tous les Google dorks actuels. Le dépôt contient un répertoire dorks/ avec les dorks actuels lorsque ghdb_scraper.py a été exécuté pour la dernière fois. Il est conseillé d'exécuter ghdb_scraper.py pour obtenir les données les plus fraîches avant d'exécuter pagodo.py. Le répertoire dorks/ contient :
all_google_dorks.txt qui contient tous les Google dorks, un par ligneall_google_dorks.json qui est la réponse JSON de GHDBCatégories de dorks :
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",
}
Écrivez tous les dorks dans all_google_dorks.txt, all_google_dorks.json, et les catégories individuelles si vous voulez plus de données contextuelles sur chaque dork.
python ghdb_scraper.py -s -j -i
La fonction ghdb_scraper.retrieve_google_dorks() renvoie un dictionnaire avec la structure de données suivante :
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
Utilisation d'un shell Python (comme python ou ipython) pour explorer les données :
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
La fonction pagodo.Pagodo.go() renvoie un dictionnaire avec la structure de données ci-dessous (les dorks utilisés sont des exemples fictifs) :
{
"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",
}
Utilisation d'un shell Python (comme python ou ipython) pour explorer les données :
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)
L'option -d peut être utilisée pour limiter les résultats à un domaine spécifique et fonctionne comme l'opérateur de recherche Google :
site:github.com
-i - Spécifiez le délai minimum entre les recherches de dorks, en secondes. Ne le rendez pas trop petit, sinon votre IP sera rapidement HTTP 429.-x - Spécifiez le délai maximum entre les recherches de dorks, en secondes. Ne le rendez pas trop grand, sinon les recherches prendront beaucoup de temps.Les valeurs fournies par -i et -x sont utilisées pour générer une liste de 20 temps d'attente aléatoires, qui sont sélectionnés aléatoirement entre chaque recherche Google dork différente.
-m - Le nombre total maximal de résultats de recherche à retourner par Google dork. Chaque requête de recherche Google peut renvoyer au maximum 100 résultats à la fois, donc si vous choisissez -m 500, 5 requêtes de recherche distinctes devront être effectuées pour chaque recherche Google dork, ce qui augmentera le temps nécessaire.