вот накропал скрипт распознает версию форумов ipb phpBB и булки конечно не фонтан еще надо дорабатывать но позырьте http://www.genom.h10.ru там вверху запускать forum.pl http://forum.antichat.ru/ например +) там фича идет сначала распознавание форума по характерным файлам или папкам -- но иногда допустим при отсутствии файла на серве идет рефреш на страницу в ошибками хостера и если там нет строки not found то скрипт подумает что такая страница есть в таком случае запускайте forum.pl http://forum.antichat.ru/ all на ачате походу вроде получается 3.0.6 проапрейдженный до 3.5.? а потом до последней версии 3.6.4
Code: +admin@xaxa:~/Desktop/Downloads$ perl forum.pl http://www.viagroup.ru/forum/ ############# What a forum? genom-- ############### ��� �������?....��� ������ � ~~~~~~~~~~~~~~~~~vBulletin~~~~~~~~~~~~~~~~~~~~~ Check version by clientscript's file .... Check #1 for vBulletin 3.6.4 ....[OK]+ Check #2 for vBulletin 3.6.4 ....[NO] Check #3 for vBulletin 3.6.4 ....[NO] Check #4 for vBulletin 3.6.4 ....[NO] Check for vBulletin < 3.6.* ....[OK]+ Check for vBulletin >= 3.6.0 ....[NO] Check for vBulletin >= 3.6.0 ....[OK]+ Check for vBulletin >= 3.6.0 ....[OK]+ Check for vBulletin >= 3.5.0 ....[OK]+ кривой твой скрипт, там ипб
Да вот тоже на этом форуме тоже пробовал. Вот тут чуть чуть добавил в скрипт.=) Code: #!/usr/bin/perl use LWP::UserAgent; my $ua = LWP::UserAgent->new( max_size => 1024, agent => 'kakep brayzer v 9.1.1', ); print"\n\n############# What a forum? genom-- ###############\n\n"; if (length(@ARGV[0])==0) {print 'Use: forum.pl http://www.loleg.com/forum/'; exit; } if (@ARGV[1] eq "all"){bulka();ipb();phpbb();exit;} $xz="\n может это булка?....";$xz=~tr/а-я/\x80-\x9f/;print "$xz"; my $req = HTTP::Request->new(GET => "@ARGV[0]".'reputation.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {$xz="угу кажысь она\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";bulka();exit;} else{$xz="не не она\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";} $xz="\n а если это IPB?....";$xz=~tr/а-я/\x80-\x9f/;print "$xz"; my $req = HTTP::Request->new(GET => "@ARGV[0]".'style_images/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {$xz="попался бугагаг\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";ipb();exit;} else{$xz="некатит\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";} $xz="\n прочеким на phpBB?....";$xz=~tr/а-я/\x80-\x9f/;print "$xz"; my $req = HTTP::Request->new(GET => "@ARGV[0]".'viewtopic.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {$xz="точняк он\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";phpbb();exit;} else{$xz="проехали\n";$xz=~tr/а-я/\x80-\x9f/;print "$xz";} sub phpbb{ print"\n~~~~~~~~~~~~~phpBB~~~~~~~~~~~~~\n"; print"\nCheck #1 for phpBB <=2.0.11 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'db/oracle.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for phpBB <= 2.0.19 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'admin/admin_disallow.php?setmodules=00'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/Call to undefined function/==1) {print '[OK]+';} else{print'[NO]';} } sub ipb{ print"\n\n~~~~~~~~~~~~~IPB~~~~~~~~~~~~~\n"; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/lib/search_mysql_ftext.php'); my $res = $ua->request($req); $yda4a=$res->as_string; $ww=index($yda4a,'home');$ss=index($yda4a,'sources\lib');$zz=substr($yda4a,$ww,$ss-$ww);$zz=~s/\n//eg; $xz="путь к папке с форумом для ipb < 2.2.0 ...";$xz=~tr/а-я/\x80-\x9f/;print"$xz $zz \n"; my $req = HTTP::Request->new(GET => "@ARGV[0]".'init.php'); my $res = $ua->request($req); $yda4a=$res->as_string; $ww=index($yda4a,'home');$ss=index($yda4a,'init.php');$zz=substr($yda4a,$ww,$ss-$ww);$zz=~s/\n//eg; $xz="путь к папке с форумом для ipb >= 2.2.0 ...";$xz=~tr/а-я/\x80-\x9f/;print"$xz $zz \n"; print"\nCheck #1 for IPB 1.3.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'style_emoticons/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==1) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 1.3.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'style_avatars/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==1) {print '[OK]+';} else{print'[NO]';} print"\nCheck #3 for IPB 1.3.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'Skin/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #4 for IPB 1.3.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'ssi_templates/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #5 for IPB 1.3.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'fonts/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\n------------------------------------\nCheck #1 for IPB 2.0.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'skin_cache/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.0.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/ipbportal.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #3 for IPB 2.0.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/findpost.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #4 for IPB 2.0.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/announcements.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #5 for IPB 2.0.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/taskloader.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\n------------------------------------\nCheck #1 for IPB 2.1.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'jscripts/ipb_editor.js'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.1.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'jscripts/ipb_editor_std.js'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #3 for IPB 2.1.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/components_acp/registration_DEPR.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #4 for IPB 2.1.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/components_init/example.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\n------------------------------------\nCheck #1 for IPB 2.2.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'style_captcha/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.2.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'resources/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #3 for IPB 2.2.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'converge_local/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #4 for IPB 2.2.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'admin/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/is not allowed to connect to/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #5 for IPB 2.2.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'skin_acp/clientscripts/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} } print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'cache/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'ips_kernel/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'jscripts/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'lofiversion/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'modules/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'sources/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for IPB 2.*.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'style_avatars/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} sub bulka{ print"\n\n~~~~~~~~~~~~~~~~~vBulletin~~~~~~~~~~~~~~~~~~~~~\n"; print"\nCheck version by clientscript's file ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'clientscript/vbulletin_editor.css'); my $res = $ua->request($req); $yda4a=$res->as_string; $ss=index($yda4a,'vBulletin');$zz=substr($yda4a,$ss,18);$zz=~s/\n//eg; print"$zz"; print"\nCheck #1 for vBulletin 3.6.4 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'clientscript/vbulletin_cphome_scripts.js'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #2 for vBulletin 3.6.4 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'images/regimage/fonts/HECK.TTF'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #3 for vBulletin 3.6.4 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'images/regimage/fonts/WetPet.ttf'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck #4 for vBulletin 3.6.4 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'includes/functions_banning.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck for vBulletin < 3.6.* ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'validator.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck for vBulletin >= 3.6.0 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'admincp/admininfraction.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck for vBulletin >= 3.6.0 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'signaturepics/'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck for vBulletin >= 3.6.0 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'includes/datastore'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} print"\nCheck for vBulletin >= 3.5.0 ...."; my $req = HTTP::Request->new(GET => "@ARGV[0]".'ajax.php'); my $res = $ua->request($req); $yda4a=$res->as_string; if ($yda4a=~m/not found/==0) {print '[OK]+';} else{print'[NO]';} } sub mybb{ }
Substitution pattern not terminated at F:\-=-Exploit-=-\Version forum.pl line 25 4. Сам ошибки там чего то не заметил так что незнаю!
кривой кривой Green_Bear и KaMiKadZe написано ведь в посте что если вывод сообщения об ошибке нестандартный -- выводится какаянить хрень(у машки там денид аксес при открытии любого несуществующего файла если сильно надо его просканить то можешь поменять not found на Forbidden You don't have permission to access /forum/123.php on this server.) вместо 404 file not found --- то скрипт это криво обработает -- и запускайте тогда forum.pl хост all и зырьте по тому форуму который там стоит и кста если чтото добавляете то лучше кусочки кода выкладывайте а не весь
я тут уже критиковал твой скрипт http://s-teals.org/showthread.php?t=263 Не учили юзать redirectable? Код нечитаемым и просто сам алгоритм тупой определения.....
почитал критику -- конечно там есть доля правды -- все ниже сказаное думаю за отмаз прокатит: редирект обрабатывать-- ну конечно а о том что на этом форуме мона хз что настроить и при доступе к файлам каким то может срабатывать редирект не от хостера а от самого форума на пагу о недостатке доступа или еще чего -- как в этом случае ??? проверять наличие файла get запросом -- если знаешь еще способ как проверить есть файл или нет -- то скажи может я заблуждась узнать версию форума в 3 запроса --- мда это вообще конечно неспорю можно но чем больше тем лучше -- ибо надо учитывать апгрейды -- допустим на ачате в яваскриптах версия вообще 3.0.6 -- ну и что значит тут у нас форум такой старый?? при дальнейшик проверках вылазит еще есть файлы присущие и веткам 3.5 и 3.6 -- значит были апгрейды и вообще чмырить все могут я понимаю что можно на меня многое сказать но я такой какой есть -- лучше укажите где как сделать лучше и укажите на ошибки -- если критика по делу я всегда ее воспринимаю нормально и могу признать что неправ
Я тебя не чмырил, я просто сказал что твой скрипт надо полностью переписать заново... Сам то понял чо сказал..... редирект не нужно обрабатывать, его нужно тока отловить, по умолчанию он срабатывает тока при get и head...так что их нулишь ,и lwp спокойно выдает ответ 302. Используй head + {_rc} Для булки очень много способов определения версии, так же как и по другим форумам... Кроме как надписи внизу и наличие файлов.... юзай поиск, все обсуждалось уже
ну насчет чмырить эт я не на тебя -- про редирект спаисбо незнал --- Для булки очень много способов определения версии, так же как и по другим форумам... Кроме как надписи внизу и наличие файлов.... юзай поиск, все обсуждалось уже ---- у мну в скрипте не тока по файлам определяется --- и статьи я скачивал и читал перед написанием =) ну что скрипт сырой и канявый я еще вначале написал =)
для булки. инфа в окошке стиля мб и совпадет. потом файлы clientscript. Самый геморр это помойму phpbb, хотя может я просто его ни разу изнутри не видел/ а так скрипт конечно не очень. но идея!!! 5+++
phpbb вообше лажа две строчки исправят в форуме и шасть новая версия --- итак перейдем к сути -- переписал скрипт ------ жду коментария киборга =) и ще добавил определение версии для phpbb по changelog genom.h10.ru/forum.pl
C:\bla bla\Dread>perl c:\forum.pl forum.test.ru ############# What a forum? genom-- ############### МОЖЕТ ЭТО БУЛКА?....УГУ КАЖЫСЬ ОНА ~~~~~~~~~~~~~~~~~vBulletin~~~~~~~~~~~~~~~~~~~~~ Check version by clientscript's file .... Check #1 for vBulletin 3.6.4 ....[OK]+ Check #2 for vBulletin 3.6.4 ....[OK]+ Check #3 for vBulletin 3.6.4 ....[OK]+ Check #4 for vBulletin 3.6.4 ....[OK]+ Check for vBulletin < 3.6.* ....[OK]+ Check for vBulletin >= 3.6.0 ....[OK]+ Check for vBulletin >= 3.6.0 ....[OK]+ Check for vBulletin >= 3.6.0 ....[OK]+ Check for vBulletin >= 3.5.0 ....[OK]+ так мне он фыдаёт на любой форум)))) кто из нас тупит Я или скрипт!?
Я тоесть ты полный путь нужно указывать http://www.loleg.com/forum/ с указанием протокола и в конце кавычка -- см usage
У меня нормально справился с ipb... спасибо, нужный скрипт... Только одно НО: определять версию в формате ipb 2.0.* давно все умеют по имеющимся директориям... Если бы скрипт умел поконкретнее версию узнавать-ему бы цены не было...