
pagodo (Passive Google Dork) - Automatiza el scraping y la búsqueda en la base de datos de Google Hacking
pagodo automatiza la búsqueda en Google de páginas web y aplicaciones potencialmente vulnerables en Internet. Reemplaza
la realización manual de búsquedas de dorks de Google con un navegador web con interfaz gráfica.
Hay 2 partes. La primera es ghdb_scraper.py que recupera los últimos dorks de Google y la segunda parte es
pagodo.py que aprovecha la información recopilada por ghdb_scraper.py.
La librería central de búsqueda de Google ahora utiliza yagooglesearch más flexible en lugar de googlesearch. Consulta el README de yagooglesearch para una explicación más profunda de las diferencias y capacidades de la librería.
Esta versión de pagodo también soporta nativamente aplicaciones HTTP(S) y SOCKS5, por lo que ya no es necesario envolverla en una herramienta
como proxychains4 si necesitas soporte de proxy. Puedes especificar múltiples proxies para usar de forma round-robin
proporcionando una cadena separada por comas de proxies usando el parámetro -p.
Offensive Security mantiene la Google Hacking Database (GHDB) que se encuentra aquí: https://www.exploit-db.com/google-hacking-database. Es una colección de búsquedas de Google, llamadas dorks, que se pueden usar para encontrar equipos potencialmente vulnerables u otra información jugosa que es recogida por los bots de búsqueda de Google.
Los términos y condiciones de pagodo son los mismos términos y condiciones que se encuentran en
yagooglesearch.
Este código se proporciona tal cual y eres totalmente responsable de cómo se utiliza. Hacer scraping de los resultados de búsqueda de Google puede violar sus Términos de Servicio. Otra librería de búsqueda de Google en Python tenía información/discusión interesante al respecto:
El método preferido de Google es utilizar su API.
Los scripts están escritos para Python 3.6+. Clona el repositorio git e instala los requisitos.
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
python3 -m venv .venv # Si se usa un entorno virtual.
source .venv/bin/activate # Si se usa un entorno virtual.
pip install --upgrade pip setuptools
pip install -r requirements.txt
Para empezar, pagodo.py necesita una lista de todos los dorks de Google actuales. El repositorio contiene un directorio dorks/ con los
dorks actuales cuando se ejecutó ghdb_scraper.py por última vez. Se recomienda ejecutar ghdb_scraper.py para obtener los datos más recientes
antes de ejecutar pagodo.py. El directorio dorks/ contiene:
all_google_dorks.txt que contiene todos los dorks de Google, uno por líneaall_google_dorks.json que es la respuesta JSON de GHDBCategorías 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",
}
Escribe todos los dorks en all_google_dorks.txt, all_google_dorks.json y categorías individuales si deseas más
datos contextuales sobre cada dork.
python ghdb_scraper.py -s -j -i
La función ghdb_scraper.retrieve_google_dorks() devuelve un diccionario con la siguiente estructura de datos:
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
Usando un shell de Python (como python o ipython) para explorar los datos:
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 función pagodo.Pagodo.go() devuelve un diccionario con la estructura de datos a continuación (los dorks utilizados son ejemplos inventados):
{
"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",
}
Usando un shell de Python (como python o ipython) para explorar los datos:
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)
El parámetro -d se puede usar para limitar los resultados a un dominio específico y funciona como el operador de búsqueda de Google:
site:github.com
-i - Especifica la demora mínima entre búsquedas de dorks, en segundos. No lo hagas demasiado pequeño, o tu IP
recibirá un HTTP 429 rápidamente.-x - Especifica la demora máxima entre búsquedas de dorks, en segundos. No lo hagas demasiado grande o las búsquedas
llevarán mucho tiempo.Los valores proporcionados por -i y -x se utilizan para generar una lista de 20 tiempos de espera aleatorios, que se seleccionan aleatoriamente
entre cada búsqueda de dork de Google diferente.
-m - El número máximo total de resultados de búsqueda a devolver por dork de Google. Cada solicitud de búsqueda de Google puede devolver como máximo 100
resultados a la vez, por lo que si eliges -m 500, se tendrán que hacer 5 consultas de búsqueda separadas por cada búsqueda de dork de Google,
lo que aumentará la cantidad de tiempo para completar.