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

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

Command Injection: eval() Injection

Калькулятор на e-commerce сайте вычисляет выражения через eval(), позволяя любому авторизованному пользователю выполнить произвольный Python-код.

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Средне+60 XP ~35 мин python
CWE-77 · A03:2021 Pro
Обложка: Command Injection: eval() Injection Обложка: Command Injection: eval() Injection
Задача
# Инъекция кода (динамическое вычисление выражений) ## Сценарий Вы — сотрудник службы безопасности «ВольтМастер» — интернет-магазина наборов для сборки электроники. На сайте работает калькулятор скидок: покупатель вводит арифметическое выражение, сервер возвращает результат. Инструмент собирали в спешке к распродаже, и перед новой акцией маркетинг попросил проверить, не тянет ли он за собой чего-нибудь опасного. ## Цель 1. Войдите как обычный покупатель и найдите калькулятор. 2. Проверьте, ограничивается ли ввод арифметикой или сервер принимает любые конструкции языка. 3. Выполните на сервере код, который прочитает файл с флагом, и получите его значение в ответе калькулятора. ## Теория В динамических языках есть механизм вычисления выражений из строки: приложение передаёт ему пользовательский ввод целиком. Калькулятору достаточно арифметики, но вычислитель не делает различий — исполняется всё, что синтаксически допустимо в языке, с полными правами приложения. Это инъекция кода (CWE-95): она не уступает инъекции команд в оболочку, потому что атакующему доступны возможности самого языка — встроенные функции, импорт модулей, файловый ввод-вывод — без запуска системных утилит. **Уязвимый паттерн:** ```python result = str(eval(expression)) ``` Ввод из формы попадает в вычислитель напрямую, а результат возвращается на страницу, поэтому канал не слепой: вывод выполненного кода виден в поле ответа калькулятора. ## Точка входа атаки `POST /calculator` — поле `expression` (плюс CSRF-токен формы). Для входа используйте `POST /login` с полями `username` и `password`. * **Обычный покупатель:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: Command Injection: Слепая инъекция команд (Timing-based) Обложка лабы: Command Injection: Слепая инъекция команд (Timing-based)
CMD Injection

Command Injection: Слепая инъекция команд (Timing-based)

API сетевой диагностики выполняет команду shell, но не возвращает вывод. Уязвимость обнаруживается через задержку ответа (timing-based).

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

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

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Command Injection: Обход Blacklist WAF Обложка лабы: Command Injection: Обход Blacklist WAF
CMD Injection

Command Injection: Обход Blacklist WAF

Функция ping защищена blacklist-фильтром, блокирующим пробелы и ключевые слова. Фильтр обходится через ${IFS}, brace expansion и другие техники.

+90 XP
Python Pro
Exploit Fix
Обложка лабы: Bypass Filters: Строгий WAF Обложка лабы: Bypass Filters: Строгий WAF
CMD Injection

Bypass Filters: Строгий WAF

Обход фильтрации пробелов и черного списка команд для RCE.

+60 XP
Go Pro
Exploit Fix