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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-97657 — Python PoC для CVE-2026-97657: подделывает токены восстановления AES-CTR через XOR-манипулируемость для обхода аутентификации и захвата учётных записей WordPress в Abandoned Cart Pro ≤10.8.0. | Kitploit
Инструменты/GitHubGitHub/murrez/cve-2026-97657
Повышение привилегийСканеры уязвимостейАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьКриптографияАутентификация
GitHubmurrez/cve-2026-97657

CVE-2026-97657

Python PoC для CVE-2026-97657: подделывает токены восстановления AES-CTR через XOR-манипулируемость для обхода аутентификации и захвата учётных записей WordPress в Abandoned Cart Pro ≤10.8.0.

123 дней назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-97657 — обход аутентификации в Abandoned Cart Pro for WooCommerce

Python 3 PoC для CVE-2026-97657 — Abandoned Cart Pro for WooCommerce (Tyche Softwares) ≤ 10.8.0. CNA: Wordfence.

ПродуктAbandoned Cart Pro for WooCommerce
Уязвимые версии≤ 10.8.0 (обновитесь до исправленной версии выше 10.8.0)
CWECWE-639 — обход авторизации через контролируемый пользователем ключ
CVSS 3.19.8 Critical
Маркер проверкиPOCBIT-97657-OK (проверка сессии/администратора)
PoCbithttps://pocbit.org/pocs/cve-2026-97657

Описание

Ссылки восстановления используют токены AES-CTR без MAC (совместимый с Wcal_Aes_Ctr формат: 8-байтовый CTR nonce + шифротекст, base64). Плагин загружает encrypt_key для конкретного email из контролируемого атакующим параметра запроса user_email. В wcap_email_track_links() (Pro; аналог в Lite — wcal_email_track_links()) проверка wcap_nonce / HMAC выполняется только когда wcap_nonce не пуст, поэтому при его отсутствии проверка целостности пропускается. После расшифровки abandoned_id (ID строки корзины) используется без подтверждения принадлежности этому email, а затем выполняется wp_set_auth_cookie(), если включён автологин (по умолчанию).

Неаутентифицированный атакующий, имеющий один легитимный URL восстановления из собственного письма-напоминания, может XOR-манипулировать шифротекстом CTR, чтобы изменить встроенный ID корзины на ID брошенной корзины жертвы (той же длины, что и исходный ID), открыть поддельный URL без wcap_nonce и войти как жертва (включая администраторов, бросивших корзину).

Типичная форма URL (Pro):

GET /?wacp_action=checkout_link&[email protected]&validate=<token>

(существуют варианты wcap_action / wcal_action; URL-адреса трекинговых ссылок могут содержать дополнительные параметры, например c=.)


Требования

cd CVE-2026-97657
pip install -r requirements.txt
  • Python 3.9+
  • Зависимости: requests, urllib3

Обзор использования

РежимНазначениеОбязательные аргументы
check (по умолчанию)Читает readme.txt плагина, отмечает версию ≤ 10.8.0-t URL или --list FILE
forgeЛокально строит поддельный recovery URL (без HTTP)--recovery-link, --source-cart-id, --target-cart-id
exploitФормирует токен + HTTP GET + проверяет сессию WordPressТо же, что и для forge

Рекомендуемый порядок работы (авторизованная лаборатория):

  1. Массовый или одиночный check — подтвердить slug плагина + версию ≤ 10.8.0.
  2. forge — проверить дополнение cart ID и форму URL перед отправкой трафика.
  3. exploit — один GET к поддельному recovery URL; подтвердить cookies + /wp-admin/.

Exploit/forge не используют -t / --list. Целевой хост берётся из --recovery-link (схема + хост).


Предварительные требования (exploit / forge)

