![]() |
[новый способ] замена нулл-байту в инклудах
Просматривая забугорный форум sla.ckers.org, обнаружил новый способ, позволяющий отбросить любое значение, в частности расширение файла, в инклудах без использования нулл-байта. Как известно, нулл-байт экранируется при magic_quotes_gpc=on, поэтому это зачастую создает трудности при эксплуатировании LFI.
Способ заключается в том, что расширение можно отбросить, если до него предшествует последовательность символов, при чем длина этой последовательности может различаться в зависимости от OS. Где в коде PHP находится уязвимость пока сказать сложно, но вполне ясно, что она связана с теми же особенностями, которые ведут к проблемам с нулл-байтом, т.е. все исходит из C, на котором написан PHP. К сожалению, уязвимость не позволяет выбраться из текущей папки просто дописав перед значением ../, но мной был найден способ обхода (также зависит от OS). 1. *nix Символы, составляющие последовательность: 0x2F / (не экранируется) Длина полного пути *: *getcwd() + DIRECTORY_SEPARATOR + имя файла + последовательность символов 4095 Linux 1023 FreeBSD Пример: http://localhost/test.php?lol=inc.php//////////////////////[...] Выход за пределы текущей папки: http://localhost/test.php?lol=existing_dir/../../inc.php//////////////////////[...] где existing_dir имя существующей папки в некоторых версиях PHP (e.g. 5.1.2) на linux имя папки может быть любым 2. windows В windows имеются значительные отличия в зависимости от версии PHP. Почти в каждой версии имеются свои особенности. Символы, составляющие последовательность: 0x20 пробел
0x22 "
0x2E .
0x3C <
0x3E >
0x2f /
0x5c \
а также различные вариации с точкой: ./ .\ . (пробел) .//.// .\\.\\ etc Длина полного пути *: *getcwd() + DIRECTORY_SEPARATOR + имя файла + последовательность символов PHP 4.4.2, 5.1.2, 5.2.6 265 если присутствует точка в отбрасываемом значении 266 если отсутствует PHP 4.4.4, 4.4.9, 5.2.0 258 если присутствует точка в отбрасываемом значении 259 если отсутствует точка в отбрасываемом значении Пример: http://localhost/test.php?lol=inc.php.......................[...] http://localhost/test.php?lol=inc.php<<<<<<<<<<<[...] Выход за пределы текущей папки: http://localhost/test.php?lol=exsiting_dir/../../inc.php............................[...] http://localhost/test.php?lol=nonexsiting_dir/../../inc.php............................[...] где nonexsiting_dir имя любой папки, даже несуществующей Вывод исследования: для windows универсальный символ для последовательности в векторе атаки это точка (.); минимальная универсальная длина этой последовательности - 266 символов в *nix единственным и универсальным символом является слэш (/); минимальная универсальная длина последовательности - 4095 символов; Для эксплуатации LFI в реальных условиях необходимо рассчитывать длину последовательности с учетом максимальной длины URL, которую способен принять веб-сервер. Если, например, сервер имеет ограничение URL < 4096 байт, а система работает на linux, то реализовать уязвимость не удастся Информация конечно не совсем приватная, но пока что распространение она не получила. Оригинальный топик: http://sla.ckers.org/forum/read.php?16,25706 |
Цитата:
Цитата:
|
Длина максимального URL зависит от конфигурации веб-сервера. Апач по умолчанию держит 4096 байт, как раз достаточно дле реализации уязвимости
http://paradigm.ru/2007/12/19/url-max-length/ |
Значит нормально
P.S на локалхосте стоит ограничение 512 по-умолчанию |
в смысле на локалхосте? я про веб-сервер, апач он и на локалхосте апач )
з.ы. у меня на локалхосте ограничение 4096 байт ) |
интересно конечно, у кого нибудь сработало?
|
ShAnKaR, проверь сам и убедись ) все работает
|
да, интерсно
*пошёл копать дедокрученые инклуды |
B вправду)
Цитата:
PHP код:
|
Напишите у кого какие версии всего софта, ось, пхп, апач, способ подключения пхп к апачу.
Что то у меня не работает данная конструкция, если у кого то это работает то отпишите на каких настройках. PHP код:
|
| Время: 21:00 |