Forum. MyNuke.ru
Forum. MyNuke.ruСообщения за сегодняПерсональные сообщения

Навигация  
Вернуться   Forum. MyNuke.ru > PHP-NUKE > Безопасность > Уязвимости Защиты
Ник
Пароль
Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Soniks вне форума      Старый Php-Nuke POST XSS #1  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
10.03.2007, 05:16

Продукт: PHP-Nuke
Версия: 8.0 и ниже
Описание:
При определенных настройках сервера (4.0.7<=PHP<=5.2.1 и выключенном параметре register_globals off), позволяет злоумышленнику подменять переменные в скриптах, при помощи POST запроса.
Устранение:

Открываем:
mainfile.php

Находим (89 строка):
PHP код:
 if (!ini_get('register_globals')) {
@
import_request_variables("GPC""");


И меняем на:
PHP код:
 if (!ini_get('register_globals')) {
extract($_COOKIEEXTR_SKIP);
extract($_POSTEXTR_SKIP);
extract($_GETEXTR_SKIP);


Для версий php-nuke ниже 8.0 нужно так же добавить еще ниже:
PHP код:
 // Die message for empty HTTP_REFERER
$posttags "<b>Внимание:</b> ваш браузер не отправляет шапку HTTP_REFERER на сайт.<br>";
$posttags .= "Это может быть вызвано вашим браузером, использования proxy server или Firewall.<br>";
$posttags .= "Пожалуйста, измените ваш браузер или выключите использование proxy<br>";
$posttags .= "или выключите 'Deny servers to trace web browsing' в вашем firewall<br>";
$posttags .= "и вы не должны иметь проблем с отсылкой POST запросов на сайт.";
if (
$_SERVER['REQUEST_METHOD'] == "POST") {
if (isset(
$_SERVER['HTTP_REFERER'])) {
     if (!
stripos_clone($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) {
         die(
'Posting from another server not allowed!');
     }
} else {
     die(
$posttags);
}



На этом все!

Последний раз редактировалось Soniks, 22.03.2007 в 00:36.
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Alexander-V-Sh вне форума      Старый #2  
Аватара для Alexander-V-Sh
Alexander-V-Sh
Бывалый
Регистрация: 19.04.2006
Сообщения: 352


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Alexander-V-Sh Посетить домашнюю страницу Alexander-V-Sh Найти все сообщения от Alexander-V-Sh Добавить Alexander-V-Sh в список друзей  
11.03.2007, 18:14

Цитата Для версий php-nuke ниже 8.0 нужно так же добавить еще ниже:

У меня версия 7.9.3.1. Этот код присутствует в ней.

Astrix вне форума      Старый #3  
Аватара для Astrix
Astrix
Бывалый
Регистрация: 09.01.2007
Сообщения: 309


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Astrix Посетить домашнюю страницу Astrix Найти все сообщения от Astrix Добавить Astrix в список друзей  
11.03.2007, 18:59

у меня 7.9.3.2 - там его уже нет :(
А вот вторая часть имеется...
 
Хочешь обнять весь мир? - Купи глобус!


Alexander-V-Sh вне форума      Старый #4  
Аватара для Alexander-V-Sh
Alexander-V-Sh
Бывалый
Регистрация: 19.04.2006
Сообщения: 352


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Alexander-V-Sh Посетить домашнюю страницу Alexander-V-Sh Найти все сообщения от Alexander-V-Sh Добавить Alexander-V-Sh в список друзей  
11.03.2007, 19:21

Astrix
Я про вторую часть и говорю.
// Die message for empty HTTP_REFERER

А первой ниукого наверно нет, раз для 8 менять надо. Заменил себе

Astrix вне форума      Старый #5  
Аватара для Astrix
Astrix
Бывалый
Регистрация: 09.01.2007
Сообщения: 309


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Astrix Посетить домашнюю страницу Astrix Найти все сообщения от Astrix Добавить Astrix в список друзей  
11.03.2007, 19:39

аналогично. я тоже заменил.
 
Хочешь обнять весь мир? - Купи глобус!


Astrix вне форума      Старый #6  
Аватара для Astrix
Astrix
Бывалый
Регистрация: 09.01.2007
Сообщения: 309


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Astrix Посетить домашнюю страницу Astrix Найти все сообщения от Astrix Добавить Astrix в список друзей  
18.03.2007, 22:02

Цитата: Сообщение от Soniks
И меняем на:
PHP код:
 if (!ini_get('register_globals')) {
 
extract($_COOKIEEXTR_SKIP);
 
extract($_POSTEXTR_SKIP);
 
extract($_GETEXTR_SKIP);




Soniks, я бы от себя порекомендовал сделать небольшую перестановку в этом коде, а именно:

PHP код:
 if (!ini_get('register_globals')) {
 
extract($_POSTEXTR_SKIP);
 
extract($_GETEXTR_SKIP);
 
extract($_COOKIEEXTR_SKIP);



А перед ним вставить вот такой код:

PHP код:
 foreach ($_COOKIE AS $c_key => $c_val)
{
    if (isset(
$_POST[$c_key]) OR isset($_GET[$c_key])) unset($_COOKIE[$c_key]);



Теперь поясню, чем чревато невыполнение этой маленькой просьбы.

Переменные cookie вообще не подлежат никакой проверке в Нюке и (мною было только что проверено!!!) хакер может сформировать определенным образом эти самые куки и выполнить произвольный SQL-запрос в БД жертвы.

В связи с этим предлагаю уничтожать все переменные, содержащиеся одновременно в cookie и передаваемые в post/get запросе, отдавая при этом приоритет post/get, т. к. они проходят проверку.

PS
Уязвимость актуальна только при отключенном параметре magic_quotes_gpc

PPS
Найдено мною только что.
 
Хочешь обнять весь мир? - Купи глобус!


Soniks вне форума      Старый #7  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
21.03.2007, 23:55

Astrix
Цитата Теперь поясню, чем чревато невыполнение этой маленькой просьбы.

Переменные cookie вообще не подлежат никакой проверке в Нюке и (мною было только что проверено!!!) хакер может сформировать определенным образом эти самые куки и выполнить произвольный SQL-запрос в БД жертвы.

бесполезный шаг, читайте описание функции extract() и не советуйте того чего не проверяли!
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Astrix вне форума      Старый #8  
Аватара для Astrix
Astrix
Бывалый
Регистрация: 09.01.2007
Сообщения: 309


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Astrix Посетить домашнюю страницу Astrix Найти все сообщения от Astrix Добавить Astrix в список друзей  
22.03.2007, 00:26

Цитата: Сообщение от Soniks
Astrix
бесполезный шаг, читайте описание функции extract() и не советуйте того чего не проверяли!


Проверял! И два дня назад взломал таким методом сайт - специально, чтобы проверить (не буду говорить, какой, к тому же они сервер прикрыли), и на локалхосте в разных вариантах все это прогонял! Так что уж поверьте, я знаю, о чем говорю...

Описание функции я читал: "EXTR_SKIP - Если есть конфликт, существующая переменная не перезаписывается."

в том все и дело, что из COOKIE переменные извлекаются в первую очередь и никаких конфликтов и быть не может!

В общем, я останусь при своем мнении. Вы поступайте, как считаете нужным.
 
Хочешь обнять весь мир? - Купи глобус!


jokerz вне форума      Старый #9  
Аватара для jokerz
jokerz
Новенький
Регистрация: 15.11.2006
Сообщения: 7


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для jokerz Найти все сообщения от jokerz Добавить jokerz в список друзей  
24.03.2007, 11:04

потверждаю, но многие пропаччены

Soniks вне форума      Старый #10  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
24.03.2007, 17:30

Astrix разницы ни какой, т.к. не в этом смысл что первое, т.к. что куки подменить, что в пост добавить, что в гет, любой способ подойдет, если скрипт не проверяет переменные то тут уже проблема не в этом именно... данная проблема существует именно в том, что происходит подмена переменной $_SERVER, на которую опирается фильтр.
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Совмещаю PHP Nuke 7.8 и vBulletin 3.0.7 Ernest-Oleg-Iv Настройка и Изменение 5 07.01.2007 17:18
php nuke 7.9 + ipb 2.1.* kentbrn Установка 15 14.04.2006 04:33
Проблема при установке PHp nuke 7.6 alexey Установка 5 13.04.2006 02:37
Проблема при установке PHp nuke 7.9 haric Установка 2 08.03.2006 23:46
пробоемы с Php nuke 7.5 rus незарегистрированный Установка 3 08.09.2005 01:20


Часовой пояс GMT +4, время: 15:29.


На Верх
Рейтинг@Mail.ru