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

  #12  
Старый 11.09.2009, 02:05
SQLHACK
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
С нами: 10326626

Репутация: 1617


По умолчанию

Вот вам мною написаная проверялка.

Вообще она рекурсивно проверяет сразу все файлы в папке и позволяет сильно экономить время при разборе двига. Ищет злые функции и выдает HTML отчет. пользуясь им как картой можно быстро осмотреть весь двиг на простые косяки.

PHP код:
<?php

set_time_limit
(0);

$paths = array();
$exttocheck = array("php""php3""php4""php5""php6""inc");
$faults = array("codeexec""including""files""globalization""phpinfo");
$dir "путь со слешом на конце до папки";
read($dir);

foreach(
$paths as $path){
    
$r strrpos($path".");
    
$ext substr($path$r 1);
    if(
in_array($ext$exttocheck)){
        
GenerateHtmlOut($pathcheckfile($path));
    }
}

function 
checkfile($path){
    global 
$faults;
    
$errors = array(
                    
"codeexec" => array(
                            
"#^.*?[^\w]array_map[\s]*\([^,]*\\$[^,],.+\)[\s]*;.*$#im",
                            
"#^.*?([^\w]array_filter|[^\w]array_reduce|[^\w]array_walk)[\s]*\(.+?,.*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]assert[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w](call_user_func|call_user_func_array)[\s]*\([^,]*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]dl[\s]*\(.*?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]create_function|[^\w]eval|[^\w]exec|[^\w]passthru|[^\w]shell_exec|[^\w]system)[\s]*\([^,]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]preg_replace[\s]*\(([\"'])(.)(.*)\\2([imxsu]*)e([imxsu]*)\\1[\d\D]+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]preg_replace_callback[\s]*\(([\"'])(.)(.*)\\2(.*)\\1[^)]+\)[\s]*;.*$#im"
                        
),
                    
"including" => array(
                            
"#^.*?([^\w]include|[^\w]include_once|[^\w]require|[^\w]require_once|[^\w]virtual)[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im"
                        
),
                    
"files" => array(
                            
"#^.*?[^\w]copy[\s]*\([^,]*\\$[^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]copy[\s]*\([^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]copy[\s]*\([^,]*\\$[^,]+,[^)]+\)[\s]*;.*$#im",
                            
"#^.*?[^\w]fsockopen[\s]*\([^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]curl_init[\s]*\(.*?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]file|[^\w]file_get_contents|[^\w]mkdir|[^\w]opendir|[^\w]rmdir|[^\w]readfile|[^\w]highlight_file|[^\w]unlink)[\s]*\(.*?\\$.+?\)[\s]*;.*$#im"
                        
), 
                    
"globalization" => array(
                            
"#^.*?[^\w]extract[\s]*\([^,]*\\$[^,]+(,((.*\\$.*?)|([\s]*EXTR_OVERWRITE[\s]*)))?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]parse_str|[^\w]mb_parse_str)[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]import_request_variables\([^)]*\)[\s]*;.*$#im"
                        
),
                    
"phpinfo" => array(
                            
"#^.*?[^\w]phpinfo\(\)[\s]*;.*$#im"
                        
)
                    );
    
$possible = array();
    
$content file_get_contents($path);
    foreach(
$faults as $fault){
        foreach(
$errors[$fault] as $cd){
            
preg_match_all($cd$content$matchPREG_OFFSET_CAPTURE);
            
//var_dump($match);
            
foreach($match[0] as $m){
                
$line substr_count(substr($content0$m[1]), "\n")+1;
                
$possible[$fault][] = array("line" => $line"str" => $m[0]);
            }
        }
    }
    
//var_dump($possible);
    
return $possible;

}

function 
GenerateHtmlOut($path$possible){
    global 
$faults;
    echo 
"<html><body>\r\n";
    echo 
"<table width='100%'><tr>\r\n";
    echo 
"<td colspan='2' align='center' bgcolor='#BBBBFF'><b><strong>File: $path</strong></b></td></tr>\r\n";
    foreach(
$faults as $fault){
    echo 
"<td colspan='2' bgcolor='#CCCCFF'><b>Possible $fault danger place founds ".count($possible[$fault])."</b></td></tr>\r\n";
        if(
count($possible[$fault])>0){
            foreach(
$possible[$fault] as $mb){
                echo 
"<tr><td valign='top' bgcolor='#DDDDDD'>".$mb["line"].": </td><td bgcolor='#DDDDDD' valign='top'>".htmlspecialchars(nl2br($mb['str']))."</td></tr>\r\n";
            }
        }
    }
    echo 
"</body></html>";
}

function 
read($dir){
    global 
$paths;
    
$r opendir($dir);
    if(!
r){
        return 
false;
    }
    while(
$item readdir($r)){
        if(
$item != "." && $item != ".."){
            if(!
is_dir($dir.DIRECTORY_SEPARATOR.$item)){
                
$paths[] = realpath($dir.DIRECTORY_SEPARATOR.$item);
            }else{
                
read($dir.DIRECTORY_SEPARATOR.$item.DIRECTORY_SEPARATOR);
            }
        }
    }
}


?>
__________________
Бойтесь своих желаний. Они могут исполниться....

...О-о-о-о, ушами не услышать, глазами не понять!
 
Ответить с цитированием