Главная
Командные инъекции — как одна строка кода открывает доступ к серверу
Командная инъекция — это уязвимость, при которой злоумышленник может передать в веб-приложение свою команду, а та будет выполнена на сервере с правами приложения.
Это один из самых опасных видов атак: он даёт прямой доступ к операционной системе, а значит — к данным, файлам, внутренней сети и даже полной компрометации сервера.
Как работает командная инъекция
Многие веб-приложения взаимодействуют с ОС: вызывают скрипты, утилиты, обрабатывают файлы, проверяют соединения. Если разработчик напрямую подставляет пользовательский ввод в системную команду без фильтрации, появляется уязвимость.
Пример (PHP):
<?php
$ip = $_GET['ip'];
echo shell_exec("ping -c 4 " . $ip);
?>
Если в ip подставить 8.8.8.8; cat /etc/passwd, сервер после пинга выполнит и команду cat.
Поиск и проверка уязвимостей
Пентестеры проверяют:
-
Формы и поля ввода, которые вызывают системные действия (пинг, поиск, архивирование).
-
API-методы, принимающие параметры, которые могут попасть в команду.
-
Неочевидные точки ввода — заголовки HTTP, cookies, параметры файлов.
Для проверки используют специальные символы:
-
;,&&,||— для последовательного выполнения команд. -
|— для передачи вывода одной команды в другую. -
Обратные кавычки
`команда`и$(команда)— для подстановки.
Внедрение команд в Linux и Windows
-
Linux: стандартные разделители
;,&&,|, подстановка команд. -
Windows: символы
&,|, использованиеcmd.exeс ключами.
Обход фильтров и защит
Разработчики часто пытаются блокировать опасные символы и команды, но это не всегда работает.
Методы обхода:
-
Пробелы заменяются на
${IFS}или%20. -
Разделители заменяются на их кодировки (
%0a,%0d). -
Запрещённые слова (например,
cat) маскируются:c''at,ca\t.
Обфускация — искусственное усложнение полезной нагрузки, чтобы пройти фильтры.
Инструменты для тестирования и обхода
-
Burp Suite — перехват и модификация запросов.
-
FFUF или wfuzz — автоматический перебор полезных нагрузок.
-
Commix — специализированный инструмент для поиска и эксплуатации командных инъекций.
Как защитить приложение
-
Никогда не передавать пользовательский ввод напрямую в системные команды.
-
Использовать безопасные API и функции (например,
escapeshellargв PHP). -
Применять валидацию и белые списки значений.
-
Ограничивать права пользователя приложения в ОС.
-
Логировать все обращения и регулярно проводить аудит.
Почему командные инъекции так опасны
В отличие от многих уязвимостей, XSS или SQL-инъекций, командная инъекция даёт контроль не только над приложением, но и над всей системой. Даже одна строчка уязвимого кода может превратить сервер в полностью скомпрометированный узел.
Хотите научиться находить, эксплуатировать и закрывать командные инъекции?
В модуле «Командные инъекции» вы пройдёте путь от поиска уязвимых точек до обхода фильтров и защиты, а в одном из практических заданий получите полный доступ к серверу через веб-шелл. 7 уроков с практикой дадут навык, который можно применить в пентесте и защите приложений.