ТребованиеЗачем
Один легитимный recovery URLДаёт валидный CTR nonce + ciphertext и (обычно) вашу строку user_email / encrypt_key в ac_sent_history
Плагин ≤ 10.8.0 с включённым auto-login (по умолчанию)Исправленные сборки или отключённый auto-login блокируют wp_set_auth_cookie()
Зарегистрированный пользователь WordPress (жертва) со строкой брошенной корзиныПуть захвата выполняет вход по user_id из ac_abandoned_cart_history; чисто гостевые корзины используют другую ветку
URL checkout_link настоятельно предпочтителенОткрытый текст — это {abandoned_cart_id}&url=.... Токены track_links кодируют email_sent_id, а не cart ID — неверный тип ID ломает forge
ID одинаковой длиныXOR-манипулируемость CTR переворачивает байты только 1:1; дополняйте нулями (см. ниже)

Получение --recovery-link

  1. В целевом магазине зарегистрируйтесь/войдите как пользователь, которого вы контролируете.
  2. Добавьте товары в корзину и покиньте оформление заказа (бросьте корзину).
  3. Дождитесь письма-напоминания (или сократите таймеры отсечки в лаборатории, которой вы владеете).
  4. Скопируйте полный checkout_link из письма (или из webhooks / экспорта плагина, если включено).

Примеры форм Pro (из документации вендора / webhooks):

https://shop.example/?wacp_action=checkout_link&validate=<base64-token>
https://shop.example/?wacp_action=checkout_link&[email protected]&validate=<token>
https://shop.example/?wacp_action=track_links&[email protected]&validate=<token>&c=<coupon-token>

Вставьте URL точно так, как в письме (включая validate; порядок параметров запроса не важен).

Получение ID строк корзины

ИсточникПоле
WooCommerce Abandoned Cart → Cart details (админка)ID брошенной корзины (первичный ключ БД)
Полезная нагрузка Webhook (контекст wcap_cart, checkout_link)"id": "383" в ресурсе корзины
MySQL (лаборатория)wp_ac_abandoned_cart_history.id (префикс таблицы Pro может отличаться)

--source-cart-id должен быть ID внутри открытого текста вашего токена (ваша строка брошенной корзины). --target-cart-id — строка жертвы в той же таблице.

Дополнение нулями (одинаковая длина)

PoC отклоняет несовпадающие длины. Дополните оба ID до одинаковой ширины:

Источник (ваш)Цель (жертва)OK?
383001Да (3 символа)
03830001Да (4 символа)
3831Нет — запустите forge с 0383 / 0001 вместо этого

Справочник CLI

ФлагРежимыЗначение
-t, --targetcheckКорень сайта WordPress, например https://shop.example.com
--list FILEcheckОдин URL сайта на строку; комментарии # игнорируются
--modeвсеcheck (по умолчанию), forge, exploit
--recovery-link URLforge, exploitПолный URL восстановления из письма-напоминания
--source-cart-idforge, exploitID вашей строки брошенной корзины (в открытом тексте токена)
--target-cart-idforge, exploitID строки брошенной корзины жертвы (та же длина строки)
-j Ncheck (список)Параллельные воркеры (по умолчанию 8)
--timeout SECcheck, exploitТайм-аут HTTP (по умолчанию 15)
--insecurecheck, exploitОтключить проверку TLS-сертификата
--jsonl FILEcheck, exploitДобавлять один JSON-объект на каждый запуск
--vuln-list FILEcheckЗаписать URL с версией ≤ 10.8.0
-q, --quietвсеМеньше вывода в консоль
--no-colorвсеПростой терминал

Коды выхода

КодКогда
0Exploit: success: true; forge: всегда; check: всегда (одиночный -t)
1Exploit: не удалась проверка входа/администратора
2Запуск списка check без семантики -t (информационный)

Режим check

python poc.py -t https://shop.example.com --mode check
python poc.py --list targets.example.txt --mode check -j 16 --vuln-list hits.txt --jsonl scan.jsonl

Проверки:

  • /wp-content/plugins/woocommerce-abandon-cart-pro/readme.txt
  • Альтернативный слаг woocommerce-abandoned-cart-pro

Режим Forge (офлайн)

python poc.py --mode forge \
  --recovery-link "https://shop.example.com/?wacp_action=checkout_link&[email protected]&validate=..." \
  --source-cart-id "0383" \
  --target-cart-id "0001"

Выходной JSON включает exploit_url (суффикс HMAC удаляется из validate, параметры nonce удаляются).

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