微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP Web木马扫描器

‍<?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" 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",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)[ rnt]{0,}([[(])/i",$str,$out))

   {

   echo "<font color='green' 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' width:100%;height:450px;background:#cccccc;'>$content</textarea>rn";

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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