Code Injection: eval() в Node.js калькуляторе
Веб-калькулятор вычисляет пользовательские выражения через eval(). Это даёт атакующему полный RCE: доступ к process.env, child_process и любым модулям Node.js.
hardnodejsPro
Задача
# Инъекция через выполнение динамического кода
## Сценарий
Перед вами интернет-магазин SecureShop. На сайте есть встроенный калькулятор — простой инструмент для расчёта скидок и итоговых сумм. Пользователь вводит выражение, сервер вычисляет результат и возвращает его в UI.
Реализация выглядит безобидно, но в Python (как и в большинстве динамических языков) существует целый класс уязвимостей **Code Injection** — когда пользовательский ввод попадает в механизм динамического выполнения кода. Это не классическая Command Injection через системную оболочку — это выполнение произвольного кода на языке самого приложения, что часто даёт атакующему ещё больше возможностей: доступ ко всем встроенным функциям, импорт любых модулей, прямое чтение файлов через языковой API без обращения к shell.
В системе есть CTF-флаг — обычный текстовый файл на сервере. Ваша задача — найти узкое место в реализации калькулятора, использовать его для выполнения произвольного кода в процессе приложения и через этот канал прочитать файл с флагом.
Уязвимость относится к классу **CWE-95** (некорректная нейтрализация директив в динамически вычисляемом коде) и входит в категорию инъекций OWASP.
## Цели
1. Войдите в приложение под `demo` / `demo` и найдите функциональность калькулятора.
2. Попробуйте передать через калькулятор не только арифметику, но и более сложные конструкции — наблюдая, как сервер на это реагирует.
3. На основе наблюдений сформируйте полезную нагрузку, которая прочитает с сервера произвольный файл по абсолютному пути.
4. Используйте полученный канал, чтобы прочитать файл с CTF-флагом и забрать его значение.
## Данные
| Параметр | Значение |
|----------|----------|
| Пользователь | `demo` / `demo` |