Outils pour utilisateurs

Outils du site


web:faille_comparaison_php

PHP : Faille de comparaisons

1.Présentation

Php est un langage qui utilise le typage ( int pour un entier , string pour une chaine de caractère …).

Quand il compare deux variables il peut le faire de plusieurs manières différentes :

La comparaison large ( == ) :

- Il compare la valeur en utilisant le transtypage : convertit une des deux valeurs (ce qui donne de nombreux faux positifs)

La comparaison stricte ( === ) :

- Il compare le type et la valeur

Les fonctions php :

- Elles ont été développées pour comparer les variables. ex :strcmp

Exemple de code vulnérable :

<?php
if($_POST['login']== "admin" && $_POST['password'] == "Super_p@ssword_3v3r!")){
			echo "Accès ok";
		}	
?>

Ou encore :

<?php
if(!strcmp($_POST['login'], "admin") && !strcmp($_POST['password'], "Super_p@ssword_3v3r!")){
			echo "Accès ok";
		}
?>

2.Exploitation

Le but est d'exploiter les faux positifs pour bypasser une authentification.

2.1 Méthode 1 : Comparaison large ( == )

Pour bypasser la comparaison large il faut regarder le tableau des comparaisons (cf source).

Une des lignes indique que “php” == 0 ⇒ renvoie true.

Nous allons envoyer dans le formulaire ces données:

login=0&password=0

Le php va l’interpréter de la manière suivante :

if (0==0 && 0==0)

Ce qui est toujours vrai.

2.2 Méthode 2 : fonction Strcmp

Pour bypasser la fonction strcmp il faut utiliser un tableau.

Nous allons envoyer dans le formulaire ces données:

login[]=abc&password[]=abc

Le php va générer une erreur mais va tout de même renvoyer true.

3.Comment se protéger

Pour se protéger il faut utiliser des comparaisons strictes ( === ).

Il faut aussi toujours filtrer les valeurs envoyées par l'utilisateur avant de les utiliser.

Source :

http://php.net/manual/fr/types.comparisons.php

http://danuxx.blogspot.fr/2013/03/unauthorized-access-bypassing-php-strcmp.html

web/faille_comparaison_php.txt · Dernière modification: 2016/07/04 08:38 (modification externe)