Взлом базы данных из за LFI

в 7:19, , рубрики: lfi, информационная безопасность, метки:

Наверное ни для кого не секрет, что плохой код может привести к печальным последствиям. Особенно это касается сайтов. Недавно, читая статью о том, какие ошибки делают PHP-программисты, и какие уязвимости от этого появляются на сайте, наткнулся на Local File Inclusion. Меня эта уязвимость очень заинтересовала и я решил что-то поломатьпо-подробней изучить её.

После не долгих поисков наодном из форумов нашел ссылку на немецкий сайт http://www.gamecaptain.de. Сразу были замечены интересные параметры в адресной строке

image

Попробуем что-то из этого извлечь. Для начала получим исходный код index.php

image

Мы использовали преобразовывающие фильтры. Пара движений и…

image

… исходный код файла у нас!

Разберем, что у нас в этом файле. Сразу начал искать участок, в котором немецкие программисты допустили ошибку. Поиски были недолгие


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

image

декодируем полученый base-64 набор символов и получаем информацию для подключения к базе данных

image

Коннектимся…

image

Всё! База в наших руках.

Скажу честно, мною аккуратно была слита вся база( которая при том весила ~480 мегабайт ) и отправлено сообщение администрации. Надеюсь, они её закроют.

P.S. Хотя мне еще до сих пор непонятно, почему сайт с такой дырой до сих еще жив. Причем, как видно во размеру таблиц, сайт не из малопосещаемых.

Автор: boddicheg


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js