В общем, еще одна небольшая заметка, на мысль о которой натолкнула статья [Raz0r].
Итак, представим у нас есть скрипт
PHP код:
<?php
include($_GET['file'].'.php');
?>
Это просто для примера, тут пройдет и обычный инклуд с нулевым байтом (если конечно magic_quotes off), так и способ от [Raz0r].
А я вот обнаружил еще одну интересную вещь, в Виндовсе максимальное количество символов в имени файла –
240. Так, вот я подумал, а что будет, если будет конструкция вида
PHP код:
http://test1.ru/?file=page.........................................................................................................................................................................................................................................txt
PHP код:
include('page.........................................................................................................................................................................................................................................txt.php');
т.е. имя файла, который мы предлагаем содержит 240 символов, а ведь есть еще и .php. В общем, естественно имя файла обрезается до положенной длины, и на инклуд отправляется только
PHP код:
page.........................................................................................................................................................................................................................................txt
без
.php
[+] При проверке файла при загрузке на сайт, расширение будет таким, какое нужно админу! =) В нашем случае .txt
[+] Во многих скриптах отсутствует проверка на длину файла
[-] Привязка к ОС – Windows
[-] Загружаемый файл на сайт должен иметь имя файла то же, что мы назначили, а не меняться скриптом.
В общем, я еще буду экспериментировать с Linux’ом, а где это применить, думаю найдете.