PHP TYPE JUGGLING

1. LE PROBLÈME DE STRCMP()

En PHP, la fonction strcmp($a, $b) compare deux chaînes de caractères.

Le code vulnérable ressemble souvent à ça :

if (strcmp($_POST['password'], $real_password) == 0) { echo "Access Granted!"; }

2. L'EXPLOIT (MAGIC TRICK)

Si on envoie un Tableau (Array) au lieu d'une chaîne à strcmp(), la fonction ne sait pas quoi faire et retourne NULL (avec un Warning).

Et devinez quoi ? En PHP (avant la version 8), avec l'opérateur de comparaison faible == :

NULL == 0 // TRUE !!!

Donc : strcmp(Array, String) devient NULL, qui est égal à 0, ce qui valide la condition "Mot de Passe Correct" !

3. COMMENT FAIRE ?

Il suffit de manipuler le formulaire HTML ou la requête HTTP pour envoyer un tableau.

Au lieu d'envoyer :

password=monS3perMotDePasse

Envoyez ceci (en modifiant le nom du champ via l'inspecteur) :

password[]=nimportequoi

Le [] après le nom transforme la variable en tableau côté serveur.




RETOUR AU LAB