
Инструмент для перечисления поддоменов с более чем 50 модулями сбора, DNS-брутфорсом, пассивным анализом DNS, прозрачностью сертификатов, извлечением данных из поисковых систем и обнаружением захвата поддоменов для разведки.
👊OneForAll — мощный инструмент для сбора поддоменов 📝English Document
📢 Обязательно уделите время прочтению этого документа, это поможет быстро освоить OneForAll!
OneForAll разработан и протестирован на Python 3.6.0. Для работы OneForAll требуется версия Python выше 3.6.0. Инструкцию по установке Python можно найти в Руководстве по установке Python 3. Выполните следующие команды для проверки версий Python и pip3:
python -V
pip3 -V
Если вы видите примерно такой вывод, значит с окружением Python всё в порядке:
Python 3.6.0
pip 19.2.2 from C:\Users\shmilylty\AppData\Roaming\Python\Python36\site-packages\pip (python 3.6)
Поскольку проект находится в разработке и постоянно обновляется, при загрузке используйте git clone для клонирования актуального репозитория. Это также удобно для последующего обновления. Не рекомендуется загружать из Releases, так как там версии обновляются реже и неудобно обновляться.
Репозиторий также зеркалирован на Gitee. Для пользователей из Китая рекомендуется клонировать оттуда:
git clone https://gitee.com/shmilylty/OneForAll.git
Или:
git clone https://github.com/shmilylty/OneForAll.git
Вы можете установить зависимости OneForAll с помощью pip3. Ниже приведён пример установки зависимостей с помощью pip3 в Windows: Примечание: если ваш Python3 установлен в системную директорию Program Files, например C:\Program Files\Python36, запускайте командную строку от имени администратора при выполнении следующих команд!
cd OneForAll/
python3 -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
python3 oneforall.py --help
Для других операционных систем обратитесь к Установке зависимостей. Если во время установки зависимостей возникла ошибка компиляции какой-либо библиотеки, смотрите раздел . Если проблема не решается, присоединяйтесь к группе для обратной связи.
Сначала загрузите и отредактируйте конфигурационные файлы, добавьте свои api и личные настройки, сохранив исходную структуру файлов:
config
├── api.py
├── default.py
├── __init__.py
├── log.py
└── setting.py
Запустите образ, заменив ~/.config на путь к вашей папке с конфигурационными файлами:
docker pull shmilylty/oneforall
docker run -it --rm -v ~/results:/OneForAll/results -v ~/.config:/OneForAll/config shmilylty/oneforall --target example.com run
Параметры добавляются в конец команды. Результаты будут сохранены в локальную директорию ~/results. При необходимости путь можно изменить.
Если вы установили зависимости через pip3, запустите пример следующими командами:
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./example.txt run
Рассмотрим команду python3 oneforall.py --target example.com run. При выполнении с параметрами по умолчанию OneForAll создаст соответствующие результаты в директории results:

example.com.csv — результаты сбора поддоменов для каждого основного домена.
all_subdomain_result_1583034493.csv — сводный файл с результатами всех поддоменов за один запуск OneForAll, включающий example.com.csv. Удобен для получения полных результатов в сценариях массового сбора.
result.sqlite3 — база данных SQLite3, хранящая результаты сбора поддоменов за каждый запуск. Структура базы данных показана ниже:

Таблицы вида example_com_origin_result содержат первоначальные результаты сбора поддоменов каждого модуля.
Таблицы вида example_com_resolve_result содержат результаты разрешения поддоменов.
Таблицы вида example_com_last_result содержат результаты предыдущего сбора (создаются после двух и более запусков).
Параметры командной строки предоставляют лишь часто используемые опции. Более детальная настройка параметров описана в setting.py. Если вы считаете, что какой-то параметр часто используется в командном интерфейсе или чего-то не хватает, приветствуются отзывы. По известным причинам, если необходимо использовать заблокированные интерфейсы сбора, сначала настройте прокси в setting.py. Некоторые модули сбора требуют API (большинство можно получить бесплатно после регистрации). Если нужно их использовать, сконфигурируйте API в api.py. Если не используете, игнорируйте соответствующие сообщения об ошибках. (Подробнее о модулях читайте в Описании модулей сбора.)
Интерфейс командной строки OneForAll построен на Fire. Более продвинутое использование Fire см. в Использование CLI Fire.
oneforall.py — главная точка входа. oneforall.py может вызывать модули brute.py, takerover.py и dbexport.py и др. Для удобства перебора поддоменов выделен brute.py, для проверки рисков перехвата поддоменов — takerover.py, для экспорта базы данных — dbexport.py. Эти модули могут запускаться отдельно и принимают больше параметров. Для их самостоятельного использования см. Справку по использованию.
Адрес проекта: https://github.com/shmilylty/OneForAll
В тестировании на проникновение важность сбора информации очевидна. Сбор поддоменов — обязательная и очень важная часть этого процесса. В настоящее время существует множество открытых инструментов для сбора поддоменов, но у них часто есть следующие проблемы:
Чтобы решить эти проблемы, был создан данный проект. Как следует из названия, я надеюсь, что OneForAll станет универсальным, мощным и быстрым инструментом для сбора поддоменов. 🔨
В настоящее время OneForAll находится в разработке, несомненно, есть много недостатков и мест для улучшения. Приветствуются Issues и PR. Если инструмент вам нравится, поставьте звездочку ✨. Существует группа QQ для общения и обратной связи по OneForAll 👨👨👦👦: 824414244 (проверка при вступлении: сбор информации)
censys_api, certspotter, crtsh, entrust, google, spyse_api)axfr, проверка политики междоменных запросов cdx, проверка HTTPS-сертификата cert, проверка политики безопасности контента csp, проверка robots.txt robots, проверка sitemap.xml sitemap, обход DNS-зоны через NSEC-записи dnssec. В будущем будут добавлены модули NSEC3 и др.)Если у вас есть отличные идеи, обязательно сообщите мне! 😎
Более подробную информацию см. в Описании структуры каталогов.
В папке docs также содержатся справки, например Источники словарей поддоменов, Схема определения wildcard.
Спасибо этим замечательным библиотекам Python!
Проект использует семантическое версионирование SemVer. Историю изменений можно найти в журнале изменений.
Подробнее см. в Плане разработки.
Горячо приветствуется участие всех желающих в улучшении проекта!
Список всех участников и их вклад можно найти в документе об участниках. Спасибо им за то, что сделали OneForAll мощнее и удобнее.
Если проект помог вам, вы можете угостить автора чашкой кофе :)

