• 热门专题

PHPWeb木马扫描器增强版

作者:  发布日期:2014-04-11 20:55:07
Tag标签:扫描器  木马  
  •  

    ‍<?php
    header('content-type:text/html;charset=gbk');
    set_time_limit(0);//防止超时
    /**
    *
    * php目录扫描监控增强版
    *
    * @version 1.0
    *
    下面几个变量使用前需要手动设置
    *
    **/
    /*===================== 程序配置 =====================*/
    $pass="test";//设置密码
    $jkdir="."; //设置监控扫描的目录,当前目录为'.',上一级目录为'..',也可以设置绝对路径,后面不要加斜杠,默认为当前目录
    $logfilename="./m.log";//设置存储log的路径,可以放置在任意位置
    $exclude=array('data','images');//排除目录
    $danger='eval|cmd|passthru|gzuncompress';//设置要查找的危险的函数 以确定是否木马文件
    $suffix='php|inc';//设置要扫描文件的后缀
    /*===================== 配置结束 =====================*/
    
    $filename=$_GET['filename'];
    $check=$_GET['check'];
    $jumpoff=false;
    $url = $_SERVER['PHP_SELF'];
    $thisfile = end(explode('/',$url));
    $jump="{$thisfile}|".implode('|',$exclude);
    $jkdir_num=$file_num=$danger_num=0;
    define('M_PATH',$jkdir);
    define('M_LOG',$logfilename);
    if ($check=='check')
    {
    $safearr = explode("|",$jump);
    $start_time=microtime(true);
    safe_check($jkdir);
    $end_time=microtime(true);
    $total=$end_time-$start_time;
    $file_num=$file_num-$jkdir_num;
    $message= " 文件数:".$file_num;
    $message.= " 文件夹数:".$jkdir_num;
    $message.= " 可疑文件数:".$danger_num;
    $message.= " 执行时间:".$total;
    echo $message;
    }else{
    if ($_GET['m']=="del") Delete();//处理文件删除
    //读取文件内容
    if(isset($_GET['readfile'])){
    //输出查看密码,密码校验正确以后输出文件内容
    if(empty($_POST['passchack'])){
       echo"<form id="form1" name="form1" method="post">"
        . " <label>pass"
        . " <input type="text" name="passchack" />"
        . " </label>"
        . " <input type="submit" name="Submit" value="提交" />"
        . "</form>"
       ."";
       exit;
    }elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){
       $code=file_get_contents($_GET['readfile']);
       echo"<textarea name="code" cols="150" rows="30" id="code" style='width:100%;height:450px;background:#cccccc;'>{$code}</textarea>";
       exit;
    }else{
       exit;
    }
    
    }else{
    record_md5(M_PATH);
    if(file_exists(M_LOG)){
            $log = unserialize(file_get_contents(M_LOG));
    }else{
            $log = array();
    }
    
    if($_GET['savethis']==1){
    //保存当前文件md5到日志文件
    @unlink(M_LOG);
    file_put_contents(M_LOG,serialize($file_list));
    echo "<a href='scandir.php'>保存成功!点击返回</a>";
    exit;
    }
    if(empty($log)){
    echo "当前还没有创建日志文件!点击[保存当前]创建日志文件!";
    }else{
    if($file_list==$log){
       echo "本文件夹没有做过任何改动!";
    }else{
       if(count($file_list) > 0 ){
        foreach($file_list as $file => $md5){
        if(!isset($log[$file])){
         echo "新增文件:<a href={$file} target='_blank'>".$file."</a>"." 创建时间:".date("Y-m-d H:i:s",filectime($file))." 修改时间:".date("Y-m-d H:i:s",filemtime($file))." <a href=?readfile={$file} target='_blank'>源码</a><a href='?m=del&filename={$file}' target='_blank'>删除</u></a><br />";
        }else{
         if($log[$file] != $md5){
         echo "修改文件:<a href={$file} target='_blank'>".$file."</a>"." 创建时间:".date("Y-m-d H:i:s",filectime($file))." 修改时间:".date("Y-m-d H:i:s",filemtime($file))." <a href=?readfile={$file} target='_blank'>源码</a><br />";
    
         unset($log[$file]);
         }else{
         unset($log[$file]);
         }
        }
        }
       }
       if(count($log)>0){
        foreach($log as $file => $md5){
        echo "删除文件:<a href={$file} target='_blank'>".$file."</a><br />";
        }
       }
        }
    }
    }
    }
    
    //计算md5
    function record_md5($jkdir){
            global $file_list,$exclude;
            if(is_dir($jkdir)){
                    $file=scandir($jkdir);
                    foreach($file as $f){
                            if($f!='.' && $f!='..' && !in_array($f, $exclude)){
                                    $path = $jkdir.'/'.$f;
                                    if(is_dir($path)){
                                            record_md5($path);
                                    }else{
                                            $file_list[$path]=md5_file($path);
                                    }
                            }
                    }
            }
    }
    
    function Safe_Check($jkdir)//遍历文件
    {
    global $danger ,$suffix ,$jkdir_num ,$file_num ,$danger_num;
    
    ) or die('文件夹不存在') ;
    while ($file=$hand->read())
    {
        $filename=$jkdir.'/'.$file;
        if (!$jumpoff) {
       if(Jump($filename))continue;
        }
        if(@is_dir($filename) && $file != '.' && $file!= '..'&& $file!='./..')
        {   $jkdir_num++;
        Safe_Check($filename);
        }
        if (preg_match_all ("/.($suffix)/i",$filename,$out))
        {
    
       $str='';
       $fp = @fopen($filename,'r')or die('没有权限');
       while(!feof($fp))
       {
       $str .= fgets($fp,1024);
       }
       fclose($fp);
       if( preg_match_all ("/($danger)[ 
    	]{0,}([[(])/i",$str,$out))
       {
       echo "<font color='green' style='font-size:14px'>可疑文件:{$filename}</font>"." 创建时间:".date("Y-m-d H:i:s",filectime($filename))." 修改时间:".date("Y-m-d H:i:s",filemtime($filename))." <a href='?readfile={$filename}' target='_blank'><u>查看代码</u></a> <a href='?m=del&filename=$filename' target='_blank'>删除</u></a><br>";
       $danger_num++;
       }
        }
        $file_num++;
    }
    }
    function Edit()//查看可疑文件
    {
    global $filename;
    $filename = str_replace("..","",$filename);
    $file = $filename;
    $content = "";
    if(is_file($file))
    {
        $fp = fopen($file,"r")or die('没有权限');
        $content = fread($fp,filesize($file));
        fclose($fp);
        $content = htmlspecialchars($content);
    
    }
    echo "<textarea name='str' style='width:100%;height:450px;background:#cccccc;'>$content</textarea>
    ";
    exit();
    }
    function Delete()//删除文件
    { global $filename,$pass;
    if(empty($_POST['passchack'])){
        echo"<form id="form1" name="form1" method="post">"
       . " <label>pass"
       . " <input type="text" name="passchack" />"
       . " </label>"
       . " <input type="submit" name="Submit" value="提交" />"
       . "</form>"
        ."";
        exit;
    }elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){
       (is_file($filename))?($mes=unlink($filename)?'删除成功':'删除失败 查看权限'):'';
       echo $mes;
       exit();
    }else{
       echo '密码错误!';
       exit;
    }
    }
    function Jump($file)//跳过文件
    {
    global $jump,$safearr;
    if($jump != '')
    {
        foreach($safearr as $v)
        {
       if($v=='') continue;
       if( eregi($v,$file) ) return true ;
        }
    }
    return false;
    }
    ?>
    <a href="scandir.php">[查看文件改动]</a>|<a href="scandir.php?savethis=1">[保存当前文件指纹]</a>|<a href="scandir.php?check=check">[扫描可疑文件]</a>


延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规