Выполнение ОС команд (OS Commanding) — метод нападения, используемый, чтобы эксплуатировать веб-сайты, выполняя команды Операционной Системы посредством манипуляций входными данными приложения.
Когда веб-приложение не надлежащим образом обрабатывает входные данные от пользователя перед их применением в коде приложения, это может дать возможность обмануть приложение при выполнении команд операционной системы. Выполняемые команды будут запускаться с таким же правами доступа, как и компонент, исполняющий команду (например, сервер БД, сервер Веб-приложений, Веб-сервер и т.п.).
Пример
Perl позволяет выполнять канальную пересылку данных из процесса в открытый оператор, добавлением символа "|" (Канал)
в конец имени файла.
Пример применения символа канала.
# Выполнение "/bin/ls" и установление выходного канала к открытому оператору
open(FILE, "/bin/ls|")
Веб-приложения часто включают параметры, указывающие файл для отображения или другого применения, как шаблон. Если веб-приложение не должным образом обработает входные данные, получаемые от пользователя, злоумышленник может изменить значение этого параметра-шаблона, чтобы включить команду оболочки, сопроводив ее символом канала (как показано выше).
Если исходный URL веб-приложения выглядит так:
http://example/cgi-bin/showInfo.pl?name=John&template=tmp1.txt
То, изменив значение параметра template, злоумышленник может обмануть веб-приложение в выполнении команды /bin/ls|
:
http://example /cgi-bin/showInfo.pl?name=John&template=/bin/ls|
Большинство языков-сценариев разрешают программистам выполнять команды Операционной Системы в момент выполнения, используя при этом различные выполняющие функции. Если веб-приложение позволяет входным данным, подготовленными пользователем, быть использованным внутри такого вызова функции без выполнения предварительной обработки, это может дать возможность злоумышленнику выполнять команды Операционной Системы удаленно. Например, ниже показана часть PHP-скрипта, который показывает содержание системных каталогов (на Unix системах):
//Выполнить команду оболочки:
exec("ls -la $dir", $lines, $rc);
Добавление точки с запятой (;) за командой Операционной Системы, дает возможность заставить веб-приложение выполнить вторую команду:
http://example/directory.php?dir=%3Bcat%20/etc/passwd
В результате этого будет получено содержание файла /etc/passwd.
Нет комментариев