Перейти к содержимому

Поиск по платформе

Code Injection через eval() в PHP-калькуляторе

Пользовательский ввод передаётся в eval(), позволяя выполнить произвольный PHP-код.

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Сложно+90 XP ~65 мин php
CWE-77 · A03:2021 Pro
Обложка: Code Injection через eval() в PHP-калькуляторе Обложка: Code Injection через eval() в PHP-калькуляторе
Задача
# Инъекция кода (Code Injection) через динамическое вычисление выражений ## Сценарий Вы — внешний аудитор, привлечённый компанией **«ВентаТрейд»** — дистрибьютором сувенирной продукции и IT-мерча для конференций и корпоративных заказчиков. B2B-витрина «ВентаТрейд» построена на нативном PHP, и к осеннему сезону конференций новый разработчик в спешке добавил публичный калькулятор оптовых цен. Крупный заказчик перед подписанием годового контракта потребовал проверить новую функциональность — разбираться досталось вам. ## Цель 1. Изучите калькулятор: отправьте типовое арифметическое выражение и определите, как введённая строка превращается в ответ сервера. 2. Докажите, что ввод исполняется как код: добейтесь, чтобы вместо числа сервер вернул строковое значение, которое вы попросили вычислить. 3. Выполните код, читающий переменную окружения веб-процесса с секретной меткой платформы, — полученное значение и есть флаг. ## Теория Калькулятор вычисляет выражение не в браузере, а на сервере — и самым опасным из возможных способов: строка из формы подставляется в языковую конструкцию динамического исполнения PHP. Интерпретатор компилирует и выполняет её с правами веб-процесса, а результат возвращает на страницу. Граница между данными и кодом исчезает: любой введённый текст, оказывающийся корректным выражением языка, будет выполнен — и речь не только об арифметике. Уязвимый паттерн: ```php $expr = $_POST['expr'] ?? ''; eval('$evalResult = ' . $expr . ';'); ``` Механика атаки сводится к подмене арифметики выражением языка: отправьте вызов встроенной функции, возвращающей строку, — её значение появится в блоке результата на той же странице. Отсюда один шаг до выполнения любого кода, доступного процессу, в том числе чтения его окружения, где платформа хранит секретную метку. ## Точка входа атаки Форма калькулятора: `GET /calculate`; вычисление: `POST /calculate` с полем `expr`. Калькулятор публичный — авторизация не требуется. * **Демо-аккаунт магазина:** `demo / demo` * **Администратор:** `admin / ???`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Command Injection: обход blacklist-фильтра WAF Обложка лабы: Command Injection: обход blacklist-фильтра WAF
CMD Injection

Command Injection: обход blacklist-фильтра WAF

Админ-панель содержит функцию ping с blacklist-фильтром (пробел, ;, cat, flag). Фильтр обходится через ${IFS}, $(), backticks и регистр имени переменной окружения.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: Command Injection: Базовая инъекция команд Обложка лабы: Command Injection: Базовая инъекция команд
CMD Injection

Command Injection: Базовая инъекция команд

Панель администратора содержит функцию ping, передающую ввод напрямую в shell без фильтрации.

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: Argument Injection в архиваторе файлов Обложка лабы: Argument Injection в архиваторе файлов
CMD Injection

Argument Injection в архиваторе файлов

Обработчик архивации файлов использует exec.Command без shell, но не фильтрует аргументы, начинающиеся с '-'. Атакующий может внедрить произвольные флаги команды tar.

+90 XP
Go Pro
Exploit Fix
Обложка лабы: Blind Command Injection через сетевую диагностику Обложка лабы: Blind Command Injection через сетевую диагностику
CMD Injection

Blind Command Injection через сетевую диагностику

Обработчик сетевой диагностики передаёт пользовательский ввод в sh -c без фильтрации. Результат команды не отображается — используйте time-based технику для подтверждения инъекции.

+90 XP
Go Pro
Exploit Fix