Blind Command Injection: time-based инъекция без вывода в Node.js
API сетевой диагностики Express выполняет ping через child_process.exec, но вывод не возвращается клиенту. Уязвимость подтверждается через задержку ответа (timing-based blind injection).
mediumnodejsPro
Задача
# Слепая инъекция команд (Blind Command Injection)
## Сценарий
Перед вами интернет-магазин SecureShop. Команда разработки добавила для зарегистрированных пользователей инструмент диагностики сети — Network Diagnostics, проверяющий доступность хоста через ping. На первый взгляд инструмент выглядит безопасно: ответ всегда одинаковый, и вывод системной команды пользователю не возвращается. Но если пользовательский ввод всё-таки попадает в системный вызов, эта классическая ошибка превращается в **Blind Command Injection** — атакующий выполняет произвольные команды, не видя их вывода напрямую, и подтверждает успех через побочные эффекты (задержки, файлы, сетевые запросы).
В системе есть административный аккаунт; CTF-флаг лежит в админ-панели. Ваша задача — найти blind-injection в инструменте диагностики, использовать её для разведки серверного окружения и получения admin-доступа, после чего забрать флаг.
## Что такое Blind Command Injection
В отличие от классической инъекции, где вывод команды виден в ответе, в blind-варианте:
- Сервер передаёт пользовательский ввод в интерпретатор shell.
- Вывод полностью скрыт (перенаправлен в `/dev/null` или иначе подавлен).
- Ответ всегда одинаковый, независимо от того, что было выполнено.
Это затрудняет обнаружение, но не делает уязвимость менее опасной: команды выполняются с полными правами серверного процесса.
## Техники обнаружения Blind Injection
- **Time-based** — вставка команды задержки в качестве второй команды; если ответ приходит позже обычного, инъекция работает. Самый быстрый способ подтверждения без внешней инфраструктуры.
- **File-based** — выполнение команды, записывающей данные в файл, доступный через HTTP. Содержимое файла читается через браузер.
- **Out-of-band** — эксфильтрация данных через DNS-запросы или HTTP-вызовы наружу (требует контролируемого сервера).
## Цели
1. Авторизуйтесь как обычный пользователь и найдите инструмент диагностики сети.
2. Подтвердите наличие blind command injection через одну из техник побочных эффектов.
3. Используя инъекцию, получите доступ к административному аккаунту приложения.
4. Войдите как admin и заберите CTF-флаг из админ-панели.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |
| Цель | админ-доступ → CTF-флаг в админ-панели |