
pagodo (Passive Google Dork) - Автоматизация сбора и поиска по базе данных Google Hacking Database
pagodo автоматизирует поиск в Google потенциально уязвимых веб-страниц и приложений в Интернете. Этот инструмент заменяет ручное выполнение поисковых запросов Google dork с помощью веб-интерфейса браузера.
Инструмент состоит из двух частей. Первая — ghdb_scraper.py, которая загружает последние Google dorks, и вторая часть — pagodo.py, которая использует информацию, собранную ghdb_scraper.py.
Основная библиотека для поиска в Google теперь использует более гибкий yagooglesearch вместо googlesearch. Ознакомьтесь с README yagooglesearch для более подробного объяснения различий и возможностей библиотек.
Эта версия pagodo также поддерживает встроенную поддержку HTTP(S) и SOCKS5 прокси, поэтому больше не нужно оборачивать её в такие инструменты, как proxychains4, если требуется поддержка прокси. Вы можете указать несколько прокси для использования в циклическом порядке, передав строку прокси, разделённую запятыми, с помощью ключа -p.
Offensive Security ведёт базу данных Google Hacking Database (GHDB), которая находится здесь: https://www.exploit-db.com/google-hacking-database. Это коллекция поисковых запросов Google, называемых dorks, которые можно использовать для поиска потенциально уязвимых систем или другой ценной информации, собранной поисковыми роботами Google.
Условия использования pagodo такие же, как и условия, указанные в yagooglesearch.
Этот код предоставляется «как есть», и вы полностью несёте ответственность за его использование. Сбор результатов поиска Google может нарушать их Условия предоставления услуг. Другая библиотека поиска Google на Python содержала интересную информацию/обсуждение по этому поводу:
Предпочтительный метод Google — использовать их API.
Скрипты написаны для Python 3.6+. Клонируйте git-репозиторий и установите зависимости.
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
python3 -m venv .venv # Если используете виртуальное окружение.
source .venv/bin/activate # Если используете виртуальное окружение.
pip install --upgrade pip setuptools
pip install -r requirements.txt
Для начала pagodo.py нужен список всех текущих Google dorks. В репозитории есть каталог dorks/ с актуальными dorks на момент последнего запуска ghdb_scraper.py. Рекомендуется запустить ghdb_scraper.py, чтобы получить самые свежие данные перед запуском pagodo.py. Каталог dorks/ содержит:
all_google_dorks.txt, который содержит все Google dorks, по одному на строкуall_google_dorks.json — это JSON-ответ от GHDBКатегории 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",
}
Записывает все dorks в all_google_dorks.txt, all_google_dorks.json и отдельные категории, если вам нужны более контекстные данные по каждому dork.
python ghdb_scraper.py -s -j -i
Функция ghdb_scraper.retrieve_google_dorks() возвращает словарь со следующей структурой данных:
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
Пример использования в оболочке Python (например, python или ipython) для изучения данных:
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
Функция pagodo.Pagodo.go() возвращает словарь со следующей структурой данных (используемые dorks — вымышленные примеры):
{
"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",
}
Пример использования в оболочке Python (например, python или ipython) для изучения данных:
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 = автоматическое создание имени файла, иначе передаётся строка с путём и именем файла.
save_urls_to_file=None, # None = автоматическое создание имени файла, иначе передаётся строка с путём и именем файла.
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)
Ключ -d можно использовать для ограничения результатов конкретным доменом; он работает как оператор поиска Google:
site:github.com
-i — задаёт минимальную задержку между поисками dork, в секундах. Не делайте её слишком маленькой, иначе ваш IP быстро получит HTTP 429.-x — задаёт максимальную задержку между поисками dork, в секундах. Не делайте её слишком большой, иначе поиск будет занимать много времени.Значения, указанные в -i и -x, используются для генерации списка из 20 случайных времён ожидания, которые выбираются случайным образом между разными поисками Google dork.
-m — общее максимальное количество результатов поиска, возвращаемых для каждого Google dork. Один поисковый запрос Google может вернуть не более 100 результатов за раз, поэтому если вы укажете -m 500, для каждого Google dork потребуется выполнить 5 отдельных поисковых запросов, что увеличит общее время выполнения.
-o [необязательный путь/к/результатам.json] — сохранить вывод в JSON-файл. Если вы не укажете имя файла, будет сгенерировано имя с отметкой даты и времени.
-s [необязательный путь/к/результатам.txt] — сохранить URL-адреса в текстовый файл. Если вы не укажете имя файла, будет сгенерировано имя с отметкой даты и времени.