WordPress: разбор уязвимости в Discount Rules for WooCommerce

Введение

Добрый день, уважаемые подписчики! Сегодня мы разберем одну старую уязвимость в плагине Discount Rules for WooCommerce < 2.2.0 для WordPress.

WooCommerce — это плагин для создания онлайн-магазина на движке WordPress, а WooCommerce Discout Rules — дополнение для WooCommerсe для предоставления и управления скидками на товары.

Суть уязвимости заключается в возможности использовать некоторые методы плагина через admin-ajax.php, которые позволяют перечислять товары, пользователей, а самое главное — сделать товар бесплатным посредством добавления правила на скидку.

Данная статья представлена исключительно в образовательных целях. Red Team сообщество «GISCYBERTEAM» не несёт ответственности за любые последствия ее использования третьими лицами.

Стенд

Для стенда были использованы:

Обзор уязвимости

Все методы, доступные неаутентифицированному пользователю можно найти в исходном коде плагина в файле wp-content/plugins/woo-discount-rules/v2/App/Controllers/Admin/WDRAjax.php, но мы обратим внимание только на один, который позволит нам добавить скидку на товары.

00da21a3a5aba289c96805ba6c7b68e3.png

Но прежде всего, нам необходимо удостовериться в том, что текущая кодовая база соответствует необходимой. Дело в том, что в этом плагине есть все версии кода — v1 и v2. Нас интересует именно вторая версия. Для того, чтобы проверить, можно послать следующий запрос, на вывод всех зарегистрированных пользователей.

422ad3b4954bb5779834ce0988732da6.png

Если мы видим такой ответ, значит нам нужно сменить базу на вторую версию, отправив GET-запрос на любой дестинейшн с параметром awdr_switch_plugin_to=v2.

2e8845528d7d2cd064ef1d8cf12945e4.png

После этого, у нас все должно заработать.

a1e9fea2aeac1dfaf85b7284526ca410.png

Вернемся обратно к функции wdr_ajax_save_rule из файла WDRAjax.php (первый скриншот). Мы видим, что при сохранении правила создается объект класса Rule. Посмотрим какие свойства он содержит.

d7a69fc0749b0588136729ab5667d715.png

Разберем только самые необходимые:

  • title — название скидочного правила.

  • enabled- включено/выключено правило.

  • discount_type — тип скидки (wdr_simple_discount — скидка на товар отображается на главной странице, wdr_cart_discount — скидка отображается в корзине, wdr_bulk_discount — скидка с более гибкой настройкой, где можно выбрать минимальную и максимальную стоимость товара). Эти типы скидок можно также увидеть в админке при добавлении.

6dbd2ab23a289af733f40b45a0a6c3b1.png

  • filters — фильтр товаров, для которых будет добавлена скидка.

  • cart_adjustments — вид скидки (фиксированная или в процентах) и его значение.

Теперь, зная необходимые параметры, можем отправить запрос на создание скидки.

40bfa23a3503246981ab0023c27073be.png

После этого в админке должна появиться созданная скидка.

7b8d18a561a933fa32c9a77cd26a8178.png

Теперь, если мы зайдем на главную страницу, то увидим следующую картину:

55644a855fe948b15dae7eb607e1d2a1.png

Заключение

В этой статье мы рассмотрели уязвимость в плагине Discount Rules for WooCommerce, которая позволяет любому неаутентифицированному пользователю управлять скидками в магазине, что позволяет бесплатно приобретать товары.

Подписывайтесь на наш Telegram-канал https://t.me/giscyberteam

© Habrahabr.ru