Полное руководство по тестированию безопасности уязвимости LFI с целью тестирования на ошибки и тестирования на проникновение.
Цель этой статьи помочь тестировщикам на проникновение, которые идентифицируют и тестируют уязвимости LFI в будущих испытаниях тестирования на проникновение путем консолидации исследований для локальных методов тестирования LFI.
Уязвимости LFI, как правило, обнаруживаются во время тестов веб-приложений, используя методы, содержащиеся в этом документе.
Кроме того, некоторые из техник, упомянутых в этой статье, также широко используются в соревнованиях стиля CTF.
- Основные разделы
- Что такое уязвимость внедрения локального файла (LFI)?
- Идентификация уязвимостей LFI в веб-приложениях
- PHP Wrappers
- PHP Expect Wrapper
- PHP ZIP Wrapper LFI
- LFI через / proc / self / environ
- Полезные шеллы
- Технология Null Byte
- Сокращение – обход LFI
- Загрязнение файла журнала
- Apache / Nginx
- Отправить обратный шелл по email
Основные разделы
- Что такое уязвимость внедрения локального файла (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&cmd=ls
Пример использования php: //input отношении DVWA:
Запрос:
Ответ веб-приложения:
Base64-декодирование строки предоставляет файл /etc/passwd:
php://filter может быть использован без кодировки base64 таким боразом:
?page=php://filter/resource=/etc/passwd
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:
На следующем снимке экрана показан процесс отправки электронной почты через telnet пользователю www-data: