В українському сегменті Інтернету близько 80% сайтів створено на базі CMS WordPress. Ця система управління контентом займає друге місце у світі за популярністю. Поряд з цим це одна з найбільш атакованих систем керування. Щорічно зламуються сотні, а то й тисячі сайтів. Тому захисту WordPress необхідно приділяти якомога більше уваги. У цій статті я розкажу, як ефективно застосовувати WPScan — один з найпотужніших інструментів для пошуку вразливостей WordPress.
Що таке WPScan і які його можливості?

WPScan — це багатофункціональний кросплатформний фреймворк для забезпечення безпеки веб-сайтів на базі CMS WordPress. Включає такі компоненти: консольний BlackBox-сканер вразливостей WPScan CLI, плагін для CMS WordPress, базу даних вразливостей і API (безкоштовне / платне). WPScan розроблений у 2011 році на мові програмування Ruby дослідником кібербезпеки Ryan Dewhurst, відомим під псевдонімом @ethicalhack3r. Йому також допомагали Erwan LR (@erwan_lr) та Christian Mehlmauer (@firefart). Сьогодні проєкт підтримується та розвивається однойменною компанією “WPScan”, яка є частиною команди Automattic, що стоїть за розробкою WordPress.
Список функціональних можливостей WPScan:
- Сканування ядра WordPress:
- Визначає версію WordPress, встановлену на сайті.
- Перевіряє відомі вразливості для цієї версії через свою базу даних.
- Сканування плагінів WordPress:
- Виявляє встановлені плагіни та перевіряє їх на наявність відомих вразливостей.
- Аналізує навіть приховані або вимкнені плагіни.
- Сканування тем WordPress:
- Визначає активні та встановлені теми.
- Шукає відомі вразливості в темах, які можуть бути небезпечними для сайту.
- Перевірка безпеки конфігурації WordPress:
- Виявляє потенційні проблеми конфігурації, такі як доступ до конфігураційних файлів або інших критично важливих файлів (наприклад, wp-config.php).
- Перевіряє налаштування загальних директорій та їх захист.
- Звірка по CVE базі даних вразливостей WPScan:
- Використовує власну базу даних WPScan з актуальними вразливостями для сканування.
- Оновлює базу даних для отримання свіжої інформації про нові загрози.
- Енумерація користувачів WordPress:
- Виявляє імена користувачів на сайті WordPress.
- Може використовуватися для пошуку слабких місць у облікових записах адміністраторів.
- Перевірка захисту від Brute Force-атак:
- Виявляє наявність механізмів захисту від brute force атак (наприклад, захист від багаторазових спроб входу).
- Виконує прості brute force атаки для перевірки міцності паролів користувачів.
- Перевірка безпеки XML-RPC:
- Виявляє проблеми з безпекою в XML-RPC інтерфейсі, який може використовуватись для атак.
- Перевіряє, чи не є XML-RPC відкритим для несанкціонованого доступу.
- Аналіз HTTP-заголовків:
- Виявляє відсутність або неправильні налаштування заголовків безпеки (наприклад, X-Frame-Options, X-Content-Type-Options, Content Security Policy тощо).
- Формування звітів:
- Генерує звіти в різних форматах (текст, JSON, HTML).
- Може бути використано для подальшого аналізу або надання інформації для фахівців з безпеки.
- Автоматичне сканування та планування:
- Можливість автоматизованого регулярного сканування сайту за розкладом.
- Інтеграція з системами CI/CD для постійної перевірки безпеки під час розробки.
- Сканування директорій і файлів:
- Виявляє публічно доступні або неправильно захищені файли та директорії.
- Перевіряє наявність критичних конфігураційних файлів.
- Маскування та обходження захисних механізмів:
- Може спробувати обійти певні захисні механізми (WAF, фільтри) для отримання доступу до вразливих ресурсів.
- Інтеграція з базою CVE:
- Включає можливість інтеграції з іншими базами даних вразливостей (наприклад, CVE), що дозволяє додатково перевіряти нові загрози.
Цікаво знати: Існує форк WPScan – WPSeku, який має деякі додаткові можливості. Наприклад, з його допомогою можна аналізувати параметри URL і виявляти SQL/XSS/LFI вразливості. Фактично, ця утиліта є доповненням до існуючого функціоналу WPScan й може допомогти у пентестах.
Встановлення WPScan
Встановлення WPScan в ОС Ubuntu/Debian Linux:
sudo apt update && sudo apt upgrade sudo apt install git curl ruby ruby-dev build-essential libcurl4-openssl-dev libssl-dev zlib1g-dev sudo gem install wpscan wpscan --help
Встановлення WPScan в OC Arch Linux:
sudo pacman -Sy sudo pacman -S wpscan
Встановлення WPScan в MacOS:
brew install wpscanteam/tap/wpscan sudo gem install wpscan wpscan --help
Встановлення WPScan в ОС Windows:
wsl --install wpscan --help
Встановлення WPScan через Docker:
docker pull wpscanteam/wpscan docker run -it --rm wpscanteam/wpscan --url http://example.com docker run -it --rm wpscanteam/wpscan --help
На замітку: WPScan попередньо встановлений в ряді пентестерських ОС, таких як: Kali Linux, SamuraiWTF, Pentoo, BlackArch.
Робота з WPScan
Конфігурація
Щоб WPScan міг отримувати дані про вразливості, необхідно вказати API-ключ через параметр --api-token або через файл конфігурації ~/.wpscan/scan.yml. Якщо його немає, створіть вручну з наступним вмістом:
cli_options: api_token: 'YOUR_API_TOKEN'
Маркер API можна отримати, зареєструвавши обліковий запис на WPScan.com. Користувачу надається 25 безкоштовних лімітів API на день. Коли їх буде вичерпано, WPScan продовжить працювати, але тільки у звичайному режимі, без жодних даних про вразливості.
База даних WPScan знаходиться в ~/.wpscan/db
Перед початком роботи рекомендується оновити базу даних вразливостей WPScan, щоб інструмент працював із найсвіжішими даними: wpscan --update
Команди WPScan
wpscan --url https://example.com --enumerate u,ap,vt,tt,cb,dbe,m --random-user-agent --api-token TOKEN— комплексне сканування з режимом випадкового User-Agent браузера та енумерацією користувачів (u), плагінів (ap), тем (vt), timthumbs (tt), файлів конфігурації бекапів (cb), дампів баз даних (dbe), медіафайлів (m);wpscan --url http://example.com --enumerate u,ap,vt,tt,cb,dbe,m --random-user-agent | tee wpscan_log.txt --api-token TOKEN— комплексне сканування зі збереженням результатів виводу у файл;wpscan --stealthy --url https://example.com --api-token TOKEN— режим прихованого сканування;wpscan --url https://example.com --enumerate u --random-user-agent --api-token TOKEN— енумерація імен користувачів WordPress;wpscan --url http://example.com -e u --passwords /path/to/password_file.txt— енумерація імен користувачів і брутфорс атака на них з підбором паролів, використовуючи словник;wpscan --url https://example.com --passwords ~/passwords.txt --usernames administrator --max-threads 50 --api-token TOKEN— брутфорс атака на користувачів WordPress;wpscan --url https://example.com/ -U user.txt -P /usr/share/wordlists/rockyou.txt --api-token TOKEN— брутфорс атака на облікові записи користувачів WordPress, використовуючи список імен користувачів та паролів;wpscan --password-attack xmlrpc -t 20 -U admin, admin2 -P passwords.txt --url https://example.com --api-token TOKEN— брутфорс атака підбору паролів націлена на заданих користувачів з застосуванням методу входу через xmlrpc;wpscan --url https://example.com --enumerate p --random-user-agent— енумерація плагінів WordPress;wpscan --url https://example.com --plugins-detected agressive --random-user-agent --api-token TOKEN— агресивна енумерація плагінів WordPress;wpscan --url https://example.com --max-threads 1 --throttle 3000 -f cli-no-color --proxy socks5://127.0.0.1:8085 --api-token TOKEN— сканування по одному потоку, затримка між кожним запитом буде 3 секунди, виведення результатів буде в текстовому форматі без кольорових елементів, усі запити проходитимуть через проксі-сервер SOCKS5;wpscan --url https://example.com --disable-tls-checks --api-token TOKEN— сканування без перевірки SSL/TLS;wpscan --url https://example.com/ --http-auth user:pass --api-token TOKEN— сканування сайту з увімкненою HTTP-преавторизацією, вказавши дані входу. Для безпеки, пароль можна задати перемінноюexport WP_PASS='yourpassword', потім підставивши змінну вlogin:$WP_PASS;wpscan --url http://example.com --force --api-token TOKEN— сканування сайту у примусовому режимі, навіть якщо WPScan не може визначити, що сайт працює на WordPress;wpscan --url http://example.com --wp-content-dir /custom-content/ --api-token TOKEN— сканування вказаної директорії WordPress, якщо вона відрізняється від стандартної.
Масове сканування сайтів з WPScan
Незалежні дослідники розробили та виклали на GitHub скрипт mass-wpscan, який дозволяє проводити масове сканування сайтів WordPress з допомогою WPScan.
Встановлення:
git clone https://github.com/l50/mass-wpscan cd mass-wpscan go mod init mass-wpscan go mod tidy go mod vendor make build make test
Запуск:
./mass-wpscan -i domains.txt -p "--enumerate u,ap,vt,cb,dbe,m --api-token *** --random-user-agent" -o outputmasscan.txt
Моніторинг безпеки сайтів з допомогою WPScan
WPWatcher — це інструмент командного рядка, створений сторонніми розробниками, який працює у зв’язці з WPScan. Він автоматизує процес сканування WordPress-сайтів на вразливості. Це дозволяє адміністраторам постійно стежити за безпекою багатьох сайтів одночасно без необхідності вручну запускати WPScan.
WPWatcher можна встановити як на локальній системі Linux, так і на VPS-сервері. Його особливістю є те, що сканування можна запланувати з допомогою планувальника cronjob, а також доставка email-сповіщень, яку можна налаштувати через сторонній SMTP-сервер (напр., скориставшись Mailgun). В якості бази даних вразливостей використовується WPVulnDB API.
Встановлення:
pip install -U 'wpwatcher'
Конфігурація:
cd ~/.wpwatcher nano wpwatcher.conf
Приклад конфігурації можна знайти тут.
Запуск:
wpwatcher --url example1.com example2.comwpwatcher --url example1.com example2.com \
--wpscan_args "--force --stealthy --api-token <TOKEN>" \
--follow_redirect --api_limit_wait \
--send --infos --email_to you@office.ca me@office.ca
Запуск за рокладом:
# Will run at 00:00 on Mondays: 0 0 * * 1 wpwatcher --conf /path/to/wpwatcher.conf --wait > /dev/null
Як захистити сайт від експлуатації WPScan?
Чимало хакерів використовують WPScan не тільки для аудиту і тестування на проникнення, а й зловмисних цілей. Щоб захистити свій сайт на WordPress від сканування та потенційного злому з використанням цього інструмента слід впровадити усі необхідні заходи кібербезпеки.
WPScan використовує відкриті бази вразливості та інформацію, доступну через публічнодоступні файли та конфігурації, тому основна мета — обмежити доступ та приховати дані.
До прикладу, сканер WPScan дуже часто визначає плагіни WordPress та їх версії через загальнодоступні файли readme.txt. Ось скрипт, який вилучає всі readme файли з директоріїї вашого сайту:
sudo find /home/example.com/public_html -name "readme*" -exec rm -f {} \;
Ще поради:
- Встановити фаєрвол: на рівні сервера (CSF Firewall, IPtables, Fail2ban) і на рівні веб-додатку (напр. Wordfence, CleanTalk, GOTMLS Antimalware, Cloudflare);
- Обмежити доступ до
xmlrpc.php; - Обмежити доступ до
license.txt; - Відключити вбудований планувальник WordPress wp-cron.php і перейти на серверний cronjob;
- Обмежити доступ до файлу
/wp-content/debug.log; - Обмежити доступ до форми авторизації WordPress:
/wp-admin,/wp-login.php; - Захистити облікові записи WordPress від енумерації (обмежити доступ до URL типу
/?author=1, а також доступ через/wp-json/wp/v2/users); - Завжди оновлювати ядро, теми, плагіни WordPress до актуальних версій;
- Використовувати довгі та складні паролі;
- Налаштувати багатофакторну авторизацію;
- Слідкувати за привілегіями користувачів в системі;
- Встановити коректні права на файли і папки WordPress;
- Встановити HTTP-заголовки безпеки;
- Використовувати надійний SSL-сертифікат та TLS не нижче 1.2 версії;
- Використовувати систему захисту від ботів Captcha;
- Відключити редагування файлів теми і плагінів у адмін-панелі WordPress;
- Здійснювати резервне копіювання і зберігати копії у недоступному місці;
- Оптимізувати службові файли .htaccess, robots.txt, wp-config.php та functions.php;
- Оптимізувати файл конфігурації PHP.INI;
- Вести спостереження та аналітику логів – access.log та error.log;
- Заборонити завантаження файлів з небезпечними розширеннями на сайт;
- Заборонити виконання php та js файлів в службових директоріях;
- Проводити перевірку – санітизацію та валідацію будь-яких відправлених даних на сайт;
- При розробці сайту використовувати правила безпечного кодування, не застосовувати застарілі функції WordPress.
Додаткові джерела і посилання
Автор: © Konrad Ravenstone, KR. Laboratories Research Labs



