
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.
-o [chemin/optionnel/vers/resultats.json] - Sauvegarde la sortie dans un fichier JSON. Si vous ne spécifiez pas de nom de fichier, un fichier avec horodatage sera généré.-s [chemin/optionnel/vers/resultats.txt] - Sauvegarde les URLs dans un fichier texte. Si vous ne spécifiez pas de nom de fichier, un fichier avec horodatage sera généré.--log [chemin/optionnel/vers/fichier.log] - Sauvegarde les logs dans le fichier spécifié. Si vous ne spécifiez pas de nom de fichier, le fichier par défaut pagodo.py.log à la racine du répertoire pagodo sera utilisé.Effectuer plus de 7300 requêtes de recherche à Google aussi rapidement que possible ne fonctionnera tout simplement pas. Google le détectera légitimement comme un bot et bloquera votre IP pendant une période déterminée. Une solution est d'utiliser un pool de proxies HTTP(S)/SOCKS et de les passer à pagodo.
Passez une chaîne de proxies séparés par des virgules à pagodo en utilisant l'option -p.
python pagodo.py -g dorks.txt -p http://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051
Vous pourriez même réduire les valeurs -i et -x car vous utiliserez différentes IP de proxy. Les proxies passés à pagodo sont sélectionnés en mode round robin.
Une autre solution est d'utiliser proxychains4 pour répartir les recherches en round robin.
Installez proxychains4
apt install proxychains4 -y
Modifiez le fichier de configuration /etc/proxychains4.conf pour répartir les recherches en round robin sur différents serveurs proxy. Dans l'exemple ci-dessous, 2 proxies socks dynamiques différents ont été configurés avec des ports d'écoute locaux différents (9050 et 9051).
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
Placez proxychains4 devant le script pagodo.py et chaque requête de recherche passera par un proxy différent (provenant donc d'une IP différente).
proxychains4 python pagodo.py -g dorks/all_google_dorks.txt -o [optional/path/to/results.json] -s [optional/path/to/results.txt]
Notez que cela peut ne pas sembler naturel à Google si vous :
google.com depuis l'IP #1Pour cette raison, l'utilisation du support proxy intégré -p est préférée car, comme indiqué dans la documentation de yagooglesearch, le « proxy fourni est utilisé pendant tout le cycle de vie de la recherche pour la rendre plus humaine, au lieu de faire tourner différents proxies pour différentes parties de la recherche. »
Distribué sous la licence GNU General Public License v3.0. Voir LICENSE pour plus d'informations.
Lien du projet : https://github.com/opsdisk/pagodo