Наверное ни для кого не секрет, что плохой код может привести к печальным последствиям. Особенно это касается сайтов. Недавно, читая статью о том, какие ошибки делают PHP-программисты, и какие уязвимости от этого появляются на сайте, наткнулся на Local File Inclusion. Меня эта уязвимость очень заинтересовала и я решил что-то поломатьпо-подробней изучить её.
После не долгих поисков наодном из форумов нашел ссылку на немецкий сайт http://www.gamecaptain.de. Сразу были замечены интересные параметры в адресной строке
Попробуем что-то из этого извлечь. Для начала получим исходный код index.php
Мы использовали преобразовывающие фильтры. Пара движений и…
… исходный код файла у нас!
Разберем, что у нас в этом файле. Сразу начал искать участок, в котором немецкие программисты допустили ошибку. Поиски были недолгие
if(!isset($file)) {
if(isset($_POST["file"])) {
$file = $_POST["file"];
} else if (isset($_GET["file"])) {
$file = $_GET["file"];
} else {
if(!isset($sitearea) || $sitearea == "Magazin") {
$file="aktuell.php";
} else {
$file="aktuell_downloads.php";
}
}
}
Еще один яркий пример того, как не надо подключать файлы.
Дальше, конечно, я начал искать файл с соединением с базой данных. Очевидно, что это строчка
require("includes/connect.inc.php");
Проделываем ту же операцию, которую мы делали для index.php, для includes/connect.inc.php
декодируем полученый base-64 набор символов и получаем информацию для подключения к базе данных
Коннектимся…
Всё! База в наших руках.
Скажу честно, мною аккуратно была слита вся база( которая при том весила ~480 мегабайт ) и отправлено сообщение администрации. Надеюсь, они её закроют.
P.S. Хотя мне еще до сих пор непонятно, почему сайт с такой дырой до сих пор еще жив. Причем, как видно во размеру таблиц, сайт не из малопосещаемых.
Автор: boddicheg