Уязвимость внедрения команд и смягчение их последствий

Опубликовано: 1 Января, 2022

Внедрение команд - это в основном внедрение команд операционной системы, которые должны выполняться через веб-приложение. Цель атаки с внедрением команд - внедрить и выполнить команды, указанные злоумышленником в уязвимом приложении. В подобной ситуации приложение, которое выполняет нежелательные системные команды, похоже на псевдосистемную оболочку, и злоумышленник может использовать ее как любой авторизованный системный пользователь. Однако команды выполняются с теми же привилегиями и средой, что и веб-приложение. Атаки с внедрением команд возможны из-за отсутствия правильной проверки входных данных, которыми может манипулировать злоумышленник (формы, файлы cookie, заголовки HTTP и т. Д.).

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

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

Пример:

// C program to demonstrate Command Injection attack
// The purpose of the program to print contents of a
// file provided as command line argument.
#include <stdio.h>
#include <unistd.h>
int main( int argc, char **argv)
{
char cat[] = "cat " ;
char *command;
size_t commandLength;
commandLength = strlen (cat) + strlen (argv[1]) + 1;
command = ( char *) malloc (commandLength);
strncpy (command, cat, commandLength);
strncat (command, argv[1], (commandLength - strlen (cat)) );
system (command);
return (0);
}

При обычном использовании вывод - это просто содержимое запрошенного файла:

$ ./a.out exploit.txt
my name is akash

Однако, если мы добавим точку с запятой и другую команду в конец этой строки, команда будет выполнена catWrapper без претензий:

$ ./a.out "exploit.txt; ls"
меня зовут акаш
exploit.txt duplicFree.c nullpointer.c
unstosig.c www * a.out *
format.c strlen.c useFree *
catWrapper * misnull.c strlength.c useFree.c
commandinjection.c nodefault.c trunc.c writeWhatWhere.c

Следующий фрагмент кода PHP уязвим для атаки путем внедрения команд (веб-приложение):

<?php
print ( "Please specify the name of the file to delete" );
print ( "<p>" );
$file = $_GET [ 'filename' ];
system( "rm $file" );
?>

Следующий запрос и ответ - это пример успешной атаки:

Запрос
http://mywesite.com/delete.php?filename=bob.txt;id
Ответ
Укажите имя файла для удаления
uid = 33 (www-data) gid = 33 (www-data) groups = 33 (www-data) 

Смягчение

  • В идеале разработчик должен использовать существующий API для своего языка. Например (Java): вместо использования Runtime.exec () для выполнения команды «mail» используйте доступный Java API, расположенный в javax.mail. *
  • Если такого доступного API не существует, разработчик должен очистить весь ввод от вредоносных символов. Наиболее эффективным было бы внедрение позитивной модели безопасности. Как правило, гораздо проще определить допустимые символы, чем недопустимые.

использованная литература
https://en.wikipedia.org/wiki/Code_injection
http://stackoverflow.com/questions/44799/preventing-command-line-injection-attacks

Эта статья предоставлена Акашем Шараном . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .