X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Добавить ответ в эту тему
> Найти бекдор за 60 секунд
MetalMessiah
MetalMessiah
Topic Starter сообщение 26.2.2021, 22:27; Ответить: MetalMessiah
Сообщение #1


Всем привет.

Наверное, не раз задавали себе вопрос: а можно ли доверять тому или иному сайту, скачивать с него скрипты и устанавливать их себе на сайт? Как правило, правильный ответ на этот вопрос - НЕТ. Большинство сайтов, раздающих дистрибутивы движков или бесплатные шаблоны, вшивают в них скрытые ссылки или даже шеллы.

Где-то раз в 1-2 года мне подкидывают задачу создания сайта с нуля на базе какого-то готового движка. Понятное дело, что движки бывают разные, а источники не всегда доверенные. Некоторые настолько быстро обновляются, что образец 2-летней давности уже никому не нужен, и каждый раз нужно проверять исходники чуть ли не руками на предмет наличия всякой дряни.

Когда-то я это делал в полу-ручном режиме сравнением каталогов. Надоело. Вот на коленке накидал скрипт, который и выкладываю в паблик. Новичков просьба не спрашивать как им пользоваться, в коде все интуитивно понятно, нужно просто иметь базовые знания PHP.

Суть задачи: качаете скрипт / шаблон / что-то еще из 3-4 разных источников, распаковываете архивы на виртуальный хост в соседние каталоги так чтобы структура папок в них была одинакова (т.е не было так что source1 содержит файлы напрямую, а в другом каталоге файлы лежат по пути source2/blabla/) и запускаете.

Скрипт вам выдает табличку файлов, хеши которых в разных источниках отличаются, а ниже списком файлы, которые присутствуют не во всех источниках.

Писалось на коленке где-то 10 минут, прошу строго не судить
Код
<?php
set_time_limit(0);
$builds = array(
    'source1',
    'source2',
    'source3',
//    'source4',
);

$allfiles = array();
$filenum = array();
foreach ($builds as $build)
{
    $files[$build] = ListFiles("./".$build);
    echo "<b>".$build."</b> - ".count($files[$build])." files<br>\r\n";
    foreach ($files[$build] as $fn)
    {
        $fn2 = substr($fn, strlen($build)+3);
        if (!isset($allfiles[$fn2]))
        {
            $allfiles[$fn2] = array();
            $filenum[$fn2]=1;
        } else $filenum[$fn2]++;
        $hash = md5_file($fn, false);
        if (!in_array($hash, $allfiles[$fn2])) $allfiles[$fn2][] = $hash;
    }
}
echo "<table border=1>";
foreach ($allfiles as $fn2 => $hashes)
{
    if (count($hashes)>1)
    {
        echo "<tr><td>".$fn2."</td>";
        foreach ($hashes as $hash) echo "<td>".$hash."</td>";
        echo "</tr>\r\n";
    }
}
echo "</table>";
asort($filenum);
foreach ($filenum as $fn=>$num)
if ($num!=count($builds)) echo "<b>".$fn."</b> ".$num." from ".count($builds)."<br>\r\n";


function ListFiles($dir)
{
    if($dh = opendir($dir)) {
        $files = Array();
        $inner_files = Array();
        while($file = readdir($dh))
        {
            if($file != "." && $file != ".." && $file[0] != '.')
            {
                if(is_dir($dir . "/" . $file))
                {
                    $inner_files = ListFiles($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files);
                } else
                {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }
        closedir($dh);
        return $files;
    }
}
?>

Может кому будет полезно. Файлы, которые различаются, нужно уже смотреть ручками (но их, как правило, полтора штуки).

P.S. и да, если вы недавно ставили себе DLE 14.1 - посмотрите, нет ли у вас случайно файлика /engine/ajax/js.php, который раздается в архивах одним из сайтов из топ-5 Google.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
NormanSky
NormanSky
сообщение 26.2.2021, 22:31; Ответить: NormanSky
Сообщение #2


Цитата(MetalMessiah @ 26.2.2021, 22:27) *
/engine/ajax/js.php, который раздается в архивах одним из сайтов из топ-5 Google


Там бекдор закопан?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MetalMessiah
MetalMessiah
Topic Starter сообщение 26.2.2021, 22:32; Ответить: MetalMessiah
Сообщение #3


Шелл с легкой обфускацией. Удалять нафиг при обнаружении. А еще лучше заменить логом-honeypot'ом и списки адресов сразу в deny своего nginx сервера.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Osipec
Osipec
сообщение 27.2.2021, 19:07; Ответить: Osipec
Сообщение #4


Цитата(MetalMessiah @ 26.2.2021, 22:27) *
Файлы, которые различаются, нужно уже смотреть ручками (но их, как правило, полтора штуки).


Через TextDiff можно отловить конкретную разницу в файлах
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MetalMessiah
MetalMessiah
Topic Starter сообщение 27.2.2021, 21:06; Ответить: MetalMessiah
Сообщение #5


Ну консольная fc или TextDiff это уже детали, на каждый файл отдельно. При желании можно в этот скрипт в цикле дописать вызов с выводом различий в %filename%.php-diff.txt.

Сообщение отредактировал MetalMessiah - 27.2.2021, 21:07
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Добавить ответ в эту тему
Быстрый ответ
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как найти владельца домена?
12 Coffee 1337 28.3.2021, 22:12
автор: _fan_
Открытая тема (нет новых ответов) Как найти хорошую площадку в Collaborator?
Поиск выгодных площадок для размещения.
25 press74 1923 13.3.2021, 20:00
автор: gaoduber
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 6961 24.7.2020, 17:02
автор: -JamesSmips-
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыОткуда найти целевой трафик на сайт с доской объявлений.
6 Markuss 656 8.11.2019, 9:50
автор: Markuss
Горячая тема (нет новых ответов) Тем, кто хочет получить отличные тексты, но не может найти хорошего копирайтера
30 Марина123 5617 27.7.2019, 15:43
автор: Марина123


 



RSS Текстовая версия Сейчас: 15.4.2021, 18:53
Дизайн