command injection что это

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Внедрение команд ОС: понятие, эксплуатация, автоматизированный поиск уязвимости

Обычно применяется термин «внедрение кода», он относится к SQL-инъекциям, межсайтовому скриптингу (XSS), PHP-инъекциям и большому количеству других инъекций и их разновидностей. Внедрение команд ОС (иногда пишут «инъекция команд ОС», «инжект команд ОС») – это одна из разновидностей внедрения кода. Её особенностью является выполнение несанкционированных команд операционной системы на удалённом сервере через уязвимое веб-приложение.

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

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

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

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

Эксплуатация внедрения команд ОС (при пересылке на сервер методом GET)

Создайте на тестовом сервере файл с содержимым (не будет работать на Windows!):

Источник

OS Command Injection: ось под контролем

Выполнение произвольных команд операционной системы является разновидностью инъекций, к которым относятся также SQL-инъекции, RCE, LDAP-инъекции и т.д. Инъекции являются одним из самых распространенных классов уязвимостей согласно классификации OWASP Top 10.

При разработке веб-приложения может быть реализован функционал, позволяющий пользователю взаимодействовать с операционной системой веб-сервера. Для этого будет достаточно передать команду с дополнительными опциями в систему, а результат отображать на странице. Тем не менее, подобные возможности потенциально приводят к уязвимостям, которые возникают, если пользовательские данные в запросе к веб-приложению никак не фильтруются. Используя эту уязвимость, атакующий может получить чувствительные данные:

Файлы паролей операционной системы;

Конфигурационные файлы операционной системы;

Исходный код приложения.

А также полностью скомпрометировать веб-сервер со всеми исходящими из этого последствиями.

Статья носит информационный характер. Не нарушайте законодательство.

Для реализации веб-приложения с уязвимостью Command injection был взят следующий пример:

Пользовательский ввод принимается через GET-параметр ping и подставляется в соответствующую строку в качестве аргумента при выполнении команды операционной системы.

Поиск уязвимости

Ручной поиск

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

В параметре ping пользователь передает ip-адрес или доменное имя сервера, доступность которого он хочет проверить. В случае с yandex.ru веб-приложение формирует команду:

Операционная система выполняет команду, а результат отображается на странице веб-приложения. Однако, нам необходимо не просто выполнить команду проверки пинга, а что-нибудь по-интереснее, например, команду ls для просмотра содержимого текущего каталога. Но если мы просто так ее добавим в команду вместо ip-адреса, то желаемого результата не получим, поскольку веб-приложение сформирует команду:

Получается, нам необходимо каким-то образом написать команду ls в поле для ввода ip-адреса, чтобы он обрабатывался отдельно от команды ping.

Для этого нам понадобится видоизменить вводимые данные и привести к следующему виду:

Теперь веб-приложение отправит в ОС уже 2 команды, а результат будет отображаться на странице веб-приложения:

Есть и другие варианты, например:

cmd1 & cmd2 – выполнение обеих команд (работает только в ОС Windows).

Не всегда для атакующего будет всё просто. Иногда веб-приложение может быть настроено так, что не будет выводить результаты выполнения команды, а какой-нибудь обобщенный результат типа: «Успешно» или «Выполнено». В этом случае все еще можно определить наличие уязвимости и эксплуатировать ее, используя Blind Command injection:

Читайте также:  что делать если есть белок в моче

Если уязвимость присутствует, то веб-приложение отработает с таким же результатом, как и раньше. Вот только ответ придет с задержкой в 10 секунд. Похоже на эксплуатацию Blind SQLi.

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

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

Автоматизация

Для автоматизации процесса поиска и эксплуатации уязвимостей существуют различные инструменты. Но сегодня рассмотрим только один из них.

Commix

Инструмент для автоматизации поиска и эксплуатации уязвимостей Command injection. Написан на языке Python и позволяет искать уязвимость во всех типах запросов.

Команды получения информации о системе:

Команда для быстрого запуска:

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

Попробуем создать реверс-коннект. Выполняем команду reverse_tcp и заполняем данные. Синтаксис команд здесь схож с Metasploit-Framework:

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

Теперь протестируем инструмент, защитив веб-приложение с помощью Nemesida WAF.

Теперь протестируем инструмент, подключив модуль машинного обучения Nemesida AI MLC. Все попытки эксплуатации уязвимости были заблокированы.

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

На выбор у нас несколько сценариев:

