
Асинхронный сканер безопасности WordPress с обходом WAF через headless-браузер. Выполняет перечисление плагинов, тем, пользователей и мультисайтовых установок со скрытым сбором отпечатков и интеграцией уязвимостей WPScan.
█ █░ ██▓███ ▒██ ██▒ ██▀███ ▄▄▄ ▓██ ██▓
▓█░ █ ░█░▓██░ ██▒ ▒▒ █ █ ▒░▓██ ▒ ██▒▒████▄ ▒██ ██▒
▒█░ █ ░█ ▓██░ ██▓▒ ░░ █ ░▓██ ░▄█ ▒▒██ ▀█▄ ▒██ ██░
░█░ █ ░█ ▒██▄█▓▒ ▒ ░ █ █ ▒ ▒██▀▀█▄ ░██▄▄▄▄██ ░ ▐██▓░
░░██▒██▓ ▒██▒ ░ ░ ▒██▒ ▒██▒░██▓ ▒██▒ ▓█ ▓██▒ ░ ██▒▓░
░ ▓░▒ ▒ ▒▓▒░ ░ ░ ▒▒ ░ ░▓ ░░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ ██▒▒▒
▒ ░ ░ ░▒ ░ ░░ ░▒ ░ ░▒ ░ ▒░ ▒ ▒▒ ░▓██ ░▒░
░ ░ ░░ ░ ░ ░░ ░ ░ ▒ ▒ ▒ ░░
░ ░ ░ ░ ░ ░░ ░
░ ░
WPX — WordPress X-Ray Сканер | Обход WAF
WPX (WordPress X-Ray) — это сканер безопасности, который использует Camoufox для решения задач Cloudflare и WAF. Он зеркалирует эти сессии для выполнения быстрого асинхронного обнаружения плагинов и тем, перечисления пользователей и обнаружения мультисайтов.
**Примечание**: WPX загружает необходимые метаданные сканирования (отпечатки, правила обнаружения) с `data.wpscan.org`.
## Возможности
* **Обход WAF**: Использует безголовый браузер Camoufox для решения задач и извлечения токенов сессии.
* **Асинхронное сканирование**: Построено на `asyncio` и `curl_cffi` для быстрого перечисления.
* **Снятие отпечатков**: Имитирует отпечатки браузера и рукопожатия TLS для избежания обнаружения.
* **Перечисление пользователей**: Обнаруживает имена пользователей WordPress через REST API, архивы авторов, oEmbed и RSS-ленту.
* **Обнаружение мультисайтов**: Определяет установки WordPress Multisite/Network.
* **WPScan API**: Интегрируется с базой уязвимостей WPScan для поиска уязвимостей.
* **Огромный каталог плагинов**: Отслеживает ~110 000 исторических и ~55 000 текущих плагинов.
* **Каталогизация плагинов**: Включает скрипт для получения и ранжирования слаг-имен плагинов с WordPress.org.
* **Вывод в CLI**: Структурированный вывод в терминал, аналогичный `wpscan`.
* **Стелс-режим**: Высокодостоверная имитация браузера и зеркалирование TLS-сессий.
## Docker
Самый простой способ запустить WPX — не требуется Python или зависимости.
### Скачать и запустить
```bash
docker run ghcr.io/greg-randall/wpx -u https://example.com
docker run -v $(pwd):/output ghcr.io/greg-randall/wpx -u https://example.com -o /output/results.txt
Без тома WPX будет загружать метаданные заново при каждом запуске. Смонтируйте именованный том, чтобы избежать этого:
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx -u https://example.com
Обновить метаданные вручную при необходимости:
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx --update
git clone https://github.com/greg-randall/wpx.git
cd wpx
pip install .
python3 -m camoufox fetch
python3 wpx.py -u https://example.com
python3 wpx.py -u https://example.com --api-key YOUR_API_KEY
Сканировать определённое количество самых популярных плагинов (например, топ-500):
python3 wpx.py -u https://example.com --plugins-limit 500
Сканирование всех когда-либо созданных плагинов. WPX может просмотреть всю историческую библиотеку из ~110 000 плагинов (включая ~55 000 активных в настоящее время), чтобы найти каждый след программного обеспечения на цели. Внимание: Это выполняет огромное количество запросов и может занять несколько часов в зависимости от количества потоков и скорости ответа цели.
python3 wpx.py -u https://example.com --full-scan
Перечисление пользователей выполняется автоматически. Чтобы ограничить диапазон проверки идентификаторов авторов или полностью отключить его:
python3 wpx.py -u https://example.com --users-limit 20
python3 wpx.py -u https://example.com --enum-users-disable
Запустить сканирование тихо и сохранить результаты в файл без кодов ANSI:
python3 wpx.py -u https://example.com --quiet --output results.txt
Чтобы обновить списки плагинов и отсортировать по популярности:
python3 data/wpx_fetch_plugins.py --sort-by score
Выводит data/plugins_active.txt (по умолчанию топ 5000) и data/plugins_dead.txt (по умолчанию топ 2500).
Чтобы изменить лимиты:
python3 data/wpx_fetch_plugins.py --active-limit 10000 --dead-limit 5000
Каталог data/ содержит обработанные наборы данных плагинов и инструменты обслуживания:
data/plugins_active.txt: Ведущие слаг-имена активных плагинов, отсортированные по показателю популярности (среднее геометрическое от установок × загрузок).data/plugins_dead.txt: Ведущие слаг-имена закрытых/удалённых плагинов, отсортированные по историческому количеству установок (взято из предыдущих запусков каталога или снимков Archive.org).data/plugins_catalog.json: Кэшированные метаданные для активных плагинов.data/plugins_dead.jsonl: Кэш с добавлением только для метаданных удалённых плагинов, включая последние известные количества установок. Новые записи переопределяют старые при загрузке (последняя запись побеждает).data/archive.org-cache/: Необработанные HTML-снимки Wayback Machine, используемые для восстановления исторических чисел установок для плагинов, закрытых до первого запуска каталога.data/wpx_fetch_plugins.py: Загрузчик, который комбинирует WordPress.org API, SVN-репозиторий и Archive.org для создания и обогащения списков плагинов.wpx.py)data/wpx_fetch_plugins.py)Этот инструмент предназначен только для авторизованного тестирования безопасности. Разработчики не несут ответственности за неправильное использование или ущерб.
| Флаг | Описание |
|---|
-u, --url | Целевой URL WordPress (обязательно). |
--api-key | API-ключ базы уязвимостей WPScan. |
-t, --threads | Количество одновременных потоков для сканирования (по умолчанию: 20). |
--plugins-limit | Ограничить количество сканируемых плагинов (например, 500, 5000). |
--full-scan | Сканирует все доступные слаг-имена плагинов (до 50 тыс.+). |
--update | Принудительное обновление файлов метаданных WPScan. |
--no-browser | Пропустить обход WAF через Camoufox и подключиться напрямую. |
--enum-users-disable | Пропустить перечисление пользователей. |
--users-limit N | Количество идентификаторов авторов для проверки через ?author=N (по умолчанию: 10). |
--stealth [N] | Добавляет случайные задержки между запросами. Минимум 1с, максимум 2×N секунд (по умолчанию при установке флага: 1.5 → 1–3с). Также ограничивает потоки до 3. |
--idle-timeout N | Прервать, если ответ от сервера не получен в течение N секунд (по умолчанию: 60, 0 = отключено). |
-q, --quiet | Подавить баннер, статус и прогресс — показывать только результаты. |
-o, --output FILE | Записать вывод в ФАЙЛ (обычный текст, без кодов ANSI). |
| Флаг | Описание |
|---|
--sort-by | Как ранжировать активные плагины: score (по умолчанию), active_installs, downloaded. |
--active-limit N | Количество активных слаг-имен для записи в plugins_active.txt (по умолчанию: 5000, 0 = все). |
--dead-limit N | Количество удалённых слаг-имен для записи в plugins_dead.txt (по умолчанию: 2500, 0 = все). |
--force | Перезагрузить всё, даже если каталог уже существует. |
--fetch-limit N | Остановиться после получения N активных плагинов из API (0 = все). |
--max-age HOURS | Пропустить запрос к API, если каталог новее, чем N часов (по умолчанию: 24). |