
OWASP — платформа веб-разведки и обнаружения директорий
# OpenDoor — платформа веб-разведки и поиска директорий OWASP  **OpenDoor** — это открытая CLI-платформа для разведки, предназначенная для авторизованной веб-разведки, поиска директорий, перечисления поддоменов, фингерпринтинга, обнаружения WAF, проверки обхода, фильтрации ответов, отчётности, проверок открытых перенаправлений, ограниченного обхода и рабочих процессов сканирования на основе транспорта. Она помогает исследователям безопасности, пентестерам, охотникам за багами, инженерам DevSecOps и разработчикам выявлять открытые пути, панели входа, листинги директорий, ограниченные ресурсы, резервные копии файлов, веб-шеллы, поддомены и другие потенциально чувствительные веб-ресурсы. > Используйте OpenDoor только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение. --- ## ✅ Статус проекта [](https://pypi.org/project/opendoor/) [](https://formulae.brew.sh/formula/opendoor)  [](https://www.python.org/) [](https://github.com/stanislav-web/OpenDoor/actions/workflows/docker-image.yml) [](https://codecov.io/github/stanislav-web/OpenDoor) [](https://github.com/stanislav-web/OpenDoor/actions/workflows/github-code-scanning/codeql) [](https://github.com/stanislav-web/OpenDoor/actions/workflows/codacy.yml) [](https://opendoor.readthedocs.io/) ## 🧪 Матрица CI | Платформа | Python 3.12 | Python 3.13 | Python 3.14 | Python 3.15 | |---|---|---|---|---| | Linux | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-linux-py312.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-linux-py313.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-linux-py314.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-linux-py315.yml) | | macOS | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-macos-py312.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-macos-py313.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-macos-py314.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-macos-py315.yml) | | Windows | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-windows-py312.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-windows-py313.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-windows-py314.yml) | [](https://github.com/stanislav-web/OpenDoor/actions/workflows/ci-windows-py315.yml) | --- ## 🚀 Быстрые ссылки - [Документация](https://opendoor.readthedocs.io/) - [Быстрый старт](https://opendoor.readthedocs.io/quickstart/) - [Установка и обновление](https://opendoor.readthedocs.io/Installation-and-update/) - [Руководство по использованию](https://opendoor.readthedocs.io/Usage/) - [Практические примеры](https://opendoor.readthedocs.io/examples/basic-scans/) - [Список изменений](https://github.com/stanislav-web/opendoor/blob/master/CHANGELOG.md) - [Пакет PyPI](https://pypi.org/project/opendoor/) - [Формулы Homebrew](https://formulae.brew.sh/formula/opendoor) - [Docker-образ](https://github.com/users/stanislav-web/packages/container/package/opendoor) - [Пакет AUR](https://aur.archlinux.org/packages/opendoor) - [Пакет BlackArch](https://blackarch.org/webapp.html) - [Проблемы](https://github.com/stanislav-web/OpenDoor/issues) - [Участники](https://github.com/stanislav-web/OpenDoor/graphs/contributors) --- ## ✨ Возможности - поиск директорий; - рекурсивный поиск директорий; - ограниченный обход в пределах одного источника; - следование перенаправлениям; - перечисление поддоменов; - многопоточное сканирование для ускорения поиска; - режимы ввода: одна цель, файл целей, stdin, IPv4 CIDR и диапазон IPv4; - пользовательские словари, префиксы, перемешивание для нарушения шаблонов сканирования и фильтры расширений, поддержка удалённых словарей; - пользовательские заголовки запросов, пересылка cookies и шаблоны сырых HTTP-запросов; - фильтры ответов по статусу, размеру, тексту, regex и длине тела; - снифферы ответов для обнаружения листингов директорий, пустых ответов, известных утечек файлов, активных проверок теневых копий, коллации, возможных раскрытых секретов, клиентских открытых эндпоинтов, ошибок, раскрытых отладочных стеков вызовов и подтверждённых уязвимостей открытого перенаправления; - умная автокалибровка для случаев soft-404, wildcard, catch-all, семантического сравнения ответов и DNS wildcard; - обнаружение фингерпринтов технологий для CMS, платформ электронной коммерции, фреймворков, runtime-стеков, инфраструктуры и состояния HSTS; - пассивные проверки рисков приватности в `--fingerprint`, включая возможные поверхности HSTS, ETag/кэша и суперcookie. - пассивное обнаружение WAF и обход в безопасном режиме сканирования; - условие остановки WAF guard для завершения малоценных сканов, когда первоначальные классифицированные ответы в подавляющем большинстве заблокированы WAF; - контролируемые проверки обхода заголовков и путей для заблокированных ресурсов `401` и `403`; - отказоустойчивый runtime сканирования с повторными попытками, защитой от серий неудач, обработкой сбоев транспорта, возобновляемыми сессиями и управлением паузой/возобновлением во время выполнения; - правила CI/CD fail-on для корзин результатов; - дифференциальное сравнение отчётов для предыдущих/текущих отчётов JSON или SQLite; - отчёты в форматах terminal, text, JSON, CSV, HTML, SARIF и SQLite; - поддержка транспорта proxy, OpenVPN, WireGuard, legacy TLS и mTLS с клиентскими сертификатами; - последовательная ротация транспорта для каждой цели в пакетных рабочих процессах; - мастер конфигурации для повторяемых профилей сканирования; - встроенные словари (обновлено 2026-08) --- ## 🧭 Где OpenDoor имеет смысл? Он предназначен для реальных целей, где одной скорости недостаточно: WAF, CDN, страницы soft-404, wildcard-маршруты, ограниченные ресурсы, аутентифицированные области, нестабильные сети, пакеты из нескольких целей и сканирование с управляемым транспортом. С момента первого запуска в 2016 году и до сегодняшнего дня OpenDoor кардинально изменился, превратившись из примитивного брутфорсера в новый адаптивный фреймворк для поиска. Стал удобным для DevOps и QA. OpenDoor фокусируется на **контекстно-зависимом поиске**, а не на слепом перечислении. ### Что отличает OpenDoor | Возможность | Почему это важно | |---|---| | **Сканирование с приоритетом фингерпринтинга** | OpenDoor может определять вероятные CMS-платформы, фреймворки, инфраструктурных провайдеров и сигналы WAF до более глубокого поиска. Это помогает сканировать с контекстом, а не слепо обрушивать на цель общий словарь. | | **Поведение с учётом WAF** | OpenDoor может обнаруживать вероятное поведение WAF / анти-бот и переключаться на более безопасный профиль выполнения с `--waf-safe-mode`, уменьшая шумные заблокированные сканы и делая защитные ответы более понятными. | | **Условие остановки WAF guard** | OpenDoor может досрочно остановить скан, когда первоначальные классифицированные ответы в подавляющем большинстве заблокированы WAF. Это позволяет избежать длительных прогонов по словарям, которые дают лишь повторяющиеся страницы блокировки edge/WAF. | | **Контролируемые доказательства обхода** | OpenDoor может опционально проверять заблокированные ресурсы `401` и `403` с помощью контролируемых вариантов инъекции заголовков и манипуляции путями. Он фиксирует точные доказательства, такие как тип обхода, вариант заголовка или пути, значение проверки, исходный код статуса и результирующий код статуса, не изменяя глобальные заголовки сканирования. | | **Многосигнальная автокалибровка** | OpenDoor не полагается только на код статуса или размер ответа. Он сравнивает несколько сигналов ответа, таких как хэши тела, видимый текст, семантические фразы soft-404, структуру DOM-токенов, заголовки, перенаправления, стабильные заголовки, количество слов, количество строк, плотность текста, нормализованные динамические токены и базовые линии DNS wildcard, чтобы уменьшить ложные срабатывания soft-404 и wildcard. | | **Ограниченный обход в пределах одного источника** | `--crawl` может обогатить сканы директорий одношаговыми ссылками в пределах одного источника, найденными в уже просканированных HTML-ответах. Он использует существующий конвейер сканирования, глобальную дедупликацию запросов, дедупликацию отчётов по корзинам и ограниченные лимиты памяти вместо того, чтобы становиться пауком или рендерером браузера. | | **Плагинная система эвристических снифферов** | OpenDoor включает подключаемый слой анализа ответов для эвристических снифферов, таких как секреты, стеки вызовов, листинги директорий, индикаторы вредоносного ПО, теневые копии, подозрительные файлы, открытые перенаправления и повторяющиеся шаблоны soft-ошибок. Это позволяет сканам выявлять значимые доказательства из тел ответов вместо отчётов только о кодах статуса и размерах. | | **Рабочие процессы на уровне транспорта** | OpenDoor поддерживает режимы транспорта direct, proxy, OpenVPN и WireGuard. Он также может ротировать профили транспорта для каждой цели в авторизованных пакетных сканах, что не то же самое, что ручной запуск VPN перед запуском сканера. | | **Поддержка пула прокси** | OpenDoor может использовать пулы прокси через `--proxy-list`, проверять доступные прокси перед сканированием, ротировать запросы по живому пулу. Это помогает длительным авторизованным сканам выживать на ненадёжных маршрутах без жёсткого указания одного прокси-эндпоинта. | | **Отказоустойчивый runtime сканирования** | OpenDoor спроектирован так, чтобы сканы оставались полезными на нестабильных целях и ненадёжных сетях. Он сочетает повторные попытки запросов, защиту от последовательных сбоев, обработку восстановимых ошибок транспорта, ротацию прокси, условия остановки с учётом WAF, сессии с контрольными точками и интерактивное управление паузой/возобновлением, чтобы длительные сканы могли безопасно завершаться с ошибкой вместо молчаливой потери покрытия. | | **Возобновляемые длительные сканы** | OpenDoor может сохранять контрольные точки сканирования и возобновлять их позже. Это важно, когда сканы прерываются сбоями, нестабильными сетями, заблокированными маршрутами, отключениями терминала или длительными задачами с несколькими целями. | | **Пауза/возобновление во время выполнения** | Нажмите `Ctrl+C` один раз во время сканирования, чтобы приостановить воркеры, затем выберите `C` для продолжения или `E` для прерывания без использования файлов сессии. | | **Дифференциальное сравнение отчётов** | OpenDoor может сравнивать предыдущий и текущий отчёт SQLite/JSON с помощью `--diff old:new`, показывая добавленные, удалённые и изменённые находки без повторного сканирования цели. Это превращает отчёты сканирования в проверки регрессии экспозиции от релиза к релизу. | | **Результаты, готовые для CI/CD** | OpenDoor может возвращать код выхода с ошибкой только при обнаружении выбранных корзин результатов, что делает его пригодным для использования в качестве шлюза релиза или проверки регрессии экспозиции без пользовательских скриптов постобработки. | | **Аудируемая инженерия** | OpenDoor поддерживается с помощью мультиплатформенного CI, проверок покрытия, проверок пакетов, сборок документации и большого набора unittest, что упрощает его аудит, участие в разработке и зависимость от него. | ## 🧬 Распознаваемые технологии OpenDoor включает эвристический движок фингерпринтинга для обнаружения вероятных стеков приложений, CMS-платформ, фреймворков, конструкторов сайтов, инструментов статических сайтов, инфраструктурных провайдеров, готовности HSTS / preload и систем WAF / анти-бот. | Категория | Примеры | |----------------------------|---| | CMS | WordPress, Drupal, Joomla, TYPO3, GravCMS, Open Journal Systems, InstantCMS, DiafanCMS, CMS.S3 / Megagroup, Discuz!, NetCat | | Электронная коммерция | Magento, WooCommerce, Shopify, PrestaShop, OpenCart, Shopware, Webasyst / Shop-Script | | Фреймворки / платформы приложений | Laravel, Symfony, Django, Flask, FastAPI, Express, NestJS, Next.js, Nuxt, Rails, Spring | | Runtime / языковой стек | PHP, Node.js, JavaScript, Python, Ruby, .NET, Java/JVM, Elixir, цели статических сайтов | | Конструкторы сайтов | Wix, Webflow, Squarespace, Tilda, Duda, Hostinger Website Builder | | Генераторы статических сайтов / документации | MkDocs, Docusaurus, Hugo, Jekyll, VitePress | | Инфраструктура / хостинг | Cloudflare, AWS, Vercel, Netlify, GitHub Pages, GitLab Pages, Heroku, Azure, Google Cloud, Fastly, Akamai, Hostinger, DDoS-Guard, Tencent Cloud | | Инфраструктура / серверы | Nginx, Apache HTTP Server, Microsoft IIS, Caddy, LiteSpeed, lighttpd, Tornado, Gunicorn, Uvicorn, Hypercorn, Waitress, Apache Tomcat, Eclipse Jetty, Envoy, Traefik | | WAF / анти-бот | Cloudflare, AWS WAF, Azure Front Door, Akamai, Imperva, Sucuri, ModSecurity, DataDome, Kasada, BunkerWeb, F5 BIG-IP ASM | | Заголовки безопасности | Наличие HSTS, max-age, includeSubDomains, директива preload, локальная готовность preload | Полный список поддерживаемых технологий: [Технологии фингерпринтинга](https://opendoor.readthedocs.io/detection/fingerprinting) Запуск обнаружения фингерпринтов: ```bash opendoor --host https://example.com --fingerprint ``` После завершения этапа фингерпринтинга OpenDoor выводит компактную сводку предварительного сканирования перед началом перебора по словарю: ```text Fingerprint result: cms/WordPress (95%) Web stack: WordPress | PHP | Cloudflare Security posture: HSTS preload-ready ``` Подробнее: - [Руководство по фингерпринтингу](https://opendoor.readthedocs.io/detection/fingerprinting/) - [Руководство по обнаружению WAF](https://opendoor.readthedocs.io/detection/waf-detection/) ## 📦 Установка ### pipx Рекомендуется для большинства пользователей CLI: ```bash pipx install opendoor ``` ### pip ```bash python3 -m pip install --upgrade opendoor ``` ### Windows / Chocolatey OpenDoor доступен в Chocolatey Community Package Repository: ```powershell choco install opendoor -y ``` Пакеты Chocolatey могут отставать от последнего релиза на GitHub/PyPI, пока завершается модерация сообщества. ### Arch Linux / AUR OpenDoor доступен в Arch User Repository: ```bash yay -S opendoor ``` ### Homebrew OpenDoor также доступен в пакетном менеджере Brew: ```bash brew install opendoor ``` ### Docker OpenDoor доступен как официальный Docker-образ проекта через GitHub Container Registry. ```bash docker pull ghcr.io/stanislav-web/opendoor:latest docker run --rm -it ghcr.io/stanislav-web/opendoor:latest --version ``` Запустите сканирование и запишите отчёты на хост: ```bash mkdir -p reports docker run --rm \ -v "$PWD/reports:/work/reports" \ ghcr.io/stanislav-web/opendoor:latest \ --host https://example.com \ --reports json,html \ --reports-dir reports ``` ### BlackArch Linux OpenDoor доступен в BlackArch Linux: ```bash sudo pacman -Syu sudo pacman -S opendoor ``` ### Из исходного кода ```bash git clone https://github.com/stanislav-web/OpenDoor.git cd OpenDoor python3 -m pip install -r requirements.txt python3 opendoor.py --help ``` См. полное [руководство по установке](https://opendoor.readthedocs.io/Installation-and-update/). --- ## 🚀 Быстрое использование ### Базовое сканирование каталога ```bash opendoor --host https://example.com ``` ### Обход ссылок того же источника ```bash opendoor --host https://example.com --crawl ``` `--crawl` включается по желанию и работает только при сканировании каталогов. Он использует `GET`, извлекает консервативные HTML-атрибуты из уже просканированных ответов, сохраняет только URL того же источника, учитывает игнорируемые расширения, пропускает POST-формы и внешние источники, а также сообщает об обнаруженных URL через обычные корзины результатов. ### Сканирование поддоменов ```bash opendoor --host example.com --scan subdomains ``` ### Список целей ```bash opendoor --hostlist targets.txt ``` Целевые файлы могут содержать URL-адреса, домены, IPv4-адреса, блоки IPv4 CIDR и включающие диапазоны IPv4: ```text https://example.com app.example.com 192.168.1.10 192.168.1.0/24 192.168.1.10-192.168.1.50 ``` ### Стандартный ввод ```bash cat targets.txt | opendoor --stdin ``` Тот же смешанный целевой формат поддерживается через STDIN. ### Сканирование с низким уровнем шума ```bash opendoor \ --host https://example.com \ --method GET \ --auto-calibrate \ --include-status 200-299,301,302,403 \ --exclude-status 404,429,500-599 \ --exclude-size-range 0-256 \ --sniff endpoint,secret,shadow,openredirect,malware,skipempty,collation,indexof,file,stacktrace \ --reports std,json,csv,sarif ``` ### Снифферы ответов Снифферы ответов классифицируют интересные тела ответов во время обнаружения. Они полезны, когда кода состояния и размера недостаточно, чтобы понять, что было найдено. ```bash opendoor \ --host https://example.com \ --method GET \ --sniff endpoint,secret,shadow,openredirect,malware,stacktrace,indexof,file,collation \ --reports std,json,csv,html,sqlite,sarif ``` Полезные снифферы включают: | Сниффер | Назначение | |---------------------|-------------------------------------------------------------------------------------------------------------------------------------| | `indexof` | Обнаружение страниц со списком каталогов. | | `file` | Обнаружение известных шаблонов раскрытия конфиденциальных файлов. | | `collation` | Обнаружение повторяющихся или похожих на перенаправление резервных ответов, которые могут создавать ложные срабатывания. | | `skipempty` | Пропуск пустых ответов. | | `skipsizes=46` | Пропуск ответов с точно известными шумными размерами. | | `skipsizes=46:1024` | Пропуск ответов в пределах шумного диапазона размеров. | | `stacktrace` | Обнаружение раскрытых отладочных/рантайм-трассировок стека и внутренних деталей ошибок. | | `secret` | Обнаружение возможных раскрытых API-ключей, токенов, приватных ключей и учётных данных с отредактированными метаданными отчёта. | | `shadow` | Активная проверка подтверждённых файлоподобных попаданий `200 OK` на ограниченные варианты резервных/теневых копий, такие как `.bak`, `.old`, и шаблоны путей . | | `openredirect` | Активная проверка похожих на перенаправление параметров запроса с контролируемыми маркерными URL и отчёт только о подтверждённых уязвимостях открытого перенаправления. | | `endpoint` | Пассивное обнаружение раскрытых клиентом WebSocket, Socket.IO, SSE/EventSource и AJAX-эндпоинтов из уже полученных ответов. | | `malware` | Обнаружение возможного вредоносного содержимого, маркеров веб-шеллов, внедрённых скриптов или обфусцированных полезных нагрузок. | Снифферы, зависящие от тела ответа, автоматически принудительно используют `GET` внутри, когда настроенный метод — `HEAD`. Подробнее: [Справочник по снифферам](https://opendoor.readthedocs.io/Sniffers/) ### Аутентифицированное сканирование из необработанного запроса ```bash opendoor \ --raw-request request.txt \ --scheme https \ --method GET \ --auto-calibrate \ --reports json,html,sqlite,sarif ``` ### WAF-безопасное сканирование ```bash opendoor \ --host https://example.com \ --waf-safe-mode \ --timeout 60 \ --retries 5 \ --delay 0.5 ``` ### Отказоустойчивое сканирование Используйте более консервативный профиль времени выполнения для нестабильных целей, медленных сетей, временных блокировок WAF, нестабильности прокси или длительных авторизованных сканирований. ```bash opendoor \ --host https://example.com \ --method GET \ --timeout 60 \ --retries 5 \ --retries-fail-streak 25 \ ``` --- [Read more](https://github.com/stanislav-web/opendoor)