Прочитал на ачате уязвимость с названием "раскрытие путей", долго искал в поисках ответа,что за зверь раскрытие путей
Степень опастности: средняя
Уязвимость заключается в отсутствии фильтрации входного параметра "dle_skin" в файле init.php и позволяет удалённому пользователю добиться вывода ошибки функции, соответственно увидев пути к корню сайта.
что позволяет раскрытие пути взломщику?
ответ прост, взлом через соседний хост, т.е. если сайт находится на шаред хостинге, шанс на взлом увеличивается
init.php
Достаточно в бразере найти менеджер куки и подменить куку dle_skin параметром ../ и вы получите сие раскрытый путь :)
Исправить данную уязвимость просто
открываем index.php
перед define ( 'DATALIFEENGINE', true ); вставляем кодик
коментирую код: если есть какие либо вхождения набора символов .. или ../ то удаляем куки dle_skin
Warning: include_once(/home/.../public_html/templates/..//login.tpl): failed to open stream: No such file or directory in /home/.../public_html/engine/init.php on line 272 Warning: include_once(): Failed opening '/home/.../public_html/templates/..//login.tpl' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/.../public_html/engine/init.php on line 272 Невозможно загрузить шаблон: shortstory.tpl
что позволяет раскрытие пути взломщику?
ответ прост, взлом через соседний хост, т.е. если сайт находится на шаред хостинге, шанс на взлом увеличивается
init.php
} elseif (isset($_COOKIE['dle_skin']) AND $_COOKIE['dle_skin'] != '') {
if (@is_dir(ROOT_DIR.'/templates/'.$_COOKIE['dle_skin']))
{
$config['skin'] = $_COOKIE['dle_skin'];
}
}
...
$tpl->dir = ROOT_DIR.'/templates/'.$config['skin'];
...
include_once $tpl->dir.'/login.tpl';
if (@is_dir(ROOT_DIR.'/templates/'.$_COOKIE['dle_skin']))
{
$config['skin'] = $_COOKIE['dle_skin'];
}
}
...
$tpl->dir = ROOT_DIR.'/templates/'.$config['skin'];
...
include_once $tpl->dir.'/login.tpl';
Достаточно в бразере найти менеджер куки и подменить куку dle_skin параметром ../ и вы получите сие раскрытый путь :)
Исправить данную уязвимость просто
открываем index.php
перед define ( 'DATALIFEENGINE', true ); вставляем кодик
if (eregi("..", $_COOKIE['dle_skin']) or eregi("../", $_COOKIE['dle_skin'])) { unset($_COOKIE['dle_skin']); }
коментирую код: если есть какие либо вхождения набора символов .. или ../ то удаляем куки dle_skin