RCE (Remote Code Execution)
Последнее изменение этой страницы: 19:20, 16 июня 2018.
RCE (англ. Remote Code Execution) – компьютерная уязвимость, при которой происходит удаленное выполнение кода на взламываемом компьютере, сервере и т.п. RCE является максимальной угрозой класса А1 по классификации OWASP. А также это гарантированный способ взлома сайтов и веб приложений. RCE - является одной из самых опасных уязвимостей.
Возможность удаленного внедрения кода в серверный скрипт в 100% случаев приводит к взлому ресурса. С помощью RCE злоумышленник сразу получает доступ к серверу атакуемого сайта, размещая на нем веб-шеллы, или любой другой вредоносный код. В практике встречались случаи, когда RCE эксплуатировали боевые скрипты, размещенные на хакерских серверах, которые отслеживали наличие вредоносной составляющей, вирусов шеллов и т.п. на сайте. Когда программисты сайта пытались удалить вредоносные скрипты с своих сайтов, они появлялись заново, в течении нескольких секунд. Фактически программисты атакуемых сайтов не успевали "отпустить клавишу" DELETE, как заражение сайта повторялось в удвоенном размере. Обычным удалением вирусов троянов и шеллов в таком случае не обойтись. Первоначально нужно найти и устранить уязвимость в коде, позволяющую эксплуатировать RCE (Remote code execution).
Возможность эксплуатации RCE возникает из за грубейших ошибок разработки сайта, отсутствия фильтрации передающих параметров, использование небезопасных функций и приемов программирования.
Содержание
Пример уязвимого PHP скрипта
Файл vuln.php
<?
eval($_GET['code']);
?>
Вызов скрипта Для вызова скрипта, вводим в поисковую строку следующий запрос: http://vulnserver.com/vuln.php?code=phpinfo();
Результат: Результатом является выполнение PHP кода, а именно команды phpinfo(), которая показывает информацию о версии php клиента, у установленного на сервере. Уязвимость RCE (Remote code execution) на сайте - это максимальная угроза для его безопасности.
Защита от RCE (удаленное выполнение кода на сервере)
Для защиты можно применять фильтрацию параметров, передающих данные в eval(); assert(); и т.д. Также, желательна проверка валидности запросов и данных в передающих параметрах[1].
SSH
В случае, если удаленный сервер имеет ssh, также возможно выполнение удаленного, но только при условии, что вам известен пароль или он отсутсвует, что бывает в случаях неграмотной настройки сервера.
Для удаленного запуска команды на сервере по SSH нежно выполнить следующую команду:
$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА'
В большинстве случаем недостаточно удаленно запустить только одну команду по SSH.
Намного чаще необходимо отправить сразу несколько команд на удаленный сервер, например, для сбора информации с целью инвентаризации и получить результат обратно.
Запустить несколько команд на удаленном хосте по SSH можно следующим образом:
$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1; КОМАНДА2; КОМАНДА3'
или
$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1 | КОМАНДА2 | КОМАНДА3'
или
$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР << EOF
КОМАНДА1
КОМАНДА2
КОМАНДА3
EOF
Пример
Узнайть версию ядра, количество ядер CPU и сколько всего RAM:
$ ssh root@192.168.1.1 << EOF
uname -a
lscpu | grep "^CPU(s)"
grep -i memtotal /proc/meminfo
EOF
Примечания
- ↑ inSafety [Электронный ресурс]: RCE - Remote code execution / Дата обращения: 04.03.2017. Режим доступа: http://insafety.org/rce.php
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.