PHP GET injection de tableau de variables
J'ai appris récemment qu'il est possible d'injecter des tableaux en PHP OBTENIR des variables pour effectuer l'exécution de code?
.php?a[]=asd&a[]=asdasd&b[]=$a
Qui a été l'exemple que j'ai reçu. Je n'ai aucune idée de comment il fonctionne et je me demandais si cela est encore possible?
source d'informationauteur dave
Vous devez vous connecter pour publier un commentaire.
PHP va analyser la chaîne de requête, et d'injecter de ces valeurs dans le
$_GET
super-réseau mondial (même pour$_POST
si cela a été fait dans un formulaire à l'aide de POST, d'ailleurs).Dans votre cas, le
$_GET
tableau contiendra ceci :Chaque valeur transmise dans la chaîne de requête sera mise en PHP dans le
$_GET
tableau, la création de sous-groupes si nécessaire, lorsqu'il y a[]
utilisé dans la chaîne de requête.Mais cela ne veut pas causer toute sorte de "code d'exécution" : tant que vous traitez avec entrée correctement (c'est à dire ne pas faire confiance à l'entrée et à l'utilisation
eval
sur elle, ou n'importe quelle mauvaise idée comme cela)il n'y a pas de risque d'injection de code.Si vous n'êtes pas sûr de la façon d'obtenir sécurisé, le moins que l'on puisse faire est de filtrer les $_GET tableau. Voici la fonction:
Maintenant, vous pouvez filtrer les $_GET comme ceci:
Ce sera essentiellement le nettoyage de votre $_GET tableau de suspect des caractères tels que [ ].
Grâce
Ci-dessus n'est pas strictement permettre l'exécution de code, mais il peut modifier le flux de contrôle de votre code existant, si elle ne prend pas en compte le fait que les données peuvent être un tableau.
La raison pour laquelle les travaux ci-dessus est parce que PHP interprète variables se terminant en [] sous la forme de tableaux. Donc, si vous fournir de multiples OBTENIR des variables avec le même nom se terminant par [], PHP crée un tableau contenant toutes les valeurs.
Longue histoire courte: pas de code d'exécution. Sinon, ne pensez-vous pas que quelqu'un aurait piraté Facebook déjà? 🙂
Je pense que la personne qui vous a dit que c'était confus au sujet de quelques autres bugs qui ont utilisé vaste éventail de nidification pour déclencher un dépassement de mémoire tampon double/gratuit/certains autres hack vecteur, qui pourrait théoriquement être utilisé pour exécuter un code. Ceux sont des bogues logiciels comme vous pouvez le voir tous les jours dans de nombreux logiciels populaires. Généralement, ils sont corrigés rapidement.
Vous pouvez trouver plus d'infos à http://www.suspekt.org/
Je pense qu'il parle de quelque chose d'évaluer différemment lorsqu'il est passé d'un tableau
strcasecmp( $_GET['password'], $password ) == 0 )
{
echo($secret);
}
`
Si vous passez un tableau vide dans strcasecmp il évalue à true pour quelque raison que ce soit.
IE: index.le php?mot de passe=[]
Il semble que vous avez mal compris quelque chose.
L'exemple ci-dessus crée simplement un tableau comme
Cela est documenté et fonctionne exactement comme prévu.
Quelqu'un a menti à vous, vous ne pourrez pas exécuter quoi que ce soit avec qui, vous aurez juste à envoyer un tableau au lieu d'une simple variable.
essayer ce code
et l'accès à l'aide ?x=1 et alors ?x[a]=1&x[b]=2, c'est le comportement attendu, pas d'injection, et vous ne pouvez pas exécuter n'importe quel code avec elle.
votre url envie d'être comme cela
http://www.mysite.com/page.php?nom=jean
mais vous voulez éviter d'insérer quelque chose comme cela
http://www.mysite.com/page.php?nom[]=john
solution: