Использование замены null-byte в реальных условиях

Использование замены null-byte в реальных условиях
Проводя тестирования на проникновение в отношении Web-приложений, построенных на PHP, такая полезная особенность интерпретатора, как альтернатива символу конца строки (0), уже неоднократно позволяла успешно провести атаку типа Local File Including (LFI). На фоне этого появились некоторые наработки эксплуатации LFI c использованием метода по обходу null-byte [ 1 , 2 , 3 ]. Примеры разберем на up to date системе FreeBSD (7.2-RELEASE-p3) с php (5.2.10 with Suhosin-Patch 0.9.7). <? include("q/".$_GET['f'].".txt"); ?> Для выполнения атаки работает: /?f=../../../../../etc/passwd/.[N]/. , где /.[N]/. - repeat("/.", 487) <? include("qq/".$_GET['f'].".txt"); ?> Предыдущий URL не позволит получить /etc/passwd. Но такой запрос успешно отработает: /?f=/../../../../../etc/passwd/.[N]/. <? include("qqq/".$_GET['f'].".txt"); ?> Аналогично, предыдущий URL не позволит получить доступ к файлу. Сработает первый запрос: /?f=../../../../../etc/passwd/.[N]/. и т.д. То есть, существует прямая зависимость между началом запросов выхода за каталог "../" и "/../" (кратная двум) от начала поступающих данных в функцию include(),require(), etc. Другой пример кода: <? include($_GET['f'].".txt"); ?> Предыдущие запросы идут лесом. Отработает следующий URL: /?f=non/../../../../../etc/passwd/.[N]/. Таким образом, при эксплуатации LFI с использованием метода по обходу null-byte могут использоваться следующие запросы: "any/../file[N]", или "../../file[N]", или "/../../file[N]", где [N] замена null-byte, характерная для атакуемой ОС.
Path Traversal File Including research методика уязвимости web
Alt text

Ваш провайдер знает о вас больше, чем ваша девушка?

Присоединяйтесь и узнайте, как это остановить!