
pagodo (Passive Google Dork) - Automatiza a raspagem e busca no Google Hacking Database
pagodo automatiza a pesquisa no Google por páginas e aplicações web potencialmente vulneráveis na Internet. Substitui a realização manual de pesquisas Google dork por um navegador com interface gráfica web.
Existem 2 partes. A primeira é ghdb_scraper.py que recupera os últimos Google dorks e a segunda parte é pagodo.py que aproveita as informações coletadas por ghdb_scraper.py.
A biblioteca central de pesquisa do Google agora usa o mais flexível yagooglesearch em vez de googlesearch. Confira o README do yagooglesearch para uma explicação mais aprofundada das diferenças e capacidades da biblioteca.
Esta versão do pagodo também suporta suporte nativo a aplicações HTTP(S) e SOCKS5, então não é mais necessário envolvê-lo em uma ferramenta como proxychains4 se precisar de suporte a proxy. Você pode especificar múltiplos proxies para usar em modo round-robin fornecendo uma string separada por vírgulas de proxies usando a opção -p.
A Offensive Security mantém o Google Hacking Database (GHDB) encontrado aqui: https://www.exploit-db.com/google-hacking-database. É uma coleção de pesquisas do Google, chamadas dorks, que podem ser usadas para encontrar caixas potencialmente vulneráveis ou outras informações interessantes capturadas pelos bots de busca do Google.
Os termos e condições para pagodo são os mesmos termos e condições encontrados no yagooglesearch.
Este código é fornecido como está e você é totalmente responsável por como ele é usado. Raspar os resultados da Pesquisa Google pode violar seus Termos de Serviço. Outra biblioteca Python de pesquisa do Google teve algumas informações/discussões interessantes sobre isso:
O método preferido do Google é usar sua API.
Os scripts são escritos para Python 3.6+. Clone o repositório git e instale os requisitos.
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
Para começar, o pagodo.py precisa de uma lista de todos os Google dorks atuais. O repositório contém um diretório dorks/ com os dorks atuais na última execução do ghdb_scraper.py. É aconselhável executar ghdb_scraper.py para obter os dados mais recentes antes de executar pagodo.py. O diretório dorks/ contém:
all_google_dorks.txt que contém todos os Google dorks, um por linhaall_google_dorks.json que é a resposta JSON do GHDBCategorias 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",
}
Escreve todos os dorks em all_google_dorks.txt, all_google_dorks.json e categorias individuais se quiser mais dados contextuais sobre cada dork.
python ghdb_scraper.py -s -j -i
A função ghdb_scraper.retrieve_google_dorks() retorna um dicionário com a seguinte estrutura de dados:
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
Usando um shell Python (como python ou ipython) para explorar os dados:
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
A função pagodo.Pagodo.go() retorna um dicionário com a estrutura de dados abaixo (os dorks usados são exemplos fictícios):
{
"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 um shell Python (como python ou ipython) para explorar os dados:
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)
A opção -d pode ser usada para definir o escopo dos resultados para um domínio específico e funciona como o operador de pesquisa do Google:
site:github.com
-i - Especifica o mínimo atraso entre pesquisas de dork, em segundos. Não defina um valor muito pequeno, ou seu IP receberá HTTP 429 rapidamente.-x - Especifica o máximo atraso entre pesquisas de dork, em segundos. Não defina um valor muito grande ou as pesquisas demorarão muito.Os valores fornecidos por -i e -x são usados para gerar uma lista de 20 tempos de espera aleatórios, que são selecionados aleatoriamente entre cada pesquisa de Google dork diferente.
-m - O número máximo total de resultados de pesquisa a retornar por Google dork. Cada solicitação de pesquisa do Google pode retornar no máximo 100 resultados por vez, portanto, se você escolher -m 500, 5 consultas de pesquisa separadas terão que ser feitas para cada pesquisa de Google dork, o que aumentará o tempo necessário para concluir.
-o [caminho/opcional/para/resultados.json] - Salva a saída em um arquivo JSON. Se você não especificar um nome de arquivo, um com data e hora será gerado.
-s [caminho/opcional/para/resultados.txt] - Salva URLs em um arquivo de texto. Se você não especificar um nome de arquivo, um com data e hora será gerado.
--log [caminho/opcional/para/arquivo.log] - Salva logs no arquivo especificado. Se você não especificar um nome de arquivo, o arquivo padrão pagodo.py.log na raiz do diretório pagodo será usado.
Executar mais de 7300 solicitações de pesquisa ao Google o mais rápido possível simplesmente não funcionará. O Google, com razão, detectará como um bot e bloqueará seu IP por um período de tempo. Uma solução é usar um banco de proxies HTTP(S)/SOCKS e passá-los para o pagodo.
Passe uma string separada por vírgulas de proxies para o pagodo usando a opção -p.
python pagodo.py -g dorks.txt -p http://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051
Você pode até diminuir os valores de -i e -x porque estará utilizando diferentes IPs de proxy. Os proxies passados para pagodo são selecionados por round robin.
Outra solução é usar proxychains4 para fazer round robin das consultas.
Instale o proxychains4
apt install proxychains4 -y
Edite o arquivo de configuração /etc/proxychains4.conf para fazer round robin das consultas através de diferentes servidores proxy. No exemplo abaixo, 2 proxies socks dinâmicos diferentes foram configurados com portas de escuta locais diferentes (9050 e 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
Coloque proxychains4 na frente do script pagodo.py e cada request de consulta passará por um proxy diferente (e, portanto, de um IP diferente).
proxychains4 python pagodo.py -g dorks/all_google_dorks.txt -o [optional/path/to/results.json] -s [optional/path/to/results.txt]
Observe que isso pode não parecer natural para o Google se você:
google.com a partir do IP #1Por esse motivo, usar o suporte a proxy -p embutido é preferível porque, conforme documentação do yagooglesearch, o "proxy fornecido é usado durante todo o ciclo de vida da pesquisa para parecer mais humano, em vez de rotacionar vários proxies para diferentes partes da pesquisa."
Distribuído sob a Licença Pública Geral GNU v3.0. Consulte LICENSE para mais informações.
Link do Projeto: https://github.com/opsdisk/pagodo