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

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

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

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

Автор: Hack & Fix
Освоишь: exec.Command argsбез shell -cinput allowlist
Сложно+90 XP ~65 мин golang
CWE-77 · A03:2021 Pro
Обложка: Argument Injection в архиваторе файлов Обложка: Argument Injection в архиваторе файлов
Задача
# Argument Injection (внедрение опций в аргументы утилиты) ## Сценарий Вы проводите аудит **PrintForge** — сервиса онлайн-печати. Пользователи загружают файлы, а для отправки в типографию разработчик добавил эндпоинт архивации: клиент передаёт список имён файлов, сервер вызывает утилиту `tar` и создаёт архив. Процесс запускается напрямую, с раздельными аргументами и без оболочки — архитектор уверен, что внедрение команд здесь невозможно в принципе. Однако раздельные аргументы защищают только от оболочки: если аргумент начинается с дефиса, целевая утилита считает его собственной опцией, и это открывает другой класс атаки. ## Цель 1. Изучите эндпоинт архивации и убедитесь, что элементы списка файлов не проверяются на служебные префиксы. 2. Подайте в список такое «имя файла», которое утилита примет за собственную опцию, исполняющую команду в момент создания архива. 3. Через полученное выполнение команд добудьте секретную переменную окружения процесса — это флаг лабы. ## Теория **Argument Injection** — класс атак, при котором атакующий контролирует не команду и не оболочку, а отдельные аргументы программы. Многие утилиты командной строки имеют легитимные опции с опасной семантикой: запуск внешней команды, чтение конфигурации по произвольному пути. Если пользовательская строка попадает в аргументы без проверки префикса, «имя файла» превращается в опцию утилиты. **Уязвимый паттерн:** ```go for _, f := range req.Files { args = append(args, f) // пользовательская строка уходит в аргументы tar } cmd := exec.Command("tar", args...) ``` Оболочка здесь действительно не участвует — и это не спасает. У архиватора есть опции контрольных точек: одна включает периодические точки при записи архива, другая задаёт действие в такой точке, включая запуск внешней команды. Строки из списка файлов попадают в аргументы как есть, поэтому опции проходят под видом данных. ## Точка входа атаки `POST /api/archive` — JSON-тело со списком `files`; требуется сессия любого зарегистрированного пользователя. * **Обычный пользователь:** `demo` / `demo` * **Флаг:** секретная переменная окружения процесса — добывается через исполнение команд; права администратора для этого не нужны

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

другие лабы по этой уязвимости
Обложка лабы: Blind Command Injection через сетевую диагностику Обложка лабы: Blind Command Injection через сетевую диагностику
CMD Injection

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

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

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

Bypass Filters: Строгий WAF

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Basic Command Injection: Сетевой пинг Обложка лабы: Basic Command Injection: Сетевой пинг
CMD Injection

Basic Command Injection: Сетевой пинг

Простая OS Command Injection через инструмент сетевой диагностики в админ-панели.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: Command Injection: Обход Blacklist-фильтра в Node.js Обложка лабы: Command Injection: Обход Blacklist-фильтра в Node.js
CMD Injection

Command Injection: Обход Blacklist-фильтра в Node.js

Функция ping в админ-панели защищена blacklist-фильтром, блокирующим пробелы и ключевые слова cat/flag/tail/less/more. Фильтр обходится через ;id, ;env и другие конструкции без пробелов.

+90 XP
Node.js Pro
Exploit Fix