- header('content-type:text/html;charset=gbk')
- set_time_limit(0);//시간 초과 방지
- /**
- *
- * php 디렉토리 스캐닝 모니터링 강화 버전
- *
- * @version 1.0
- *
- 사용하기 전에 다음 변수를 수동으로 설정해야 합니다
- *
- **/
- /*===================== 프로그램 구성 ============ = ========*/
- $pass="test";//비밀번호 설정
- $jkdir="."; //스캐닝을 모니터링할 디렉터리를 설정합니다. ', 위의 첫 번째 수준 디렉터리는 '..'입니다. 절대 경로를 설정할 수도 있습니다. 뒤에 슬래시를 추가하지 마세요. 기본값은 현재 디렉터리입니다.
- $logfilename="./m.log"; //로그를 저장할 경로를 설정하세요. 어디에나 배치할 수 있습니다.
- $exclude=array('data','images');//디렉터리 제외
- $danger='eval|cmd|passthru| gzuncompress';//트로이 목마 파일이 있는지 확인하기 위해 find에 위험한 기능을 설정합니다.
- $suffix='php|inc';//검사할 파일의 접미사를 설정합니다
- /*===== ================ 구성 끝 ======================*/
-
- $filename= $_GET['filename'];
- $check=$_GET[ 'check'];
- $jumpoff=false
- $url = $_SERVER['PHP_SELF']; end(explode('/',$url));
- $ jump="{$thisfile}|".implode('|',$exclude)
- $jkdir_num=$file_num=$danger_num=0 ;
- define('M_PATH',$jkdir);
- 정의('M_LOG',$logfilename)
- if ($check=='check')
- {
- $safearr = 폭발("|",$jump);
- $start_time(true);
- safe_check($jkdir)
- $end_time=microtime(true); $start_time;$file_num=$file_num-$jkdir_num;
- $message= "파일 수:".$file_num
- $message.= "폴더 수:".$jkdir_num; >$message.= "의심스러운 파일 수:".$danger_num;
- $message.= "실행 시간:".$total;
- echo $message; $_GET['m']=="del") Delete();// 파일 삭제 처리
- //파일 내용 읽기
- if(isset($_GET['readfile'])){
- //뷰 비밀번호를 출력하고, 비밀번호 확인이 맞는 후 파일 내용을 출력
- if (empty($_POST['passchack'])){
- echo"
- . "
- " " /label>"
- . " "
- . ""
- ."";
- 종료
- }elseif(isset($_POST['passchack'])&& $_POST['passchack']==$pass){
- $code=file_get_contents($_GET['readfile']) ;
- echo"";
- 종료;
- }else{
- 종료;
- }
-
- }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 "저장이 완료되었습니다! 돌아가려면 클릭하세요";
- 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 "새 파일: ".$file.""." 생성 시간: " . date("Y-m-d H:i:s",filectime($file))." 수정 시간: ".date("Y-m-d H:i:s",filemtime($file))." 소스 코드삭제< /a> ;
";
- }else{
- if($log[$file] != $md5){
- echo "파일 수정: ".$file.""." 생성 시간: ".date("Y-m-d H:i:s",filectime($file))." ("Y-m-d H:i:s",filemtime($file))." 소스 코드
- unset($log[$file]);
- }else{
- unset($log[$file])
- }
- }
- }
- if(count($log)>0){
- foreach($log as $file => $md5){
- echo "파일 삭제: ".$file."
";
- }
- }
- }
- }
- }
- }
-
- //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
-
- ) 또는 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 "의심스러운 파일: {$filename}" ." 생성 시간: ".date("Y-m-d H:i:s",filectime($filename))." 수정 시간: ".date("Y-m-d H:i:s",filemtime($filename))." 코드 보기 삭제
";
- $danger_num ;
- }
- }
- $file_num ;
- }
- }
- function Edit()//의심스러운 파일 보기
- {
- global $filename;
- $filename = str_replace("..","",$filename); $filename;
- $content = "";
- if(is_file($file))
- {
- $fp = fopen($file,"r")or die('권한 없음') ;
- $content = fread($fp,filesize($file));
- fclose($fp)
- $content = htmlspecialchars($content)
-
- echo "rn"
- exit() >}
- 함수 삭제()//파일 삭제
- { global $filename,$pass
- if(empty($_POST['passchack'])){
- echo "
- . "
- " " > . " "
- " "
- . ."";
- 종료
- }elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){
- (is_file($filename))?($mes=unlink($filename)?' 삭제 성공 ':'삭제 권한 보기 실패'):'';
- echo $mes;
- exit()
- }else{
- echo '비밀번호가 잘못되었습니다! ';
- 종료;
- }
- }
- function Jump($file)//파일 건너뛰기
- {
- global $jump,$safearr
- if($jump ! = '')
- {
- foreach($safearr as $v)
- {
- if($v=='') continue
- if( eregi($v,$file ) ) true를 반환합니다.
- }
- }
- false를 반환합니다.
- }
- ?>
- [파일 변경 사항 보기]< ; /a>|[현재 파일 지문 저장]|[ 의심스러운 파일 검사]
코드 복사
|