Включение локального файла (LFI) Пентест Web приложений

Полное руководство по тестированию безопасности уязвимости LFI с целью тестирования на ошибки и тестирования на проникновение.

Цель этой статьи  помочь тестировщикам  на проникновение, которые идентифицируют и тестируют уязвимости LFI в будущих испытаниях тестирования на проникновение путем консолидации исследований для локальных методов тестирования LFI.

Уязвимости LFI, как правило, обнаруживаются во время тестов веб-приложений, используя методы, содержащиеся в этом документе.

Кроме того, некоторые из техник, упомянутых в этой статье, также широко используются в соревнованиях стиля CTF.

Основные разделы

  •      Что такое уязвимость внедрения локального файла (LFI)?
  •      Идентификация уязвимостей LFI в веб-приложениях
  •      PHP Wrappers
  •      LFI через / proc / self / environ
  •      Технология Null Byte
  •      Сокращение — обход LFI
  •      Засорение файла журнала
  •      Отправление почтой обратного шелла

Что такое уязвимость внедрения локального файла (LFI)?

Локальное включение файлов (LFI) позволяет злоумышленнику включать файлы на сервер через веб-браузер.

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

Ниже приведен пример кода PHP, уязвимого для включения локального файла.

<?php
$file = $_GET['file'];
if(isset($file))
{
include("pages/$file");
}
else
{
include("index.php");
}
?>

Идентификация уязвимостей LFI в веб-приложениях

/script.php?page=index.html

Тестер на проникновение попытается использовать эту уязвимость, манипулируя параметром определения местоположения файла, таким как:

/script.php?page=../../../../../../../../etc/passwd

Вышеприведенное действие является попыткой отобразить содержимое файла /etc/passwd в системе на основе UNIX / Linux.

Ниже приведен пример успешного использования уязвимости LFI в веб-приложении:

PHP Wrappers

PHP имеет номера оболочек, которыми часто можно злоупотреблять, чтобы обойти различные фильтры ввода.

PHP Expect Wrapper

PHP expect: // позволяет выполнять системные команды, к сожалению, модуль PHP expect не будет включен по умолчанию.

 php?page=expect://ls 

Пэйлоад отправляет запрос POST на сервер, например:

 /fi/?page=php://input&amp;cmd=ls 

Пример использования php: //input  отношении DVWA:

Запрос:

Запрос POST с использованием php: //input

Ответ веб-приложения:

Вывод команды «ls» отображается над баннером DVWA

Base64-декодирование строки предоставляет файл /etc/passwd:

Изображение, показывающее декодированный base64 вывод из /etc/passwd в системе UNIX / Linux

php://filter может быть использован без кодировки base64 таким боразом:

 ?page=php://filter/resource=/etc/passwd 

 

itsecforu.ru
Изображение, показывающее вывод из /etc/passwd в системе UNIX / Linux с использованием php: //filter

PHP ZIP Wrapper LFI

Zip-врэппер обрабатывает загруженные серверные файлы .zip, позволяя тестеру на проникновение загружать zip-файл, используя уязвимую функцию загрузки файлов, и использовать его почтовый фильтр через LFI. Типичный пример атаки будет выглядеть так:

Создайте обратный шелл PHP
Сожмите в .zip-файл
Загрузите пэйлоад сжатого шелла на сервер
Используйте zip-врэппер, чтобы извлечь пэйлоад, используя: php? Page = zip: //path/to/file.zip%23shell
Вышеприведенный пример будет извлекать zip-файл в шелл, если сервер не добавит .php, переименуйте его в shell.php

Если функция загрузки файлов не позволяет загружать zip-файлы, можно попытаться обойти функцию загрузки файлов.

LFI через / proc / self / environ

Если можно включить /proc/self/environ с помощью уязвимости LFI, то введение исходного кода через заголовок User Agent является возможным вектором атаки.

После того, как код был введен в заголовок User Agent, можно использовать уязвимость LFI для выполнения /proc/self/environ и перезагрузить переменные среды, выполняя обратный шелл.

Полезные шеллы

Полезные крошечные бэкдоры PHP для вышеупомянутых методов:

 <system ('uname -a');?> 

Технология Null Byte

Null Byte инъекция обходит фильтрацию приложений в веб-приложениях путем добавления URL-кодированных «Нулевых байтов», таких как %00.

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

Некоторые практические примеры инъекции нулевого байта для LFI:

 vuln.php?page=/etc/passwd%00

vuln.php?page=/etc/passwd%2500 

Сокращение — обход LFI

Сокращение — это еще один метод обхода черного списка.

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

Загрязнение файла журнала

Загрязнение файла журнала — это процесс ввода исходного кода в файлы журнала в целевой системе.

Это достигается путем введения исходного кода через другие открытые службы в целевой системе, которые целевая операционная система / служба будет хранить в файлах журналов.

Например, ввод PHP обратного шела в URL-адрес, что приводит к тому, что syslog создает запись в журнале доступа apache для 404-страницы не найденной записи.

Затем файл журнала apache анализируется с использованием ранее обнаруженной уязвимости включения файлов, выполняющей вложенный обратный шелл PHP.

После ввода исходного кода в файл (ы) системы, следующим шагом будет определение местоположения файла журнала.

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

Списки пэйлоадов Burp LFI FuzzDB могут использоваться совместно с  Burp для быстрого определения допустимых местоположений файла журнала в целевой системе.

Ниже приведены некоторые распространенные службы в системах Linux / UNIX:

Apache / Nginx

Внесите код в журнал доступа к веб-серверу или журналы ошибок, используя netcat, после успешной инъекции проанализируйте местоположение файла журнала сервера, используя ранее обнаруженную уязвимость LFI.

Если журналы доступа к веб-серверу огромные, может потребоваться некоторое время выполнить введенный код.

Отправить обратный шелл по email

Если целевая машина передает почту либо напрямую, либо через другую машину в сети и сохраняет почту для пользовательских www-date (или пользователя apache) в системе, тогда можно отправить по электронной почте обратный шелл.

Если для домена нет записей MX, но открыт SMTP, возможно подключение к целевому почтовому серверу и отправка почты пользователю www-data / apache.

Почта отправляется пользователю, использующему apache, например, www-data, чтобы гарантировать, что разрешения файловой системы позволят прочитать доступ к файлу /var/spool/mail/www-data, содержащему введенный код обратной оболочки PHP.

Сначала перечислите целевую систему, используя список известных имен учетной записи UNIX / Linux:

В приведенном выше изображении используется сценарий smtp-user-enum, подтверждающий, что пользователь www-data существует в системе

На следующем снимке экрана показан процесс отправки электронной почты через telnet пользователю www-data:

На приведенном выше рисунке показан процесс отправки обратной PHP-оболочки через SMTP с использованием telnet

 

На приведенном выше рисунке показан отправленный PHP шелл, подключаемый через netcat

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40