Показать сообщение отдельно
Soniks вне форума      Старый Небольшая уязвимость user level phpBB 2.0.13 #1  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


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

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

phpBB 2.0.13 - user level exploit

Подвергши версии: все версии включая phpBB 2.0.13

Файл: sessions.php

Описание: Найден баг в авторизации пользователя на форуме (автологин).
Если авторизация пройдет неудачно, то произойдет присвоение переменной $userdata ['user_id'] как АНОНИМНОМУ пользователю, но $userdata ['user_level'] остается по прежнему пользовательским. Теперь phpBB будет проверять userlevel в различных местах кода и игнорировать user_id.
Так, если Вы поизменяете "_data" cookie, чтобы послать user_id admin, Вы сможете видеть информацию, видимая администратору. Например как, скрытые пользователи в, "кто - в онлайн" или адреса электронной почты пользователей, даже если пользователь запретил это, в профиле. Возможно Вы сможете даже использовать некоторые функции admin, я не проверял это подробно. Манипуляция cookies будет только воздействовать на первую страницу, поскольку session.php тогда перепишет user_id, если Вы, конечно, не запретите браузеру изменять куки.

Найденый баг в:
PHP код:
 if ( $user_id != ANONYMOUS )
{
$auto_login_key $userdata['user_password'];
if ( 
$auto_create )
{
if ( isset(
$sessiondata['autologinid']) && $userdata['user_active'] )
{
    
// We have to login automagically
    
if( $sessiondata['autologinid'] === $auto_login_key )
    {
     
// autologinid matches password
     
$login 1;
     
$enable_autologin 1;
    }
    else
    {
     
// No match; don't login, set as anonymous user
     
$login 0;
     
$enable_autologin 0;
     
$user_id $userdata['user_id'] = ANONYMOUS;
    }
}
else
{
    
// Autologin is not set. Don't login, set as anonymous user
    
$login 0;
    
$enable_autologin 0;
    
$user_id $userdata['user_id'] = ANONYMOUS;
}
}
else
{
$login 1;
}
}
else
{
$login 0;
$enable_autologin 0;



Исправляем баг: В выше указаном коде, в файле includes/sessions.php
добавьте:
PHP код:
 $userdata['user_level'] = USER

после каждого:
PHP код:
 $user_id $userdata['user_id'] = ANONYMOUS

Выглядить будет так:
PHP код:
 $user_id $userdata['user_id'] = ANONYMOUS;
$userdata['user_level'] = USER


Очередной баг исправлен