
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-адреса в текстовый файл. Если вы не укажете имя файла, будет сгенерировано имя с отметкой даты и времени.
--log [необязательный путь/к/файлу.log] — сохранить логи в указанный файл. Если вы не укажете имя файла, будет использоваться файл по умолчанию pagodo.py.log в корне каталога pagodo.
Выполнение более 7300 поисковых запросов к Google как можно быстрее просто не сработает. Google справедливо обнаружит это как бота и заблокирует ваш IP на определённый период времени. Одно из решений — использовать пул HTTP(S)/SOCKS прокси и передать их в pagodo.
Передайте строку прокси, разделённую запятыми, в pagodo с помощью ключа -p.
python pagodo.py -g dorks.txt -p http://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051
Вы даже можете уменьшить значения -i и -x, потому что будете использовать разные IP-адреса прокси. Прокси, переданные в pagodo, выбираются по круговому принципу (round robin).
Другое решение — использовать proxychains4 для циклического обхода запросов.
Установите proxychains4
apt install proxychains4 -y
Отредактируйте файл конфигурации /etc/proxychains4.conf, чтобы циклически обходить запросы через разные прокси-серверы. В примере ниже настроены 2 разных динамических SOCKS-прокси с разными локальными портами прослушивания (9050 и 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
Поставьте proxychains4 перед скриптом pagodo.py, и каждый запрос будет проходить через другой прокси (и, следовательно, исходить с другого IP).
proxychains4 python pagodo.py -g dorks/all_google_dorks.txt -o [необязательный путь/к/результатам.json] -s [необязательный путь/к/результатам.txt]
Обратите внимание, что это может показаться неестественным для Google, если вы:
google.com с IP #1По этой причине предпочтительнее использовать встроенную поддержку прокси -p, поскольку, как указано в документации `yagooglesearch», «переданный прокси используется на протяжении всего жизненного цикла поиска, чтобы сделать его более похожим на человеческий, вместо ротации разных прокси на разных этапах поиска».
Распространяется под лицензией GNU General Public License v3.0. Подробнее см. LICENSE.
Ссылка на проект: https://github.com/opsdisk/pagodo