Je viens de voir cela apparaître dans nos journaux de demandes. Qu'essayaient-ils de réaliser?
La chaîne de requête complète est:
properties?page=2side1111111111111 UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81,45),CHAR(45,120,52,45,81,45),CHAR(45,120,53,45,81,45),CHAR(45,120,54,45,81,45),CHAR(45,120,55,45,81,45),CHAR(45,120,56,45,81,45),CHAR(45,120,57,45,81,45),CHAR(45,120,49,48,45,81,45),CHAR(45,120,49,49,45,81,45),CHAR(45,120,49,50,45,81,45),CHAR(45,120,49,51,45,81,45),CHAR(45,120,49,52,45,81,45),CHAR(45,120,49,53,45,81,45),CHAR(45,120,49,54,45,81,45) -- /*
Edit: Comme une recherche google n'a rien retourné d'utile, je voulais poser la question aux personnes qui rencontrent la même chose.
Ce n'est qu'un test d'injection. Si un attaquant peut voir des xQ dans la sortie, il saura alors que l'injection est possible.
Il n'y a aucun "risque" de cette requête particulière.
Un développeur ne devrait pas prêter attention aux mécanismes, formats ou significations d'injection - ce ne sont pas ses affaires.
Il n'y a qu'une ne cause pour tout le nombre infini d'injections - une requête mal formatée. Tant que vos requêtes sont correctement formatées, les injections SQL ne sont pas possibles. Concentrez-vous sur vos requêtes plutôt que sur les méthodes d'injection SQL.
La fonction Char()
interprète chaque valeur comme un entier et renvoie une chaîne basée sur les caractères donnés par les valeurs de code de ces entiers. Avec Char()
, les valeurs NULL sont ignorées. La fonction est utilisée dans Microsoft SQL Server, Sybase et MySQL, tandis que CHR()
est utilisée par les SGBDR.
La fonction Char()
de SQL est utile lorsque (par exemple) addslashes()
pour PHP est utilisé comme mesure de précaution dans la requête SQL. L'utilisation de la fonction Char()
supprime le besoin de guillemets dans la requête injectée.
Un exemple de code PHP vulnérable à une injection SQL utilisant Char()
ressemblerait à ce qui suit:
$uname = addslashes( $_GET['id'] );
$query = 'SELECT username FROM users WHERE id = ' . $id;
Bien que addslashes()
ait été utilisé, le script ne purifie pas correctement l'entrée car il n'y a pas de guillemet de fin. Cela pourrait être exploité en utilisant la chaîne d'injection SQL suivante pour charger le fichier /etc/passwd
:
Source: http://hakipedia.com/index.php/SQL_Injection#Char.28.29