La vulnérabilité de troncature SQL existe généralement dans les bases de données MySQL. Cette vulnérabilité a été décrite pour la première fois dans CVE-2008-4106, qui était liée à WordPress CMS.
Comment fonctionnent les attaques de troncature SQL
Cette attaque fonctionne en raison de la troncature de la saisie des utilisateurs dans les bases de données en utilisant les fonctions «sélection» et «insertion».
Supposons qu'un développeur crée la table «Utilisateurs» via la requête suivante:
Créer des utilisateurs de table (En utilisant ce schéma, si le développeur crée un compte d'administration avec les suivants:
user_name = 'admin'De toute évidence, ces références ne sont pas publiques. Il n'y a qu'un seul compte d'administration dans la base de données, et si un attaquant essaie d'enregistrer un autre compte auprès du nom d'utilisateur «Admin», l'attaquant échouera en raison des chèques de redondance de la base de données. L'attaquant peut toujours contourner ce chèque de redondance pour ajouter un autre compte d'administration en exploitant la vulnérabilité de troncature SQL. Supposons que l'attaquant enregistre un autre compte avec l'entrée suivante:
User_name = 'adminxxxxxxxxxxxxxxxxrandom'La base de données prendra le 'user_name' (26 caractères) et vérifiera si cela existe déjà. Ensuite, l'entrée user_name sera tronquée et 'admin' ('admin' avec espace) sera entrée dans la base de données, ce qui entraîne deux utilisateurs d'administration en double.
L'attaquant est alors en mesure de créer un utilisateur «administrateur» avec son propre mot de passe. Maintenant, la base de données a deux entrées d'administration «user_name», mais avec des mots de passe différents. L'attaquant peut se connecter avec les informations d'identification nouvellement créées pour obtenir un panneau d'administration car les deux user_ames «admin» et «admin» sont égaux pour le niveau de base de données. Maintenant, nous allons examiner un échantillon d'attaque pratique.
Échantillon d'attaque
Dans cet exemple, nous prendrons un scénario du site Web Overthewire.org. La communauté Overthewire fournit des CTF de Wargame sur lesquels nous pouvons pratiquer nos concepts de sécurité. Le scénario de troncature SQL se produit dans le niveau de jeu Natas 26-> 27. Nous pouvons accéder au niveau en utilisant les éléments suivants:
URL: http: // natas27.natas.laboratoires.trop surtonner.orgCe niveau est disponible sur: https: // overthewire.org / wargames / natas / natas27.html. On vous montrera une page de connexion vulnérable à une attaque de troncature SQL.
Lors de l'inspection du code source, vous verrez que la longueur du nom d'utilisateur est de 64, comme indiqué ci-dessous.
Un utilisateur nommé «NATAS28» existe déjà. Notre objectif est de créer un autre utilisateur nommé «NATAS28» en utilisant l'attaque SQL_TRUCcation. Nous allons donc saisir NATAS28, suivi de 57 espaces et d'un alphabet aléatoire (dans notre cas, a), de nom d'utilisateur et de tout mot de passe. La lettre «A» n'est pas visible dans la capture d'écran en raison du nom d'utilisateur de la longueur de 65 caractères. Après la création du compte utilisateur, vous pourrez voir le 'un.'
Si la base de données contient une vulnérabilité SQL_TRUNCation, alors la base de données doit maintenant avoir deux noms d'utilisateur «Natas28». Un nom d'utilisateur contiendra notre mot de passe. Essayons de saisir les informations d'identification sur la page de connexion.
Maintenant, nous sommes connectés en tant qu'utilisateur «NATAS28».
Atténuation
Pour atténuer cette attaque, nous devrons considérer plusieurs facteurs.
Par exemple, vérifions le mode strict en utilisant la requête suivante:
mysql> sélectionner @@ sql_modeNous créerons une base de données et les utilisateurs de la table.'
MySQL> Créer un test de base de donnéesEnsuite, nous créerons un utilisateur d'administration avec des informations d'identification en utilisant la requête d'insertion.
mysql> insérer dans les valeurs des utilisateurs ('admin', 'password1');Nous pouvons voir les informations de la table «Utilisateurs» à l'aide de l'option «Sélectionner * parmi les utilisateurs».
La longueur du nom d'utilisateur est de 10 caractères. Maintenant, nous allons essayer l'attaque de troncature SQL.
Lorsque nous essayons de saisir ce qui suit:
Username = 'adminxxxxxa'Nous obtiendrons une erreur, ce qui signifie que le mode strict est totalement efficace.
mysql> insérer dans les valeurs des utilisateurs ('admin a', 'pass2')Sans mode strict activé, la base de données publiera des avertissements, mais insérera toujours les données dans le tableau.
Conclusion
Les attaquants peuvent avoir accès à des comptes de grande privile si la vulnérabilité SQL_TRUNCTION existe dans votre application. L'attaquant peut facilement obtenir des informations sur un nom d'utilisateur et sa longueur de base de données à l'aide des champs critiques, puis créer le même nom d'utilisateur, suivi des espaces et de l'alphabet aléatoire après la longueur minimale, entraînant la création de plusieurs comptes de grande privile. Cette vulnérabilité est essentielle, mais elle peut être évitée si vous prenez des précautions de sécurité, telles que l'activation du mode strict pour les entrées des utilisateurs et que le champ sensible est la clé principale de la base de données.