Ces vulnérabilités PHP courantes, si vous ne les connaissez pas, ne dites pas que vous êtes un lion de siège

Insérez la description de l'image ici

Une vulnérabilité de chiffrement MD5

Lors de la comparaison des chaînes de hachage, le programme php interprète chaque valeur de hachage commençant par "0x" comme la puissance de 0 en notation scientifique, et elle est toujours 0

Donc, si deux mots de passe différents sont hachés et que leurs valeurs de hachage commencent par "0e", alors PHP les considérera comme identiques.

De plus, dans le cryptage md5, il est possible que les deux chaînes soient différentes, mais la valeur cryptée est la même. Cette situation est appelée collision de hachage

<?php
$str1 = 's878926199a';
$str2 = 's214587387a';
 
echo json_encode([
 'md5_str1' => md5($str1),
 'md5_str2' => md5($str2),
 'bool' => md5($str1) == md5($str2)
]);

Le résultat est le suivant, les deux valeurs sont égales après le chiffrement

Inconvénients, vous savez, si le mot de passe d'un certain utilisateur d'un site Web commence par 0e après avoir été crypté, à ce moment-là, un pirate informatique vient le casser, et il est facile de s'introduire.

{
    
    
 md5_str1: "0e545993274517709034328855841020",
 md5_str2: "0e848240448830537924465865611904",
 bool: true
}

Deuxièmement, la vulnérabilité is_numeric

Ignorer les nombres hexadécimaux comme 0x

Opérations d'injection SQL faciles à déclencher, exposant des informations sensibles

echo json_encode([
 is_numeric(233333),
 is_numeric('233333'),
 is_numeric(0x233333),
 is_numeric('0x233333'),
 is_numeric('233333abc'),
]);

Le résultat est le suivant

Le code hexadécimal 0x61646D696EASII correspond à admin

Si nous exécutons la commande suivante: SELECT * FROM tp_user où username = 0x61646D696E, le résultat est évident

[
 true,
 true,
 true,
 false,
 false
]

Troisièmement, vulnérabilité in_array

Dans in_array, le type est d'abord converti en plastique, puis jugé

En tant que langage faiblement typé, PHP aura de grandes failles lors de la conversion de type

Lors de la conversion, si la chaîne est convertie en entier, la conversion est coupée de la partie non entière de la chaîne, et si elle ne peut pas être convertie, elle retournera 0

<?php
var_dump(in_array("2%20and%20%", [0,2,3]));

Le résultat est le suivant

bool(true)

Quatre, changer la vulnérabilité

Dans switch, le type est d'abord converti en plastique, puis jugé

En tant que langage faiblement typé, PHP aura de grandes failles lors de la conversion de type

Lors de la conversion, si la chaîne est convertie en entier, la conversion est coupée de la partie non entière de la chaîne, et si elle ne peut pas être convertie, elle retournera 0

<?php
$i ="abc";
switch ($i) {
    
    
 case 0:
 case 1:
 case 2:
 echo "i是比3小的数";
 break;
 case 3:
 echo "i等于3";
}

Le résultat est le suivant

i est un nombre inférieur à 3

Cinq, vulnérabilité de conversion forcée intval

En tant que langage faiblement typé, PHP aura de grandes failles lors de la conversion de type

Lors de la conversion, si la chaîne est convertie en entier, la conversion est coupée de la partie non entière de la chaîne, et si elle ne peut pas être convertie, elle retournera 0

<?php
var_dump(intval('2')); //2
var_dump(intval('3abcd')); //3
var_dump(intval('abcd')); //0

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/liuxingjiaoyu/article/details/112987029
conseillé
Classement