29.08.2009

Чтение php-кода из файла при наличии LFI

Ну вот, заканчивается это замечательное лето (надеюсь, у вас оно тоже было замечательным), и похоже пасмурная осень не заставит себя долго ждать. Ну что ж, значит пришло время вернутся к своему ноуту и продолжить изучение интересующих меня вещей из мира ИТ. А это означает, что в этом бложике начнут, наконец, появляться новые заметки. ( : Начну я, пожалуй, с тех вещей о которых я все хотел, но забывал/забивал написать в течении последних нескольких месяцев.

Итак, это было небольшое лирическое отступление, а теперь перейду непосредственно к теме заметки.

Когда я описывал в заметке Self-contained RFI in PHP способ использования wrapper'а php://filter для кодирования php-кода веб-шелла, я упустил из виду одну интересную возможность, которую может дать использование этого wrapper'а при наличии RFI в коде атакуемого сайта, но невозможности эксплуатации уязвимости как RFI, а только как LFI, из-за allow_url_include = Off.

Иногда вместо выполнения php кода при инклуде, может оказаться полезным не выполнение, а чтение файла, содержащего php-код. А чтобы php-код не выполнился, мы можем закодирвать его с помощью php://filter. Например:

http://vuln.site/?lfi_here=php://filter/read=convert.base64-encode/resource=index.php

Затем остается лишь перекодировать выведенный закодированный base64-кодировкой текст обратно в php-код. Не забывайте только, что php://filter доступен в версиях PHP => 5.0.0.

Узнал я об этом трюке пару месяцев назад из заметки в блоге pragmatk'a. Если вам это пригодилось - шлите респекты ему. Да, и отдельное спасибо Qwazar'у за то, что напомнил мне об этом. ( ;

12 коммент.:

Raz0r комментирует...

Спасибо, что и мне напомнил :) Долго не мог вспомнить, где я читал про этот фильтр

Ins3t комментирует...

cr0w, благодарю!
Не знал о этой фиче.

Анонимный комментирует...

Эх, а я сам эту тему нашёл :) Хотя всё задокументировано, так что логично что не первый. /Qwazar/

Анонимный комментирует...

что за бред? при локальном инклуде оно никак работать не будет. при РФИ - да

cr0w комментирует...

> что за бред? при локальном инклуде оно никак работать не будет. при РФИ - да

Вы меня почти было запутали (%
Это будет работать если в коде не добавляется каталог перед получаемой переменной, т.е. по большому счету когда в коде RFI, но, например, из-за allow_url_include = Off возможно только проведение LFI.

Анонимный комментирует...

cr0w не путайте понятия)
RFI - Remote File Include
LFI - Local File Include
Это НИКАК не зависит от allow_url_include.
Хоть и нельзя при allow_url_include = Off в рфи проинклудить ремоут файл, название не меняется.
РФИ оно и есть РФИ. Прошу изменить тайтлы, да и сам текст поста, не путайте людей)

cr0w комментирует...

Ок, я немного поправил текст. ( ;

Анонимный комментирует...

Кстате, при инклуде через include_once() и require_once() не возможно прочитать исходный файл на PHP, в котором происходит инклуд./53xShadow/

Qwazar комментирует...

Эх, если бы я знал что этот метод уже был в паблике :) Дошёл до него сам.

Dmitry Evteev комментирует...

однако, круто:)

Анонимный комментирует...

круто однако

Анонимный комментирует...

этот способ дает возможность прочтения код php с удаленного сервера?
если да то можно чуть подробнее расписать?

Отправить комментарий

Большая просьба: не оставляйте анонимных комментариев и не используйте в своих комментариях нецензурную лексику без дела.