Проект распространяется под лицензией GPL-3.0. Подробнее см. в LICENSE.
Спасибо всем проектам с открытым исходным кодом по сбору поддоменов!
Спасибо команде A-Team за горячие и бескорыстные ответы на вопросы!
Данный инструмент предназначен только для использования в корпоративной безопасности при наличии достаточных законных разрешений. При использовании инструмента вы должны обеспечить соответствие всех своих действий местным законам и нормативным актам. Если вы совершаете любые незаконные действия при использовании данного инструмента, вы несёте полную ответственность за все последствия. Все разработчики и участники этого инструмента не несут никакой юридической или иной ответственности. Если вы не прочитали, полностью поняли и не приняли все условия данного соглашения, пожалуйста, не устанавливайте и не используйте этот инструмент. Ваше использование или любое другое явное или подразумеваемое согласие с условиями означает, что вы прочитали и согласны соблюдать данное соглашение.
Выполните следующие команды для обновления проекта (изменения в /config/setting.py и /config/api.py будут сохранены):
git stash # временно сохранить локальные изменения
git fetch --all # загрузить обновления проекта
git pull # применить обновления
git stash pop # восстановить локальные изменения
Таблицы вида example_com_now_result содержат текущие результаты сбора. Обычно достаточно следить именно за этой таблицей.
Дополнительную информацию см. в Пояснении полей.
❗Внимание: если в процессе использования возникают вопросы или затруднения, сначала выполните поиск в Issues. Также можно прочитать Часто задаваемые вопросы и ответы.
Справка по oneforall.py
Следующая справка может быть не самой актуальной. Используйте python oneforall.py --help для получения актуальной информации.
python oneforall.py --help
NAME
oneforall.py - Справка OneForAll
SYNOPSIS
oneforall.py COMMAND | --target=TARGET <flags>
DESCRIPTION
OneForAll — мощный инструмент для сбора поддоменов
Example:
python3 oneforall.py version
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./domains.txt run
python3 oneforall.py --target example.com --valid None run
python3 oneforall.py --target example.com --brute True run
python3 oneforall.py --target example.com --port small run
python3 oneforall.py --target example.com --fmt csv run
python3 oneforall.py --target example.com --dns False run
python3 oneforall.py --target example.com --req False run
python3 oneforall.py --target example.com --takeover False run
python3 oneforall.py --target example.com --show True run
Note:
Параметр alive может принимать значения True, False для экспорта только живых или всех поддоменов
Параметр port может принимать значения 'default', 'small', 'large', подробнее в config.py
Параметр fmt может принимать форматы 'csv', 'json'
Параметр path по умолчанию None используется для указания пути к результатам OneForAll
ARGUMENTS
TARGET
Одиночный домен (обязательный параметр из двух)
TARGETS
Путь к файлу с доменами (по одному на строку) (обязательный параметр из двух)
FLAGS
--brute=BRUTE
Перебор поддоменов (по умолчанию False)
--dns=DNS
Разрешение DNS для поддоменов (по умолчанию True)
--req=REQ
HTTP-запросы к поддоменам (по умолчанию True)
--port=PORT
Диапазон портов для проверки поддоменов (по умолчанию только 80 порт)
--valid=VALID
Экспортировать только живые поддомены (по умолчанию False)
--fmt=FMT
Формат сохранения результатов (по умолчанию csv)
--path=PATH
Путь сохранения результатов (по умолчанию None)
--takeover=TAKEOVER
Проверить возможность перехвата поддоменов (по умолчанию False)
archivecrawl, commoncrawl — эти модули ещё в разработке)bevigil_api, binaryedge_api, bufferover, cebaidu, chinaz, chinaz_api, circl_api, cloudflare, dnsdb_api, dnsdumpster, hackertarget, ip138, ipv4info_api, netcraft, passivedns_api, ptrarchive, qianxun, rapiddns, riddler, robtex, securitytrails_api, sitedossier, threatcrowd, wzpc, ximcx)srv, а также запросы MX, NS, SOA, TXT записей домена)alienvault, riskiq_api, threatbook_api, threatminer, virustotal, virustotal_api — последний ещё дорабатывается)ask, baidu, bing, bing_api, duckduckgo, exalead, fofa_api, gitee, github, github_api, google, google_api, shodan_api, so, sogou, yahoo, yandex, zoomeye_api). За исключением специальных поисковых систем, все поддерживают автоматическое исключение, полный и рекурсивный поиск.txt, csv, json.