Faille NULL Byte
La finalité de cette faille est la même
que pour la faille include() de PHP, c'est-à-dire voir la source d'un script
interprété côté serveur, donc normalement inaccessible pour l'internaute moyen.
Bon, comment ça marche?
En fait, cette faille repose sur le fait
que les langages interprètent différemment une parcelle de code. Les langages
comme Perl, PHP ou ASP interprètent le NULL byte (%00, interprété en tant que
\0) en tant que donnée dans leur variable, tandis que le serveur lui-même l'interprète
en tant que fin d'un string.Bon, ça à l'air un peu barbare au premier abord,
mais c'est en fait très simple. Passons donc à la pratique...
Imaginons un site (http://www.site.com)
conçu en PHP. La page index.php a en tant que variable l'affichage des différentes
pages du site, par exemple la page images (index.php?page=images). En remplaçant
'images' par index.php%00.txt, la page index.php va être interprétée en tant
que fichier texte! Donc toute la source de l'index sera en clair en format txt!
Nous ne parlons ici que de l'index, donc imaginez ce qui pourrait être fait
sur d'autres pages bien plus importantes... En fait, la page est un script PHP
interprété en txt. On peut changer l'extension en htm ou html également.
http://www.site.com/index.php?page=index.php%00.txt
|_________|
fichier
php |________________|
interprétation
du serveur (=index.txt)
Comment remédier à cette faille?
Et bien c'est très simple: il faut annuler
l'exécution de NULL dans notre code.
- Perl
introduisez tout simplement cette ligne:
$insecure_data=~s/\0//g;
- PHP
ajouter cette ligne sur vos variables: $var=addslashes($var);Ceci
aura pour effet de rajouter un backslash(\) devant tous les simple et double
guillemets (' et "), les backslashes et les NULL. Cette technique permet
également d'éviter la faille SQL injection que je traiterai dans un autre article.Une
autre solution est celle d'utiliser la fonction file_exists(). Cette fonction
prend en compte le NULL byte. Ainsi, si on reprend l'exemple donné précédemment,
la requête va chercher le fichier index.php.txt qui bien évidemment n'existe
pas.
-ASP
utilisez la fonction replace comme suit:
'Déclaration des fonctions
var remplace,
aremplacer; 'Mettez ici votre nom de variable à la place de x var valeur = x ; 'L'élément
à remplacer est le NULL byte aremplacer = /\0/i; 'Mettez la chaîne de caractère
que vous voulez à la place de y remplace = valeur.replace(aremplacer, "y");
P41f0x -:-
Team SH Member
|