По очереди используем каждый из сценариев и смотрим удастся ли теперь обойти защиту. Модуль машинного обучения Nemesida AI MLC успешно определил подозрительные запросы, отсекая любые попытки эксплуатации уязвимости.

Заблокированные запросы смотрим в личном кабинете:

Противодействие

Существует несколько методов, гарантирующих безопасность веб-приложения от наличия уязвимости Command injection и предотвращающих выполнение произвольных команд:

Для реализации функционала выполнения команд ОС через веб-приложение рекомендуется использовать эквивалентные команды. Например, в PHP для выполнения команд ОС разработчик может использовать функцию exec(). Однако стоит помнить, что функция также не является полностью безопасной, поэтому в качестве дополнительной меры защиты желательно производить фильтрацию вводимых пользователем значений. Для этого можно использовать функцию escapeshellcmd(), которая будет экранировать символы, которыми пользователь может воспользоваться для эксплуатации Command injection.

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

Используйте средства защиты веб-приложения, например, WAF. Разумеется, нет ничего безопаснее чистого и правильно написанного кода, однако и лишней рекомендация в этом списке явно не будет.

Источник

Command injection: Ось под контролем

Уязвимость «внедрение команд» позволяет выполнять команды на уровне операционной системы. Относится к разновидности инъекций, к которым относятся также SQL-инъекции, межсайтовый скриптинг (XSS), PHP-инъекции и большое количество других инъекций и их разновидностей. Инъекции являются одним из самых распространенных классов уязвимостей согласно классификации OWASP Top 10.

При разработке веб-приложения может быть реализован функционал, позволяющий пользователю взаимодействовать с операционной системой веб-сервера. В результате чего не нужно писать новую программу, а просто передать команду с дополнительными опциями в систему и отображать результаты на сайте. Тем не менее, подобные возможности потенциально приводят к уязвимостям, которые возникают, если пользовательские данные в запросе к веб-приложению никак не фильтруются. Используя эту уязвимость, атакующий может получить чувствительные данные:

Файлы паролей операционной системы;

Конфигурационные файлы операционной системы;

Читайте также:  пуэрильное дыхание у детей до какого возраста выслушивается

Исходный код приложения.

А также полностью скомпрометировать веб-сервер со всеми исходящими из этого последствиями.

Статья носит информационный характер. Не нарушайте законодательство.

Для примера реализации веб-приложения с уязвимостью Command injection был взят следующий пример:

Пользовательский ввод принимается через GET-параметр ping и подставляется в соответствующую строку, в качестве аргумента при выполнении команды операционной системы.

Поиск уязвимости

Ручной поиск

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

В параметре ping пользователь передает ip-адрес или доменное имя сервера, доступность которого он хочет проверить. В случае с yandex.ru веб-приложение формирует команду:

Операционная система выполняет команду, а результат отображается на странице веб-приложения. Однако, нам необходимо не просто выполнить команду проверки пинга, а что-нибудь по-интереснее, например, команду ls для просмотра содержимого текущего каталога. Но если мы просто так ее добавим в команду вместо ip-адреса, то желаемого результата не получим, поскольку веб-приложение сформирует команду:

Получается, нам необходимо каким-то образом написать команду ls в поле для ввода ip-адреса, чтобы он обрабатывался отдельно от команды ping.

Для этого нам понадобится видоизменить вводимые данные и привести к следующему виду:

Теперь веб-приложение отправит в ОС уже 2 команды, а результат будет отображаться на странице веб-приложения:

Есть и другие варианты, например:

cmd1 & cmd2 – выполнение обеих команд (работает только в ОС Windows).

Не всегда для атакующего будет всё просто. Иногда веб-приложение может быть настроено так, что не будет выводить результаты выполнения команды, а какой-нибудь обобщенный результат типа: «Успешно» или «Выполнено». В этом случае все еще можно определить наличие уязвимости и эксплуатировать ее, используя Blind Command injection:

Если уязвимость присутствует, то веб-приложение отработает с таким же результатом, как и раньше. Вот только ответ придет с задержкой в 10 секунд. Похоже на эксплуатацию Blind SQLi.

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

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

Автоматизация

Для автоматизации процесса поиска и эксплуатации уязвимостей существуют различные инструменты. Но сегодня рассмотрим только один из них.

Commix

