Компьютер для продвинутых пользоватлей Выпус по безопасности. Ошибка в PunBB.
Компьютер для продвинутых
пользователей
Содержание:
PunBB
ПО: PunBB
Версия: 1.2.10
О программе:
Коротко, PunBB быстрый и малый по размеру форум написанный на PHP.
Выпушенная по лицензии GNU. Это первая попытка сделать быструю,
маленькую и малографическую альтернативу других проектов как phpBB, IPB
и vBulletine. PunBB имеет меньше функций и особенностей в отличие от
других, но обладает быстрыми и маленькими по размеру страничками.
Описание:
1) Отказ обслуживания.
Когда происходит запрос, скрипт не проверяет IP ранее
зарегистрированного пользователя.
Этот баг позволяет сделать некоторые выводы:
- Отсутствие свободного места в базе данных.
- Ошибки синтаксического анализа.
- Некорректное выполнение администратором удаления пользователей.
- Отказ в обслуживании.
Вот кусок кода:
$now = time();
// Add the user
$db->query('INSERT INTO '.$db->prefix.'users (username, group_id,
password,
email, email_setting, save_pass, timezone, language, style, registered,
registration_ip, last_visit) VALUES(\''.$db->escape($username).'\',
'.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\',
'.$email_setting.',
'.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \'
'.$pun_config['o_default_style'].'\', '.$now.',
\''.get_remote_address().'\',
'.$now.')') or error('Unable to create user', __FILE__, __LINE__,
$db->error());
$new_uid = $db->insert_id();
// If we previously found out that the e-mail was banned
if ($banned_email && $pun_config['o_mailing_list'] != '')
{
$mail_subject = 'Alert - Banned e-mail detected';
$mail_message = 'User \''.$username.'\' registered with banned
e-mail address: '.$email1."\n\n".'User profile:
'.$pun_config
['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'--
'."\n".
'Forum Mailer'."\n".'(Do not reply to this message)';
pun_mail($pun_config['o_mailing_list'], $mail_subject,
$mail_message);
}
До этого кода не встречается запрос на проверку базы данных на флуд.
2) Возможен подбор логина методом перебора.
Возможно, вы думаете, что эта ошибка не серьезна, но, к сожалению, на
сегодняшний день используют метод перебора для подбора пароля.
Когда пользователь регистрируется, форум сообщает, что пароль должен
быть меньше 4 байт. Если немного подумать, взлом 4-ех байтового пароля
(возможно алфавитно-цифрового, потому как я уверен, что 90% паролей
являются таковыми) требует некоторого времени для соединения и отправки
запросов к серверу, но это время нам дается. Хотя сервер может
заблокировать частые запросы, но все-таки такая ошибка возможна
практически везде.
Потому как предыдущая ошибка скрипта не проверяет IP возможно отправить
множество запросов с одного компьютера.
Кусок кода:
if (isset($_POST['form_sent']) && $action == 'in')
{
$form_username = trim($_POST['req_username']);
$form_password = trim($_POST['req_password']);