Показать сообщение отдельно

  #244  
Старый 10.12.2007, 01:05
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

Вот скрипт для защиты от измененных/удаленных файлов и залитых веб шеллов, не панацея но все же.

Скрипт сканирует все файлы/папки начиная от папки в которой лежит скрипт и пишет результат в файл data.txt. В котором будут хранится имена каталогов+все файлы в этом каталоге с их контрольной суммой.

Ну а затем скрипт сверяется со снимком и на основании отсутствия файла/измененной контрольной суммы/отсутствия записи о файле делает выводы о том что файл был удален/изменен/создан. Также заодно и происходит сканирование на созданные/удаленные папки...

Собственно например создали сайт, довели до ума - он работает, делаем снимок, сливаем с хоста data.txt и сохраняем этот файл у себя на компе(с хоста удаляем!)...

Затем через месяцок узнаем что этот сайт взломали, ну а хацкеров есть привычка еще и лить веб шелл, и иногда троянить скрипты. Ну чтобы не парится и не просматривать каждый файл, мы сканируем скриптом хост, и он выдаст все веб шеллы с головой
PHP код:
<?php 
set_time_limit
(0);
ignore_user_abort(true);
function 
new_scan_dir($catalog){
    
$cat_file='';
    
$cat_file[$catalog]='';
    
$dir opendir ($catalog);
    
$i=0;
    
$filesh='';
    while (
$file readdir ($dir)){
        if((
$file!='..')&&($file!='.')){
            if(
filetype($catalog.'/'.$file)==='file')$cat_file[$catalog].=urlencode($file).':'.md5(implode('',file($catalog.'/'.$file))).'>';
            if((
filetype($catalog.'/'.$file)==='dir')){
                foreach(
new_scan_dir($catalog.'/'.$file) as $key => $value){
                    
$cat_file[$key]=$value;
                }
            }
            
$filesh.=$catalog.'/'.$file.'
'
;
            if(
$i===5){
                echo(
$filesh);
                
flush();
                
$filesh='';
                
$i=0;
            }
            
$i++;
        }
    }
    
closedir ($dir);
    return 
$cat_file;
}

function 
scan_dir($all_files,$catalog){
    
$ret='';
    
$ent='
'
;
    if(
file_exists($catalog)){
        if(
array_key_exists($catalog$all_files)){
            if(!empty(
$all_files[$catalog])){
                
$now_dir1=explode('>',$all_files[$catalog]);
                foreach(
$now_dir1 as $value){
                    
$now_dir2=explode(':',$value);
                    
$now_dir[urldecode($now_dir2[0])]=$now_dir2[1];
                }
                foreach(
$now_dir as $key => $value){
                    if(
file_exists($catalog.'/'.$key)){
                        if(
md5(implode('',file($catalog.'/'.$key)))!=$value)$ret.='Файл "'.$catalog.'/'.$key.'" был изменен.'.$ent;
                    }else 
$ret.='Файл "'.$catalog.'/'.$key.'" был удаленн.'.$ent;
                }
                
$dir opendir ($catalog);
                while (
$file readdir ($dir)){
                    if((
$file!='..')&&($file!='.')){
                        if((
filetype($catalog.'/'.$file)==='dir'))$ret.=scan_dir($all_files,$catalog.'/'.$file);
                        if((
filetype($catalog.'/'.$file)==='file')){
                            if(!
array_key_exists($file$now_dir))$ret.='Файл "'.$catalog.'/'.$file.'" был создан'.$ent;
                        }
                    }
                }
                
closedir ($dir);
            }else{
                
$dir opendir ($catalog);
                while (
$file readdir ($dir)){
                    if((
$file!='..')&&($file!='.')){
                        if((
filetype($catalog.'/'.$file)==='dir')){
                            if(!
array_key_exists($catalog.'/'.$file$all_files))$ret.='Папка "'.$catalog.'/'.$file.'" была создана'.$ent;
                            else 
$ret.=scan_dir($all_files,$catalog.'/'.$file);
                        }
                        if((
filetype($catalog.'/'.$file)==='file'))$ret.='Файл "'.$catalog.'/'.$file.'" был создан'.$ent;
                    }
                }
                
closedir ($dir);
            }
        }else 
$ret.='Папка "'.$catalog.'" была созданна.'.$ent;
    }else 
$ret.='Папка "'.$catalog.'" была удаленна.'.$ent;
    return 
$ret;
}

function 
scan_d_dir($all_files){
    
$ret='';
    
$ent='
'
;
    foreach(
$all_files as $key => $value){
        if(!
file_exists($key))$ret.='Папка "'.$key.'" была удалена'.$ent;
    }
    return 
$ret;
}

$ent='
'
;
if(!empty(
$_GET['do'])){
    if(
$_GET['do']==='new'){
        echo(
'<pre>');
        echo(
'Создание снимка...'.$ent);
        
$save_text='';
        foreach(
new_scan_dir('.') as $key => $value){
            
$save_text.=urlencode($key).'=>'.substr($value,0,strlen($value)-1).$ent;
        }
        
$save_text=substr($save_text,0,strlen($save_text)-2);
        
$file fopen ('data.txt','w');
        
fputs $file$save_text);
        
fclose ($file);
        echo(
'Снимок сделан...');
        echo(
'</pre>');
    }elseif(
$_GET['do']==='scan'){
        if(
file_exists('data.txt')){
            
$files=explode($ent,implode('',file('data.txt')));
            foreach(
$files as $value){
                
$now_dir=explode('=>',$value);
                
$all_files[urldecode($now_dir[0])]=$now_dir[1];
            }
            echo(
'<pre>'.scan_dir($all_files,'.').scan_d_dir($all_files).'</pre>');
        }
    }
}
echo(
'<hr>
<input type="submit" value="Сделать снимок" onclick="document.location.replace(\'?do=new\')"><br>
<input type="submit" value="Сканировать" onclick="document.location.replace(\'?do=scan\')">'
);
?>
Вот полученный снимок:
Код:
.=>index.php:44ecd2d513e0faec7acfff7f849f7e70>data.txt:c1fe1feab40f6853be5d0555f33d596c
.%2F1=>1%F2.txt:d41d8cd98f00b204e9800998ecf8427e
.%2F1%2F2=>
.%2F1%2F2%2F3=>
.%2F1%2F2%2F3%2F4=>
.%2F1%2F2%2F3%2F4%2F5=>
.%2F1%2F2%2F3%2F4%2F5%2F6=>1.txt:e11170b8cbd2d74102651cb967fa28e5
ЗЫ Люди кто поюзал/юзает напишите нравится оно вам или нет какие минусы/плюсы, только без наркоманской критики
__________________
Кто я?..

Последний раз редактировалось I-I()/Ib; 10.12.2007 в 01:09..
 
Ответить с цитированием