Если ваш WordPress‑сайт всё ещё гуляет по интернету без брони, самое время исправить недоразумение. WPScan — это «швейцарский нож» пентестера, который за десять лет эволюции превратился из скрипта на Ruby в почти обязательный инструмент DevSecOps‑чек‑листа. В этом материале собраны свежие функции, варианты установки, практические примеры запуска и автоматизации, а ещё пригоршня личных комментариев, чтобы текст не напоминал сухую документацию.
Что нового в WPScan к маю 2025 года
Команда проекта не дремлет, и за последние пару лет инструмент получил несколько ощутимых апдейтов:
- Docker‑образ теперь выпускается синхронно с GitHub‑релизами. Сканер стартует без кучи Ruby‑зависимостей, а обновление превращается в банальный
docker pull
. - Поддержка формата
SARIF
делает интеграцию с GitHub Advanced Security делом одного шага — отчёты попадают в Security tab без лишних плясок. - Асимметричное распараллеливание отделяет «тяжёлые» запросы (например, brute‑force) от пассивного анализа, так что слабенький shared‑хостинг перестаёт падать в оморок при первом же скане.
- Новая модель лицензирования WPVulnDB: по‑умолчанию даётся 25 запросов в день бесплатно, всё, что сверху, требует токен или подписку. Новости кто‑то воспринял с ворчанием, но спокойная аналитика показывает — 25 запросов покрывают потребности большинства одиночных сайтов.
- Команда перелопатила движок обнаружения коротких JSON‑эндпоинтов, благодаря чему WPScan теперь ловит RCE во встроенных REST API быстрее, чем вы успеваете допить утренний раф.
Установка: «а можно без Ruby?»
Ниже — три рабочих сценария, каждый со своими плюсами и маленькими «но».
Linux / macOS через пакетный менеджер
Классика выглядит так:
sudo gem install wpscan
Ставится быстро, но тянет половину Rubygems, которые потом пугающе обновлять. Если ваш сервер — не экспериментальный полигон, лучше посмотреть на Docker или пакеты репозитория.
Docker — самое быстрое свидание
docker pull wpscanteam/wpscan
docker run --rm -it wpscanteam/wpscan --help
Устанавливается за секунды, никаких зависимостей, а переход на новую версию — ещё один docker pull
. Минус ровно один: контейнер придётся подружить c локальной сетью, если вдруг сканить нужно сайты внутри контура.
Windows через WSL 2
К концу 2025‑го это уже не «танцы с бубном», а рутинная практика. Ставим Ubuntu из Microsoft Store, затем sudo apt install docker.io
, и используем тот же сценарий с контейнером.
Ваш первый скан: «а страшно ли?»
Минимальная команда выглядит до безобразия просто:
wpscan --url https://example.com --enumerate p
Опция --enumerate p
просит WPScan перечислить плагины. Уже на этот скромный запрос инструмент может выдать сюрприз: плагин 2018 года с дырой RCE. Хотите полноценный отчёт в JSON? Добавьте API‑токен и флаг --format json
:
wpscan --url https://example.com
--api-token $WPSCAN_API_TOKEN
--format json -o report.json
Получившийся файл легко скормить SIEM или CI/CD‑пайплайну. В продакшене такая автоматизация экономит часы рутинной проверки.
Разбор вывода: читаем результат
WPScan сортирует находки по важности (Info, Warning, Critical) и даёт прямую ссылку на описание уязвимости в WPVulnDB. Для критичных багов сразу видно CVSS‑балл, номер CVE, а иногда и готовый PoC. Совет банален: не бросайте вывод сканнера после первых двух строк. Пролистайте до конца, чтобы не пропустить уязвимости в отключённых плагинах — они лежат на диске и всё ещё представляют риск.
Расширенные приёмы
Перечисление пользователей
Известная «фишка» WordPress — удобный JSON‑эндпоинт /wp-json/wp/v2/users
. WPScan умеет аккуратно собирать логины авторов:
wpscan --url https://example.com -e u
Зачем это нужно? Во‑первых, чтобы проверить, нет ли в базе «admin» или «test». Во‑вторых, чтобы запустить таргетированный brute‑force со словарём корпоративных паролей, если такая задача стоит.
Комбо‑скан: плагины, темы, база данных
wpscan --url https://example.com -e vp,vt,cb
vp
— плагины, vt
— темы, cb
— back‑up плагины баз данных. Последние часто оставляют открытые ZIP‑архивы, которые индексируются поисковиками. Да, вы правильно поняли: базу сайта можно скачать, если не закрыть эту дыру.
Брут Force, но осторожно
Хостинги давно блокируют IP после серии неудачных логинов, поэтому небольшой «троттлинг» спасёт нервную систему:
wpscan --url https://example.com
--passwords rockyou.txt
--throttle 0.6
--random-user-agent
Половина успеха — грамотно подобранный словарь. Если тестируете внутренний ресурс, попробуйте добавить политики компании или имена проектов в начале словаря.
Автоматизация: WPScan в DevSecOps‑пайплайне
Проще всего — GitHub Actions. Базовый job занимает пять строк:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Scan prod
run: docker run --rm wpscanteam/wpscan
--url ${{ secrets.PROD_URL }}
--api-token ${{ secrets.WPS_TOKEN }}
--format sarif -o result.sarif
GitHub «съест» отчёт и превратит его в список проблем, где можно выставлять приоритеты и создаваться задачи. На GitLab всё решается похожим образом через артефакты.
Cron‑экономика: ежедневно, но бесплатно
Бесплатный лимит в 25 запросов в сутки — головная боль, если у вас целый зоопарк сайтов. Есть пара лайфхаков, чтобы не разориться:
- Сканируйте в разные дни: сегодня продакшен, завтра staging, послезавтра внутренние тестовые стенды.
- Используйте
--no-update
, если знаете, что WPScan запускался пару часов назад — лишний запрос к WPVulnDB не понадобится. - Если сайтов больше десятка, дешевле купить тариф WPVulnDB, чем устраивать «ротацию» и рисковать пропустить новый CVE.
Типичные ошибки и как их избежать
- Запуск без токена. Половина базы WPVulnDB не отобразится, и вы получите ложное чувство безопасности.
- Brute‑force по живому сайту. Отсутствие delay мгновенно приведёт к бану IP или крешу слабого хоста. Тестируйте на копии или внедряйте прогрессивную задержку.
- Отключённые темы/плагины. Они всё ещё лежат на диске — злоумышленник может вызвать их напрямую. Удаляйте такое наследие, а не просто деактивируйте.
- Отчёты без анализа. Скан — половина дела. Вторая половина — понять, что именно критично сегодня, а что можно запланировать на завтра.
Полезные дополнения и альтернативы
WPScan — не единственный парень на вечеринке. Если нужен другой подход, присмотритесь:
- Wordfence — тяжелый, но функциональный плагин. Хорош, когда нужен активный файрвол в панели WP.
- Sucuri SiteCheck — облачный сканер. Запускается за минуту, но обнаруживает только видимые извне уязвимости.
- Pentest‑Tools WPScan SaaS — для тех, кто не хочет возиться с CLI, но ценит данные WPVulnDB.
Тем не менее, именно WPScan остаётся золотым стандартом благодаря регулярно обновляемой базе и живому сообществу в Discord и Mastodon, которое щедро делится новыми PoC и идеями по оптимизации.
FAQ — популярные вопросы
WPScan легален?
Да, при условии, что вы сканируете собственные ресурсы или имеете официальное согласие владельца. В противном случае попадает под статью о несанкционированном доступе.
Как часто обновлять базу WPVulnDB?
В продакшене — раз в день. Если речь о ресурсе с повышенными требованиями к безопасности (финтех, медицина), ставьте крон каждые 6 часов и держите отдельный токен для автоматики.
Что делать, если сканер «зависает»?
Проверьте флаги --max-threads
и --throttle
. Иногда достаточно убавить параллелизм. Ещё одна типовая причина — нестабильный DNS хоста. Запустите dig
и убедитесь, что домен резолвится без задержек.
Заключение
WPScan сегодня — больше, чем просто скрипт на Ruby. Это часть экосистемы WordPress‑безопасности, которая помогает держать в узде плагины‑однодневки и темы с сомнительной репутацией. Подключайте сканер к CI/CD, не забывайте про лимиты WPVulnDB и считайте, что половина инцидентов миновала вас стороной. Ну а вторая половина… для неё есть регулярные бэкапы и здравый DevOps‑подход. Удачных сканов и минимум красных строк в отчёте!