Инструмент для автоматизации поиска и эксплуатации уязвимостей Command injection. Написан на языке Python и позволяет искать уязвимость во всех типах запросов.

Команды получения информации о системе:

Команда для быстрого запуска:

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

Попробуем создать реверс-коннект. Выполняем команду reverse_tcp и заполняем данные. Синтаксис команд здесь схож с Metasploit-Framework:

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

Теперь протестируем инструмент, защитив веб-приложение с помощью Nemesida WAF.

Теперь протестируем инструмент, подключив модуль машинного обучения Nemesida AI MLC. Все попытки эксплуатации уязвимости были заблокированы.

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

На выбор у нас несколько сценариев:

По очереди используем каждый из сценариев и смотрим удастся ли теперь обойти защиту. Модуль машинного обучения Nemesida AI MLC успешно определил подозрительные запросы, отсекая любые попытки эксплуатации уязвимости.

Заблокированные запросы смотрим в личном кабинете:

Противодействие

Существует несколько методов, гарантирующих безопасность веб-приложения от наличия уязвимости Command injection и предотвращающих выполнение произвольных команд:

Для реализации функционала выполнения команд ОС через веб-приложение рекомендуется использовать эквивалентные команды. Например, в PHP для выполнения команд ОС разработчик может использовать функцию exec(). Однако стоит помнить, что функция также не является полностью безопасной, поэтому в качестве дополнительной меры защиты желательно производить фильтрацию вводимых пользователем значений. Для этого можно использовать функцию escapeshellcmd(), которая будет экранировать символы, которыми пользователь может воспользоваться для эксплуатации Command injection.

Читайте также:  какой ник можно сделать в тик токе для девочки

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

Используйте средства защиты веб-приложения, например, WAF. Разумеется, нет ничего безопаснее чистого и правильно написанного кода, однако и лишней рекомендация в этом списке явно не будет.

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

Источник

Этичный хакинг с Михаилом Тарасовым (Timcore)

Блог об Этичном Хакинге

#9 Уязвимость — OS Command Injection.

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

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

Рассмотрим наглядно данную уязвимость на примере машины bee-box (buggy web-application). Перейдем на вкладку «OS Command Injection»:

Жмем кнопку «Lookup», и видим подробности сайта www.nsa.gov:

Итак по-порядку. Сначала узнаем наш ip-адрес:

Далее прослушиваем входящее соединение по порту 4444:

Можем вводить разные команды:

Это очень опасная уязвимость, повторюсь, но все же это так и есть.

Источник

Этичный хакинг с Михаилом Тарасовым (Timcore)

Блог об Этичном Хакинге

#1 Уязвимость DVWA. SQL-Injection (уровень Low).

Здравствуйте, дорогие друзья.

Давайте рассмотрим уязвимости веб-приложения DVWA, в частности SQL-инъекцию на уровне Low. Думаю, Вы уже знаете, что такое SQL-инъекция, поэтому сразу перейдем к практике.

Выставим значение уровня безопасности на Low:

Перейдем на вкладку «SQL-Injection», и введем цифру 1 для примера:

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

Пробуем ввести цифру 2, и получаем тот же самый вывод:

Нам нужно проверить, уязвима данная страница к SQL-инъекциям. Для этого вводим одинарную кавычку:

Получаем ошибку синтаксиса, а это значит, что уязвимость действительно здесь есть.

Проверим количество столбцов с помощью SQL-запросов. Команды будут выглядеть как: «1’ order by 1 #», «1’ order by 2 #»:

Итак, 2 столбца у нас уже есть, исходя из проверки. Введем команду «1’ order by 3 #»:

Исходя из полученной записи делаем вывод, что в таблице 2 столбца.

Теперь проверим версию базы данных, с помощью запроса «1’ union select null, version() #»:

Версия базы данных (5.0.51a-3ubuntu5), и она показана на скриншоте выше.

Теперь проверим имя пользователя, с помощью команды «1’ union select null, user() #»:

Теперь узнаем имя базы данных с помощью команды: «1’ union select null, database() #»:

База данных называется «dvwa».

Продолжим исследование уязвимости, и теперь попробуем имя таблицы от information_schema.tables. Команда: «1’ union select null, table_name from information_schema.tables #»:

Настала пора узнать захешированные пароли и имена пользователей. Это делается с помощью команды «1′ union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users#»:

В итоге мы узнали имена пользователей и пароли в этой базе данных.

Источник

Сказочный портал